2
respostas

[Bug] Erro no "aws_autoscaling_policy"

Quando executo o terraform apply no ambiente de produção tenho este erro:

│ Error: Error putting scaling policy: ValidationError: Group Prod not found
│       status code: 400, request id: ad1f5144-60da-45d2-93f1-c1e18eba5d6b
│ 
│   with module.aws-prod.aws_autoscaling_policy.escala-Producao[0],
│   on ../../infra/main.tf line 87, in resource "aws_autoscaling_policy" "escala-Producao":
│   87: resource "aws_autoscaling_policy" "escala-Producao" {
│ 

O trecho que é dito que apresenta problemas é este no main.tf da infra:

resource "aws_autoscaling_policy" "escala-Producao" {
  name = "terraform-escala"
  autoscaling_group_name = var.nomeGrupo
  policy_type = "TargetTrackingScaling"
  target_tracking_configuration {
    predefined_metric_specification {
      predefined_metric_type = "ASGAverageCPUUtilization"
    }
    target_value = 50.0
  }
  count = var.producao ? 1 : 0
}

Arquivo Variables.tf:

...
variable "nomeGrupo" {
  type = string
}
...

O arquivo main.tf da produção:

module "aws-prod" {
  source = "../../infra"
  instancia = "t2.micro"
  regiao_aws = "us-west-2"
  chave = "IaC-Prod"
  grupoDeSeguranca = "Producao"
  minimo = 1
  maximo = 10
  nomeGrupo = "Prod"
  producao = true
}

Este é o projeto final, será que mudou algo na sintaxe ?

2 respostas

Olá, Cairo

Pelo que você descreveu, o erro está acontecendo porque o grupo de auto scaling "Prod" que você está tentando referenciar na política de auto scaling não existe no momento em que o Terraform tenta criar a política.

Isso pode acontecer se o grupo de auto scaling for criado depois da política no fluxo de execução do Terraform. O Terraform executa as ações em uma ordem específica baseada nas dependências entre os recursos. Se o grupo de auto scaling não for uma dependência explícita da política de auto scaling, o Terraform pode tentar criar a política antes do grupo, levando ao erro que você está vendo.

Uma maneira de resolver isso seria garantir que o grupo de auto scaling seja criado antes da política de auto scaling. Você pode fazer isso adicionando uma dependência explícita no recurso da política de auto scaling. Aqui está um exemplo de como você pode fazer isso:

resource "aws_autoscaling_policy" "escala-Producao" {
  name = "terraform-escala"
  autoscaling_group_name = var.nomeGrupo
  policy_type = "TargetTrackingScaling"
  target_tracking_configuration {
    predefined_metric_specification {
      predefined_metric_type = "ASGAverageCPUUtilization"
    }
    target_value = 50.0
  }
  count = var.producao ? 1 : 0

  depends_on = [
    aws_autoscaling_group.seuGrupoAutoScaling
  ]
}

No exemplo acima, substitua aws_autoscaling_group.seuGrupoAutoScaling pelo nome do recurso do grupo de auto scaling que você está criando no seu código Terraform.

Espero ter ajudado e bons estudos!