Serverless 始めてみました
最近の流行りのサーバーレスなアプリケーションを作成してみようと、Serverless Framework を触ってみました。
基本的に、AWS Lambdaを活用したServerless Frameworkを触ってみる - Qiita の焼き直しです。
Serverless 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 が良いのかな。
- slssHello
- Stage
- dev
- AWS Profile
- default
- ~/.aws/credentials に設定されていたものを利用。
- default
- 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 が作成されているのが確認できる。
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 で実行すると、メッセージが返ってきました。
このように設定されています。
まとめ
とりあえず、Lambda + API Gateway のAPI作成できました。
次は、定期的に Slack へメッセージ送信をやってみようと思います。