最初に
案件で初めてServerlessFrameworkを使用しました。
自分の認識が正しいのか読んでくださった方にレビューを頂きたいのと、
将来忘れた頃に自分が作る事になるかもしれないので覚え書きとしてまとめておきました。
間違いがあれば編集リクエストを投げてくださると大変有難いです。宜しくお願いします。
Serverless Framework
AWS CloudFormationのラッパーだよ。
CloudFormationはテンプレートを与えてやるとアプリケーションが構築出来ちゃうやつだよ。
👉今回はYAMLでテンプレートを書いたよ。
👉しかも、デプロイはコマンド一発で出来ちゃうよ。
👉デプロイすると、上から順番に一気に実行するよ。転けると途中で止まっちゃうよ。全部成功してから立ち上がるよ。
👉失敗すると、前のデプロイも取り消されちゃうよ。
👉一個だけデプロイしたい時は、コマンドで指定できるよ。
開発の流れ
- サーバ側(Cognito)を用意する
- テンプレートを作成する
- デプロイする
- 出来上がる
コマンドの種類
基本コマンド
sls
デプロイ
sls deploy
特定の関数だけデプロイ
sls deploy -f hoge
特定のAPIステージを切りたい
sls deploy --stage hoge
ロール
それぞれLambdaが立つけど、ロールは共有されるよ
テンプレート(YAML)の書き方
service: hoge
custom:
defaultStage: dev
defaultProfile: default
defaultRegion: ap-northeast-1
congnitoARN: "arn:aws:cognito-idp:ap-northeast-1:hogehogehugahuga~~~"
provider:
name: aws
runtime: nodejs8.10
timeout: 29
environment:
TZ: Asia/Tokyo
##opt:stageにはステージ名が入る
##sls deploy --stage hoge などでデプロイをかけない場合は
##defaultStageに設定したステージ名が入る(この場合はdevが入る)
stage: ${opt:stage, self:custom.defaultStage}
profile: ${opt:profile, self:custom.defaultProfile
region: ${opt:region, self:custom.defaultRegion}
iamRoleStatements:
- Effect: "Allow"
Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/hogehuga"
Action:
- "dynamodb:GetItem"
- "dynamodb:PutItem"
- "dynamodb:Update"
- "dynamodb:Query"
- "dynamodb:DeleteItem"
Function:
lambdaの名前:
handler:どのJSを読み込む?
description:説明文
event: //キックされるタイミング
-http: //APIGatewayの事
Lambdaを追加する時はindex.jsにファイルをインポートしてあげなきゃダメだよ。
デプロイしたものを削除したい
YAMLのdefaultStageを削除したいステージ名に変更してから、
sls remove
を実行する。