Skip to content

Update the ECS Terraform module from major version 4 to 5

Deprecated

This update is deprecated.

Version 5 of the module changed some resource addresses. Use terraform state mv to move these addresses.

If you try to update to version 5 without moving the resources, Terraform attempts to re-create the resources managed by the module.

Before you begin

You should familiarize yourself with the Terraform command for moving resources addresses (terraform state mv).

Affected versions

Version 4 of the Terraform community module terraform-aws-modules/ecs/aws.

You're not affected if you're using a private Terraform module sourced from oslokommune/golden-path-iac.

How to check what version is being used?

Go to the Terraform file defining your ECS cluster. See the source and version attributes. Example:

module "ecs" {
    source  = "terraform-aws-modules/ecs/aws"
    version = "4.1.3"
    # ...
}

The template was updated in #752.

Step 1: Move resources

Move the cluster to its new address:

terraform state mv \
  'module.ecs.aws_ecs_cluster.this[0]' \
  'module.ecs.module.cluster.aws_ecs_cluster.this[0]'

Move the capacity provider:

terraform state mv \
'module.ecs.aws_ecs_cluster_capacity_providers.this[0]' \
'module.ecs.module.cluster.aws_ecs_cluster_capacity_providers.this[0]'

Step 2: Update your Terraform code

Edit the Terraform file for your ECS cluster:

  • Bump the module version to 5
  version = "5.0.1"
  • Set create_cloudwatch_log_group to false
  • Add a cluster_configuration block

See an example of the end result link to Git diff, or this Git diff:

---
 stacks/prod/app-common/ecs_cluster.tf | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/stacks/prod/app-common/ecs_cluster.tf b/stacks/prod/app-common/ecs_cluster.tf
index 3da83b9..baf3a3f 100644
--- a/stacks/prod/app-common/ecs_cluster.tf
+++ b/stacks/prod/app-common/ecs_cluster.tf
@@ -1,10 +1,18 @@
 module "ecs" {
   # https://github.com/terraform-aws-modules/terraform-aws-ecs
   source  = "terraform-aws-modules/ecs/aws"
-  version = "4.1.3"
+  version = "5.0.1"

   cluster_name = local.environment

+  create_cloudwatch_log_group = false
+
+  cluster_configuration = {
+    execute_command_configuration = {
+      logging = "DEFAULT"
+    }
+  }
+
   fargate_capacity_providers = {
     FARGATE = {
       default_capacity_provider_strategy = {

Step 3: Apply the changes

Run terraform init -upgrade.

Run terraform plan.

If everything went well, there should be no changes:

No changes. Your infrastructure matches the configuration.