TerraformECSAdventCalendar2022terraform-provider-aws

terraform-provider-aws v3.74.0 以降で "aws_ecs_cluster" の "capacity_providers", "default_capacity_provider_strategy" を定義する場合は "aws_ecs_cluster_capacity_providers" を利用しましょう

はじめに

Terraform AWS provider (terraform-provider-aws) の更新を日々行えていますでしょうか Terraform AWS provider v4.0.0 時点で deprecated の定義が追加された "aws_ecs_cluster" の "capacity_providers" 等の定義を置き換えるために必要な情報をまとめました

Terraform AWS provider について

本記事では、 Terraform AWS provider の説明は省略します README や Docs を参照してください

Resource aws_ecs_cluster_capacity_providers について

Resource aws_ecs_cluster_capacity_providers は v3.74.0 で追加されました。

その後、 aws_ecs_clustercapacity_providersdefault_capacity_provider_strategy を使用すると、意図しない依存関係が作られてしまい、リソースの削除などが実施出来ない等が明らかになり、 resource aws_ecs_cluster_capacity_providers を使用するよう v4.0.0 で warning を出力する定義が追加されました

そのため、 v4.0.0 に更新した後、 terraform apply 等を実行すると以下のような warning が出力されるようになりました

╷
│ Warning: Argument is deprecated
│
│   with aws_ecs_cluster.resource_name,
│   on aws_ecs_cluster.tf line 1, in resource "aws_ecs_cluster" "resource_name":
│    1: resource "aws_ecs_cluster" "resource_name" {
│
│ Use the aws_ecs_cluster_capacity_providers resource instead
│

解決方法について

CHANGELOG.md にも記載されている通り、 aws_ecs_cluster_capacity_providers を使うように修正する必要があります

resource/aws_ecs_cluster: The capacity_providers and default_capacity_provider_strategy arguments have been deprecated. Use the aws_ecs_cluster_capacity_providers resource instead. (#22783)

v3.74.0 以前では、 以下のように定義していました

resource "aws_ecs_cluster" "example" {
  name               = "example"
  capacity_providers = [aws_ecs_capacity_provider.example.name]

  default_capacity_provider_strategy {
    base              = 1
    weight            = 100
    capacity_provider = aws_ecs_capacity_provider.example.name
  }
}

resource "aws_ecs_capacity_provider" "example" {
  name = "example"

  auto_scaling_group_provider {
    auto_scaling_group_arn = aws_autoscaling_group.example.arn
  }
}

# aws_autoscaling_group の定義は省略...

しかし、非推奨となった今は、 aws_ecs_cluster_capacity_providers を利用し以下のように定義する必要があります

resource "aws_ecs_cluster" "example" {
  name = "example"
}

resource "aws_ecs_cluster_capacity_providers" "example" {
  cluster_name       = aws_ecs_cluster.example.name
  capacity_providers = [aws_ecs_capacity_provider.example.name]

  default_capacity_provider_strategy {
    base              = 1
    weight            = 100
    capacity_provider = aws_ecs_capacity_provider.example.name
  }
}

resource "aws_ecs_capacity_provider" "example" {
  name = "example"

  auto_scaling_group_provider {
    auto_scaling_group_arn = aws_autoscaling_group.example.arn
  }
}

# aws_autoscaling_group の定義は省略...

Reference