アプリケーションの作成
serverless create
でアプリケーションを作成できる。
$ serverless -v
1.45.1
$ serverless create --template aws-nodejs --path serverless-hello
$ cd serverless-hello
handler.js serverless.yml
生成されたファイルの内容
hanler.js
'use strict';
module.exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}, null, 2),
};
};
servlerless.yml
service: serverless-hello # NOTE: update this with your service name
provider:
name: aws
runtime: nodejs10.x
functions:
hello:
handler: handler.hello
権限の追加
serverless
コマンドの実行のためには AdministratorAccess
の権限が必要
デプロイ
デプロイをしてみる。
$ serverless deploy -v
Lambdaの管理画面を開いてみると関数がデプロイされているのが確認できる。
デフォルトだとバージニア北部リージョンにデプロイされるようだ。
serverless.yml
でregionを設定すると東京リージョンにデプロイできた。
provider:
name: aws
runtime: nodejs10.x
region: ap-northeast-1
関数の実行
$ serverless invoke -f hello -l
{
"statusCode": 200,
"body": "{\n \"message\": \"Go Serverless v1.0! Your function executed successfully!\",\n \"input\": {}\n}"
}
--------------------------------------------------------------------
START RequestId: a4f48ac5-6505-4043-adfe-84c0d6c42cfb Version: $LATEST
END RequestId: a4f48ac5-6505-4043-adfe-84c0d6c42cfb
REPORT RequestId: a4f48ac5-6505-4043-adfe-84c0d6c42cfb Duration: 8.86 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 74 MB
HTTPでのアクセス
servlerless.yml
で events
を設定すると、HTTPでアクセスできるようになります。
functions:
hello:
handler: handler.hello
events:
- http: GET hello
$ serverless deploy -v
Serverless: Packaging service...
...
Service Information
service: serverless-hello
stage: dev
region: ap-northeast-1
stack: serverless-hello-dev
resources: 10
api keys:
None
endpoints:
GET - https://j3scq3sam6.execute-api.ap-northeast-1.amazonaws.com/dev/hello
functions:
hello: serverless-hello-dev-hello
layers:
None
...
動作確認してみます。
$ curl https://j3scq3sam6.execute-api.ap-northeast-1.amazonaws.com/dev/hello | head
{
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": {
"resource": "/hello",
"path": "/hello",
"httpMethod": "GET",
"headers": {
"Accept": "*/*",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
削除
serverless remove
でお掃除ができます。
$ serverless remove