serverless
ServerlessFramework

Serverless Framework v1.26.0リリースノート

Serverless Frameworkv1.26.0がリリースされました。その内容を機能毎にまとめています。

Shared API

新たにShard APIという機能がリリースされました。これは既存のCloudFormation StackでデプロイされているAPI Gatewayを別のStackから参照することで、既存のAPIの配下に新たにAPIリソースを追加するという機能です。

Serverless Framework、というかCloudFormationには1つのStackにつき、200個までしかリソースが上げられないという制限があります。そしてAPI Gatewayのエンドポイントを大量に作ってその制限に引っかかるケースが多いようです。これに対応するための機能となります。

具体的には以下のようにprovider配下に参照したいAPI Gatewayの情報を定義することで機能が使えるようになります。

serverless.yml
service: service-b
provider: 
  apiGateway:
    restApiId: xxxxxxxxxx # REST API resource ID. Default is generated by the framework
    restApiRootResourceId: xxxxxxxxxx # Root resource, represent as / path

functions:
  create:
    handler: posts.createComment
    events:
      - http:
          method: post
          path: /posts/{id}/comments

AWS Go support

Go用のスターターテンプレートがFramework内部に内包されました。複数functionにも対応できるようにディレクトリ毎にmain.goを分離するような仕組みとなっています。

使いたい場合は以下のコマンドで出来ます。

$ serverless create -t aws-go 
$ serverless create -t aws-go -p service-path

serverless.js configuration file support

Frameworkの設定は、serverless.ymlで記述しますが、今回serverless.jsという形式の設定ファイルをサポートしました。

要は設定ファイル内にJavaScriptを直接記述できるので、動的な値を取得して設定値とするといったことが可能になります。例えばShard APIの機能を使うにはAPI GatewayのID情報をserverless.yml内にハードコーディングしなければなりません。しかし、serverless.jsを使うことで動的にその部分を処理することが可能となります。

具体的には以下のようにmodule.exportsに設定値のJsonを渡す形になります。

serverless.js
- JavaScriptコード -

module.exports = {
  provider:
    name: "aws"
  ....
}

logRetentionInDays config

serverless.ymlのproviderセクションにCloudWatchLogsのログ保持期間のデフォルト値を設定できるようになりました。今まではデフォルト値が30日でその設定を上書きしたい場合は以下のようにresourcesセクションで上書きをしていたかもしれません。

serverless.yml
resources:
  Resources:
    WriteDashPostLogGroup:
      Type: AWS::Logs::LogGroup
      Properties:
        RetentionInDays: "10"

しかし、これからは以下の設定で済みます。

serverless.yml
provider:
  logRetentionInDays: 10

serverless createコマンドへの--template-pathオプションの追加

このオプションを使うことでローカルにあるServerless projectをコピーして新規プロジェクトがセットアップできます。以下のような形です。

serverless create --template-path /usr/local/src/sls-project --path my-service

Java用にPOJO input typeへの対応

Javaを使用する際にPOJO (Plain Old Java Object) 型が可能となりました。
具体的にはAWSのドキュメントを参照: https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-programming-model-req-resp.html