Serverless Frameworkで知っておくと便利な設定


はじめに

Serverlessを本番に組み込むにあたりこの設定いいなーというものを書いていきます。

環境

  • Serverless Framework 1.36.1
  • Node 6.9.0
  • ランタイム(Ruby 2.5.0)

CloudWatch Logsの保存期間を指定する

providerlogRetentionInDaysで保持日数を指定してあげれば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

上記のように、BillingModePAY_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.ymlproviderセクションに環境変数TZ: Azia/Tokyoを設定してあげれば変更が出来ます。

provider:
  environment:
    TZ: Asia/Tokyo

終わりに

今後も便利な設定があれば追記予定ですので、こんな便利な設定があるよなど教えていただけますと幸いです。