最近 AWS Lambda を開発・デプロイするにあたり、serverless framework を使っているのですが、多くのnpmプラグインがあります。
今回は今まで利用したプラグインを備忘録としてまとめておきます。
serverless-domain-manager
API Gatewayのカスタムドメインを作ることができます
設定例
下記で、ACMによる証明書の発行、Route53へのレコード登録、カスタムドメイン設定の追加を行えます。
custom:
defaultStage: dev
customDomain:
domainName: hogehoge.fugafuga.com
basePath: ${self:provider.stage}
stage: ${self:provider.stage}
certificateName: '*.fugafuga.com'
createRoute53Record: true
serverless-offline
serverless framework の設定を使って、ローカルで Lambda と APIGateway をエミュレートするためのプラグインになります。
設定例
plugins に以下を追加して実行するだけで起動します。
plugins:
- serverless-offline
serverless offline start
あとは APIGateewayのようにリクエストを投げればOKです
curl -H 'x-api-key:<offline実行時に発行されたキー>' <URL>
serverless-offline-ssm-provider
serverless framework上で環境変数に SSM からの値を適応したい時、ローカル上でも再現する場合に使います。
.env
ファイルをSSMのリソースと見立てて読み込むことができます。
設定例
plugins:
- serverless-offline-ssm-provider
- serverless-offline
functions:
ssm_sample:
name: ${self:service}_${self:provider.stage}
handler: lambda.handler
role: <Lambdaに設定するロール>
environment:
SSM_PARAMETER_VALUE: ${ssm:sample_ssm_parameter}
sample_ssm_parameter=plain_text
serverless-s3-local
serverless-offline で ローカルで S3 をエミュレートするためのツールです。S3のEventにも対応してます。
設定例
(リポジトリ内にもサンプルがあります)
service: local-s3
plugins:
- serverless-offline
- serverless-s3-local
provider:
name: aws
runtime: python3.7
stage: ${opt:stage, self:custom.defaultStage}
s3:
port: 4569
directory: /tmp # ホストマシンでファイルを配置したいディレクトリを指定します
custom:
defaultStage: dev
functions:
s3hook:
name: ${self:service}_${self:provider.stage}
handler: lambda.handler
role: <Lambdaに設定するロール>
events:
- s3:
bucket: local-bucket
events:
- s3:ObjectRemoved:*
rules:
- suffix: .txt
ローカルS3の AWS-CLI によるアクセス方法
-
~/.aws/config
と~/.aws/credential
を編集しておきます。(別 profileで分けておきます)
[s3local]
region=<Lambdaと同じregion>
[s3local]
aws_access_key_id=S3RVER
aws_secret_access_key=S3RVER
- serverless offline を用いて、Lambdaを実行します
serverelss offline start
- ローカルS3のファイルを操作するには、エンドポイントを指定します(AWS CLIが必要です)
- S3はオブジェクトストレージなので、指定したホストマシン側のS3ファイル保存先パスにファイルコピーするだけだとダメです。ホストマシンはファイルシステムなので、保存形式が異なります。
# コピーの例です
aws --endpoint="localhost:4569" s3 cp ~/tmp/data.csv s3://local-bucket/userdata.csv --profile s3local
serverless-existing-s3
S3が既にある場合にS3イベントを紐付けするためのプラグイン。
serverless framework v1.48~ はS3が既にある場合も紐付けが可能ですが、こちらの方法だと内部で IAMロール を作成しないため、一応紹介しておきます。
設定例
plugins:
- serverless-plugin-existing-s3
provider:
name: aws
custom:
defaultStage: dev
functions:
integrationS3:
name: ${self:service}_${self:provider.stage}
handler: lambda.handler
role: <Lambdaに設定するロール>
events:
- existingS3:
bucket: hogehoge-s3-bucket
events:
- s3:ObjectCreated:PUT
終わりに
今回紹介したのは、ローカルにAWSをエミュレートするようなプラグインばかりでした。。。
serverless framework はアップデートも周辺プラグインの更新も早いので、今後の動向に注意して使いたいですね。