メイン

最近の流行りのサーバーレスなアプリケーションを作成してみようと、Serverless Framework を触ってみました。

基本的に、AWS Lambdaを活用したServerless Frameworkを触ってみる - Qiita の焼き直しです。

Serverless Framework とは

  • Severless Framework

    Serverless Framework はサーバレスなアプリケーションサービスを構築するためのフレームワークで、AWSの各種サービスを相互活用して動作します。 AWS Lambdaを中心に添えた構成によりメンテナンス性とスケーラビリティがが高いサービスを構築することができます。

とのことです。

Serverless Framework のインストール

$ npm install -g serverless

今回利用するのは、serverless@0.5.0になります。

プロジェクトの作成

$ serverless project create
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v0.5.0
`-------'

Serverless: Initializing Serverless Project...
Serverless: Enter a name for this project:  (serverless-4y33cs) slssHello
Serverless: Enter a new stage name for this project:  dev
Serverless: For the "dev" stage, do you want to use an existing Amazon Web Services profile or create a new one?
  > Existing Profile
    Create A New Profile
Serverless: Select a profile for your project:
  > default
Serverless: Creating stage "dev"...
Serverless: Select a new region for your stage:
  > us-east-1
    us-west-2
    eu-west-1
    eu-central-1
    ap-northeast-1
Serverless: Creating region "us-east-1" in stage "dev"...
Serverless: Deploying resources to stage "dev" in region "us-east-1" via Cloudformation (~3 minutes)...
Serverless: Successfully deployed "dev" resources to "us-east-1"
Serverless: Successfully created region "us-east-1" within stage "dev"
Serverless: Successfully created stage "dev"
Serverless: Successfully initialized project "slssHello"

適当に下記設定にしてみました。

  • Project
    • slssHello
      • lowerCamelCase が良いのかな。
  • Stage
    • dev
  • AWS Profile
    • default
      • ~/.aws/credentials に設定されていたものを利用。
  • Region
    • us-east-1

プロジェクト作成後、CloudFormationが実行されます。 その設定ファイルは、s-resources-cf.jsonですね。

$ slss dash summaryを実行すると、サマリが表示されるようですね。

$ slss dash summary
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v0.5.0
`-------'

Serverless: 1 stages ------------------------------
Serverless:     |_ dev (1 regions)
Serverless:         |_ us-east-1

Serverless: 0 functions --------------------------

Serverless: SUMMARY -------------------------------
Serverless: stages     : 1
Serverless: regions    : 1
Serverless: functions  : 0
Serverless: endpoints  : 0
Serverless: events     : 0

function の作成

$ slss function create
Serverless: Enter a new function name:  echo
Serverless: Please, select a runtime for this new Function
  > nodejs
    python2.7
Serverless: For this new Function, would you like to create an Endpoint, Event, or just the Function?
  > Create Endpoint
    Create Event
    Just the Function...
Serverless: Successfully created function: "echo"

このエントリを作成する前は、v0.4.2 を利用していたのですが、component はなくなっているようです。

function echo の実行

$ slss function run echo
Serverless: Running echo...
Serverless: -----------------
Serverless: Success! - This Response Was Returned:
Serverless: {
    "message": "Go Serverless! Your Lambda function executed successfully!"
}

./echo/handler.js を変更すると、表示するメッセージは変えられるようです。

function echo のデプロイ

コスト節約のため、デプロイする前に、Lambda の MemorySize を変更します。
./echo/s-function.json を変更し、128MB に変更しました。

では、デプロイ。

$ slss function deploy echo
Serverless: Deploying functions in "dev" to the following regions: us-east-1
Serverless: ------------------------
Serverless: Successfully deployed functions in "dev" to the following regions:
Serverless: us-east-1 ------------------------
Serverless:   echo (slssHello-echo): arn:aws:lambda:us-east-1:xxxx:function:slssHello-echo:dev

マネジメントコンソールをみると、function が作成されているのが確認できる。

slssHello-echo が作成されている

API Gateway にデプロイ

$ slss endpoint deploy

Serverless: Deploying endpoints in "dev" to the following regions: us-east-1
Serverless: Successfully deployed endpoints in "dev" to the following regions:
Serverless: us-east-1 ------------------------
Serverless:   GET - echo - https://xxxx.execute-api.us-east-1.amazonaws.com/dev/echo

デプロイできました。

$ curl -s "https://xxxx.execute-api.us-east-1.amazonaws.com/dev/echo" | jq .
{
  "message": "Go Serverless! Your Lambda function executed successfully!"
}

curl で実行すると、メッセージが返ってきました。

API Gatewayの設定値

このように設定されています。

まとめ

とりあえず、Lambda + API Gateway のAPI作成できました。
次は、定期的に Slack へメッセージ送信をやってみようと思います。

今回作成したソース