serverless framework で AWS lambdaのデプロイをする
主に利用方法のメモです。
前提
- nodeはインストール済み
- AWSの権限は設定済み
インストール
serverlessコマンドのエイリアスとしてslsコマンドが登録される。
$ npm install -g serverless $ sls -v 1.30.0
新規サービスの作成
ここではpython3のテンプレートから作成する。利用できるテンプレートはsls create -hで確認できる。
$ sls create -t aws-python3 -p sample-app $ cd sample-app $ tree -L 1 . ├── handler.py # lambdaファンクションのテンプレート └── serverless.yml # serverlessの設定ファイル
プラグイン機能
serverlessにはプラグイン機能が準備されている。
プラグインの検索
$ sls plugin search --query python
プラグインのインストール
serverless-python-requirementsをインストールする。serverless-python-requirementsはrequirements.txtに記載されたモジュールをデプロイ時にまとめてパッケージ化してくれるプラグイン。
$ sls plugin install -n serverless-python-requirements
サービスのデプロイ
プロファイルを指定する場合は--aws-profileオプションで、ステージを指定する場合は--stageオプションで行う。
$ sls deploy --aws-profile profile_file --stage prod
serverlessの設定
基本的な設定はドキュメントを参照。自身が運用するにあたってハマりどころだけ記載する。
既存のroleを指定する
既存のロールの権限を与えたい場合は、roleキーにIAMロールのarnを指定する。
provider:
name: aws
runtime: python3.6
stage: ${opt:stage, 'dev'}
region: ap-northeast-1
role: arn:aws:iam::xxxxxxxxxx:role/lambda-role
...
stage毎に環境変数を変える
各ステージ用の設定ファイル作成
$ mkdir conf && cd conf $ touch dev.yml, prod.yml $ vi dev.yml DYNAMODB_TABLE: 'dev_dynamo_table' # 本番用も同じように
serverlessの設定
stage毎の設定ファイルを読み込ませ、環境変数の設定で指定したstageの値をセットする。 devを指定した場合はdev.yml、prodを指定した場合はprod.ymlのDYNAMODB_TABLEの値がセットされることになる。
functions:
speech-translation:
handler: handler.handler
events:
- schedule: rate(30 minutes)
environment:
DYNAMODB_TABLE: ${self:custom.otherfile.environment.${self:provider.stage}.DYNAMODB_TABLE}
custom:
otherfile:
environment:
dev: ${file(./conf/dev.yml)}
prod: ${file(./conf/prod.yml)}
共通の環境変数を設定する
provider.environmentに指定する。
provider:
... 省略
environment:
DYNAMODB_ENDPOINT: 'https://dynamodb.ap-northeast-1.amazonaws.com'
注意事項
serverlessでデプロイした場合、タイムアウトが6秒に設定される。時間がかかる処理をする場合は変更する必要がある。