先日AWSから 『[アクションが必要です] AWS Lambda での Node.js 16 のサポート終了について』 というタイトルのメールを受け取ったので、早速アップグレードを試みたのですが、Terraform初心者としてハマるところが多かったので、備忘録としての投稿です。
前提
今回の例は、以前Terraformで構築したNode.js 16のAWS Lambdaを、Node.js 20に更新するものです。
またTerraformは当初、1.4.4を使用していました。
LambdaのNode.js Runtimeが更新できない!
AWSからのメールにあった2024 年 6 月 12 日までに、既存の Node.js 16 の関数を Node.js 20 にアップグレードすることをお勧めします。
の指示に従い、aws_lambda_functionのruntimeをnodejs16.x
からnodejs20.x
に変更し、terraformのコマンドを実行したところ…
nodejs20.xがサポートされていないように見える?
Terraformのupdate情報を確認する
本稿執筆時点で、Terraformの最新版が1.6.6とのことだったので、1.4.4から1.6.6にアップグレードして再度トライしてみましたが、エラーメッセージは変わらず。
terraform-provider-awsのchangelogを確認すると、2023/11/16リリースの5.26.0でnodejs20.xが追加されたことを確認。
https://github.com/hashicorp/terraform-provider-aws/blob/5deca6413355b80d737a33f646223798dc0af2cc/CHANGELOG.md?plain=1#L233
一方でTerraformの1.6.6は2023/12/13リリースなので、Terraformのミスとは考えづらい。
https://github.com/hashicorp/terraform/releases/tag/v1.6.6
terraform-provider-awsを別途指定する方法があると考えるのが自然かも?
灯台下暗し
terraform-provider-awsを指定できないか?と思いながら改めてterraformのバージョンを確認していたところ、
provider_registry.terraform.io/hashicorp/aws v4.63.0
君だったのか!と気付き、Terraformの設定に以下を追加。(上述のterraform-provider-awsの情報に合わせ、5.26.0以上としました。)
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.26.0"
}
}
}
早速Terraformコマンドを実行したところ、
指示された通りterraform init -upgrade
を実行したところ、aws_lambda_functionのruntimeにnodejs20.xを指定できるようになりました。
所感
今回のトラブルシューティングを含め、昨今Google検索だけでは必要な情報を見つけられない印象が自分の中にあります。昨今は、以下のように情報収集して問題解決することが増えてきています。
- 当該ツール・アプリのGitHubリポジトリを確認する。
- Issue・changelog・テストコードに、欲しい情報が見つかることが多いです。
- エラーメッセージを詳細に確認する。
- 単純なバージョン情報や、隅の方に表示されているメッセージが、案外キーになっていることが昨今多いかも。