Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro no loadtest quando executa o 1o. Terraform destroy na definição ECS.tf

Amigos,

Surgiu aqui um problema que se encontra em Infra_CI/infra/ECS.tf. Este código veio do marketplace e é o mais atual. Veio por instrução do Leonardo Sartorello, instrutor do curso. O erro é o seguinte (listagem do github actions):

Run terraform -chdir=Infra_CI/env/Homolog destroy -auto-approve
terraform -chdir=Infra_CI/env/Homolog destroy -auto-approve
shell: /usr/bin/bash -e {0}
env:
AWS_DEFAULT_REGION: us-east-2
AWS_REGION: us-east-2
AWS_ACCESS_KEY_ID: ***
AWS_SECRET_ACCESS_KEY: ***
TERRAFORM_CLI_PATH: /home/runner/work/_temp/80733bd6-8f3c-469e-bd27-fdf24087129d
/home/runner/work/_temp/80733bd6-8f3c-469e-bd27-fdf24087129d/terraform-bin -chdir=Infra_CI/env/Homolog destroy -auto-approve

│ Error: Unsupported argument

│ on ../../infra/ECS.tf line 5, in module "ecs":
│ 5: fargate_capacity_providers = {

│ An argument named "fargate_capacity_providers" is not expected here.

Error: Terraform exited with code 1.
Error: Process completed with exit code 1.

O código em execução é o seguinte ( de: Infra_CI/infra/ECS.tf):

module "ecs" {
source = "terraform-aws-modules/ecs/aws"

cluster_name = var.ambiante
fargate_capacity_providers = {
FARGATE = {
default_capacity_provider_strategy = {
weight = 100
}
}
}
}

Decorre que necessito fechar esta formação CI/CD e que ainda não vi Terraform! O Terraform aqui é só um apêndice. No estado atual que estou ainda não consigo saber se este código é da AWS ou do Terraform. Não consigo sequer, ainda, definir bem o problema para poder buscar uma solução! Estou no escuro!

Alguém poderia me ajudar? Este curso já está um pouco desatualizado,. O código é de novembro de 2022: https://github.com/jnadyr/Infra_CI.git

Meu repositório no github: https://github.com/jnadyr/Curso_CI_5.git

Muito obrigado, José Nadyr

2 respostas
solução!

Esse erro não é da AWS em si, é do Terraform em conjunto com a versão do módulo ECS que você está usando.

O que está acontecendo é o seguinte:
o argumento fargate_capacity_providers não existe nessa versão do módulo terraform-aws-modules/ecs/aws que o seu projeto está puxando. Esse bloco só passou a ser aceito em versões mais novas do módulo. Como o curso e o repositório são de 2022, existe um descompasso entre o código e a versão do módulo instalada hoje (ou o inverso).

Por isso o Terraform falha logo no primeiro destroy: ele valida o código e encontra um parâmetro que o módulo não reconhece.

Para resolver de forma simples e conseguir finalizar o curso, você tem duas opções práticas:

  1. Remover o bloco fargate_capacity_providers do ECS.tf
    Isso é o mais rápido. Para os objetivos do curso (rollback e load test), esse detalhe de infraestrutura não é essencial.

  2. Fixar a versão correta do módulo ECS
    No bloco do módulo, definir explicitamente a versão compatível com esse parâmetro. Sem isso, o Terraform usa uma versão que não suporta esse argumento.

Resumo:
Você não está “errado” nem precisa dominar Terraform agora. O problema é apenas incompatibilidade de versão do módulo, causada pela defasagem do curso. Removendo o bloco ou ajustando a versão, o pipeline volta a rodar e você consegue concluir a formação.

Estudante,

Removido o bloco do fargate_capacity_providers do ECS.tf. Desta vez a rotina rodou corretamente! Sua resposta clareou bastante a minha dúvida que era aberta. Eu não sabia onde se encontrava o problema. Agora entendi quais eram as partes e onde se localizava!

Muitíssimo obrigado!