Serverless Framework で Lambda Layers のバージョンを指定せずにデプロイする方法

AWS運用自動化サービス「Cloud Automator」



はじめに

こんにちは、技術一課の山中です。

Lambda Layers を AWS Lambda で利用する場合に、デプロイ時の最新の Layer を常に利用したいことがあったので、どのようにすればよいのか考えたことを以下に記します。

Lambda Layers のデプロイ

現在、Lambda Layers にデプロイするディレクトリの構成は以下の通りです。

デプロイする Python コードの中身は以下のようになっています。
say メソッドに引数を渡すことで say [引数] from layer を print してくれるという優れものです。

今回は Serverless Framework を利用してデプロイしますので、 serverless.yml を以下のように定義します。

ここまで準備できたら serverless deploy コマンドでデプロイしてください。

Lambda Layers を利用するファンクションのデプロイ

通常であれば、以下のように serverless.yml で Lambda Layers の ARN をバージョンまで指定して定義しなければなりません。

バージョン番号を指定せず常にデプロイ時に最新の Layers を指定したい場合はどのようにすればよいのでしょうか。
Serverless Framework では CloudFormation を利用して生成されたリソースを以下の形で参照し、利用することができます。

先ほどデプロイした Lambda Layers の出力キーは以下となっているので、これを利用してこれからデプロイする Lambda から参照するように serverless.yml を修正してみましょう。

${cf:sample-layers-dev.SampleLayersLambdaLayerQualifiedArn}sample-layers-dev が Lambda Layers デプロイ時のスタック名、 SampleLayersLambdaLayerQualifiedArn が出力キーとなっています。
また、今回デプロイする lambda_function.py は以下です。

ここまで準備できたら Lambda ファンクションもデプロイしてみてください。

実行してみる

デプロイした Lambda ファンクションを実行してみましょう。

きちんと Lambda Layers のメソッドを利用できています。

おわりに

先日デプロイパッケージの制限に引っかかりデプロイできない事案があったので、 Lambda のデプロイ時は以下をよく参照してデプロイしてください。

AWS Lambda の制限 – AWS Lambda

AWS運用自動化サービス「Cloud Automator」