TerraformでAWS Lambda Layers(以下レイヤー)を扱う際のアレコレをまとめたいと思います。
Lambdaレイヤーのバージョンについて
Lambda関数からLambdaレイヤーを使う際は、レイヤーに付与されているバージョンを指定することとなります。 このバージョンはレイヤーのコードを更新する際に、インクリメントされます。
したがって、Lambda関数から、更新されたレイヤーを参照したい場合は、Lambda関数側で参照するレイヤーのバージョンも更新する必要があります。
1点注意が必要なのが、レイヤーのバージョンを削除した後でも、Lambda関数はその削除されたバージョンのレイヤーを継続して参照できることです。 ただし、新規にLambda関数からレイヤーを追加するような場合は、削除されたバージョンのレイヤーを参照することはできません。
レイヤーの作成者は、バージョンのレイヤーを削除することができます。その関数のレイヤーを使用している場合、レイヤーバージョンがあたかも存在しているように、関数は実行し続けます。ただし、レイヤー設定を更新する場合は、削除したバージョンへの参照を削除する必要があります。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-layers.html
Terraform からLambdaレイヤーを使う
TerraformのAWSプロバイダでもLambdaレイヤーを使用できます。
気をつけておく必要があるのは、Terraform管理下のLambdaレイヤーを更新する場合、更新前のバージョンは削除されることとなります(例えばAWSマネジメントコンソールから新しいレイヤーのバージョンを追加した場合は、古いバージョンは削除されないためふるまいが異なります)。
レイヤ-を参照するLambda関数もそのTerraform管理下であり、レイヤーのバージョンを追随するようにしておけば問題はありません。しかし、別のリソースからそのレイヤーを参照している場合等、更新前のバージョンも残しておきたい場合があるかもしれません。
その場合には skip_destroy
オプションを true
にしてレイヤーのリソースに追加しておくことで、そのバージョンが削除されないようにできます。
注意点として、削除されなくなるのは、 skip_destroy
オプションを追加してから作成したバージョンからで、 skip_destroy
オプションを追加してすぐに apply では現在のバージョンは削除されることとなります。