早くエンジニアになりたい

masatany's memorandum

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が消せない」エラーが出なくなる。