【基礎から学ぶ】TerraformとAWS Lambda Layers のアレコレ

記事タイトルとURLをコピーする

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レイヤーを使用できます。

registry.terraform.io

気をつけておく必要があるのは、Terraform管理下のLambdaレイヤーを更新する場合、更新前のバージョンは削除されることとなります(例えばAWSマネジメントコンソールから新しいレイヤーのバージョンを追加した場合は、古いバージョンは削除されないためふるまいが異なります)。

レイヤ-を参照するLambda関数もそのTerraform管理下であり、レイヤーのバージョンを追随するようにしておけば問題はありません。しかし、別のリソースからそのレイヤーを参照している場合等、更新前のバージョンも残しておきたい場合があるかもしれません。

その場合には skip_destroy オプションを true にしてレイヤーのリソースに追加しておくことで、そのバージョンが削除されないようにできます。

注意点として、削除されなくなるのは、 skip_destroy オプションを追加してから作成したバージョンからで、 skip_destroy オプションを追加してすぐに apply では現在のバージョンは削除されることとなります。

参考

github.com

github.com