詳解Terraformを読み進めていてちょっと躓いたところ - 起動設定(launch configuration)が使えなかった話
はじめに
こんにちは。最近は暖かくなったかと思えば急に寒くなったりと、体調を崩しやすい日々が続いていますね。皆さんも体調にはぜひお気を付けください。
さて、最近「詳解Terraform 第3版」を使ってterraformの学習を始めました。本書の第2章で作成するAuto Scaling GroupとApplication Load Balancerのサンプルコードを実行してみたところ、少し躓いたポイントがあったので共有します。
2025年現在、本書の内容そのままでは動かない部分があるので、同じ本で学習している方の参考になれば幸いです。
発生したエラー
本書の指示通りにTerraformコードを書いて最後にterraform apply
を実行したところ、以下のエラーが表示されました。
│ Error: creating Auto Scaling Launch Configuration (terraform-20250329084322257000000001): operation error Auto Scaling: CreateLaunchConfiguration, https response error StatusCode: 400, RequestID: 24a3bf15-b1a6-4dac-a96c-1270302eae9a, api error UnsupportedOperation: The Launch Configuration creation operation is not available in your account. Use launch templates to create configuration templates for your Auto Scaling groups.
│
│ with aws_launch_configuration.example,
│ on main.tf line 16, in resource "aws_launch_configuration" "example":
│ 16: resource "aws_launch_configuration" "example" {
ひとことで言うと「起動設定(Launch Configuration)という機能は使えないから、代わりに起動テンプレート(Launch Template)を使ってね」というエラーです。
エラーの原因
AWS公式ドキュメントを確認してみました。
Launch configurations - Amazon EC2 Auto Scaling
ドキュメントには以下のような重要な注意書きがあります。
これを見ると、私のアカウントが2024年10月以降に作成されたものだったため、起動設定が完全に使えなくなっていたようです。AWSは段階的に起動設定の使用を制限し、新しい起動テンプレートへの移行を進めているみたいですね。
解決策
エラーを修正するには、Terraformコードで起動設定のかわりに起動テンプレートを使うように変更する必要があります。具体的には以下の修正を行いました
-
aws_launch_configuration
リソースをaws_launch_template
に変更 - Auto Scaling Group の設定を更新し、Launch Templateを参照するように変更
修正後のコードは以下のようになります
# 修正前: Launch Configuration
resource "aws_launch_configuration" "example" {
image_id = "ami-0fb653ca2d3203ac1"
instance_type = "t2.micro"
security_groups = [aws_security_group.instance.id]
user_data = <<-EOF
#!/bin/bash
echo "Hello, world" > index.html
nohup busybox httpd -f -p ${var.server_port} &
EOF
}
# 修正後: Launch Template
resource "aws_launch_template" "example" {
name_prefix = "terraform-example-"
image_id = "ami-0fb653ca2d3203ac1"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
user_data = <<-EOF
#!/bin/bash
echo "Hello, world" > index.html
nohup busybox httpd -f -p ${var.server_port} &
EOF
}
また、Auto Scaling Groupの設定も変更が必要です
# 修正前: Launch Configuration参照
resource "aws_autoscaling_group" "example" {
launch_configuration = aws_launch_configuration.example.name
vpc_zone_identifier = data.aws_subnets.default.ids
# 以下省略
}
# 修正後: Launch Template参照
resource "aws_autoscaling_group" "example" {
vpc_zone_identifier = data.aws_subnets.default.ids
launch_template {
id = aws_launch_template.example.id
version = "$Latest"
}
# 以下省略
}
主な相違点としては以下があります
- Launch Templateでは
security_groups
ではなくvpc_security_group_ids
を使用 - Auto Scaling Groupの設定方法が変わり、
launch_template
ブロックを使用してid
とversion
を指定する
終わりに
AWSの仕様変更に伴い、書籍の内容が古くなってしまうのはよくあることです(例えばコンソールのUIが変わっていて書籍と違うなんてことはざらにあります)。特にクラウドサービスは進化が速く、古い機能が廃止されたり新しい機能が追加されたりします。
この記事が同じ状況で悩んでいる方の助けになれば幸いです。
Discussion