TerraformでAutoScalingGroupを作るときのメモ
起動設定周りで少しハマった。
公式サイトにサンプルコードがあって、見れば一目瞭然なんだけど、
日本語の情報がヒットしないので自分用にメモしておく。
コード
# 起動設定 resource aws_launch_configuration lc { name_prefix = "${var.common["app_name"]}-lc-${terraform.workspace}-" image_id = "${var.launch_configuration["ami-id"]}" instance_type = "${var.launch_configuration["${terraform.workspace}.instance_type"]}" security_groups = ["${var.security_group["ec2_web_id"]}"] key_name = "${var.launch_configuration["key_name"]}-${terraform.workspace}" user_data = "${file("${path.module}/userdata.sh")}" lifecycle { create_before_destroy = true } depends_on = [ "aws_launch_configuration.lc", ] } # グループ resource aws_autoscaling_group asg { name = "${var.common["app_name"]}-asg-${terraform.workspace}" availability_zones = [ "${var.autoscaling_group["availability_zone1"]}", "${var.autoscaling_group["availability_zone2"]}", ] vpc_zone_identifier = [ "${var.public_subnet_ids[0]}", "${var.public_subnet_ids[1]}", ] launch_configuration = "${aws_launch_configuration.lc.name}" min_size = "${var.autoscaling_group["${terraform.workspace}.min_size"]}" max_size = "${var.autoscaling_group["${terraform.workspace}.max_size"]}" target_group_arns = ["${var.lb_target_group}"] lifecycle { create_before_destroy = true } depends_on = [ "aws_launch_configuration.lc", ] }
大事なところは
name_prefix = "${var.common["app_name"]}-lc-${terraform.workspace}-"
と
lifecycle { create_before_destroy = true }
name_prefix
を指定すると、prefixの後ろに自動で日付を基にした文字列をつけてくれるので、
「launch config の名前が重複している」エラーが出なくなる。
create_before_destroy
で、先に更新したlaunch configを作成してAutoScalingGroupにアタッチしてくれるので、
「launch configが消せない」エラーが出なくなる。