Terraformで最新のECS Optimized AMIのidをとってくる方法
もっといい方法があったので一番下に追記
最新のAMIみたいな情報は今どきはSSMで提供してくれるようになってきています。
Amazon ECS 最適化 AMI バージョン - Amazon Elastic Container Service
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended --query "Parameters[0].Value" --output text
{ "schema_version": 1, "image_name": "amzn2-ami-ecs-hvm-2.0.20200623-x86_64-ebs", "image_id": "ami-08d175f1b493f205f", "os": "Amazon Linux 2", "ecs_runtime_version": "Docker version 19.03.6-ce", "ecs_agent_version": "1.41.0" }
ただ、valueの値がjson
形式なので、data.aws_ssm_parameter.ecs_optimized_ami.value
ってやってもjsonencodeされたものが返ってきてしまうので、そのままは使えない
jsondecodeを使う
Value
はjson形式なので、そのままではTerraformでは使えないので、以下のような感じでjsondecode
を使えばいける。
data "aws_ssm_parameter" "ecs_optimized_ami" { name = "/aws/service/ecs/optimized-ami/amazon-linux-2/arm64/recommended" } resource "aws_launch_configuration" "cluster" { name = "ecs-cluster-${aws_ecs_cluster.cluster.name}" image_id = jsondecode(data.aws_ssm_parameter.ecs_optimized_ami.value).image_id ... }
追記: jsondecode不要
`/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id` で取得すればjsondecode不要。
— たくみー.org (@reirei_As) 2020年6月29日
Terraformで最新のECS Optimized AMIのidをとってくる方法 - まーぽんって誰がつけたの? https://t.co/9WfoIYAU6T
エゴサしてたらTwitterで見つけました。ありがとうございます。
この公式ドキュメントにもあるように、image_id
などサブパラメータとして取得できるみたいです。
data "aws_ssm_parameter" "ecs_optimized_ami_image_id" { name = "/aws/service/ecs/optimized-ami/amazon-linux-2/arm64/recommended/image_id" } resource "aws_launch_configuration" "cluster" { name = "ecs-cluster-${aws_ecs_cluster.cluster.name}" image_id = data.aws_ssm_parameter.ecs_optimized_ami_mage_id.value ... }