はじめに
Serverlessを本番に組み込むにあたりこの設定いいなーというものを書いていきます。
環境
- Serverless Framework 1.36.1
- Node 6.9.0
- ランタイム(Ruby 2.5.0)
CloudWatch Logsの保存期間を指定する
provider
にlogRetentionInDays
で保持日数を指定してあげればOKです。
これを指定しないと、保持期間が無制限となるので、特にずっと保持しておく必要がなければ、指定しておきましょう
以下の設定では10日保持するとしています。
provider:
logRetentionInDays: 10
デプロイバージョン管理指定を変更する
Serverless Frameworkではsls deploy
を行うごとに、バージョン管理されたフォルダをS3に保存します。
こちらもCloudWatch Logs同様に無制限にフォルダがS3に格納されていってしまうので、古いバージョンをいくつまで保存するのか設定を行いましょう。
serverless-prune-pluginのプラグインを使うことで簡単に設定できます。
package.json
のある階層で以下を実行します。
$ npm install --save-dev serverless-prune-plugin
以上を実行したら、serverless.yml
に以下を追加します。
plugins:
- serverless-prune-plugin
デプロイ後に自動で実行させたいので、以下のようにserverless.yml
に追記をします。
custom:
prune:
automatic: true
number: 5
上記のように設定することで、デプロイを行なうと過去5つのバージョンまでが保存されているかと思います。
DynamoDBのオンデマンド(リクエスト数課金)設定
DynamoDBではリクエスト数に応じて課金となるオンデマンド設定が用意されています。
それをServerless Frameworkで使うには、以下のようにResource
を変更します。
Resources:
DynamoDbTestTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
# BillingModeを変更
BillingMode: PAY_PER_REQUEST
TableName: test-tables
上記のように、BillingMode
をPAY_PER_REQUEST
にすることで設定が可能です。
DynamoDBのレコードに有効期限を設定する
大量のトランザクションデータを保存するときなどにレコードの有効期限を設定したかったりします。
この設定を知る前はLambdaでバッチ処理を書いてレコードを削除していましたが、以下の設定でそれらを行うことなく実現が出来ます。
serverless-dynamodb-ttl このプラグインを使うことで簡単に設定が出来るので、使用します。
$ npm install serverless-dynamodb-ttl --save
次にserverless.yml
を編集します。
plugins
セクションにプラグイン名を追記し、custom
セクションに設定をするテーブル名と有効期限を格納したカラム名を指定します。
plugins:
- serverless-dynamodb-ttl
custom:
dynamodb:
ttl:
- table: test-table # テーブル名
field: expiration_date # カラム名
expiration_date
にはunixtime
で有効期限を設定する必要があります。

Serverlessのタイムゾーンを日本時間に変更する
日本時間に変更するには、serverless.yml
のprovider
セクションに環境変数TZ: Azia/Tokyo
を設定してあげれば変更が出来ます。
provider:
environment:
TZ: Asia/Tokyo
終わりに
今後も便利な設定があれば追記予定ですので、こんな便利な設定があるよなど教えていただけますと幸いです。