Eu tropecei em um problema geral no Terraform. Por exemplo, tenho um recurso como aws_autoscaling_group
, que tem desired_capacity
, que pode ser ampliado ou reduzido com base nos alarmes do CloudWatch.
No entanto, ao executar terraform apply
o arquivo de estado do Terraform não sabe sobre essas mudanças e tenta definir a capacidade de volta ao valor inicial definido no estado.
Eu pensei em uma solução e descobri isso:
# initialise terraform, ideally against a remote state in S3
terraform init
# remove resource from state
terraform state rm "aws_autoscaling_group.main"
# import resource from remote so it reflects the current capacity
terraform import "aws_autoscaling_group.main" "my-autoscaling-group"
No entanto, ao executar terraform plan
, isso não reflete as alterações importadas:
~ aws_autoscaling_group.main
desired_capacity: "3" => "2"
force_delete: "" => "true"
metrics_granularity: "" => "1Minute"
wait_for_capacity_timeout: "" => "10m"
Plan: 0 to add, 1 to change, 0 to destroy.
Além disso, isso é muito propenso a erros: por exemplo, depois de importar o recurso, o recurso remoto pode mudar (por exemplo, um alarme é acionado diretamente depois de eu ter importado o recurso) para que fique fora de sincronia novamente.
É este o design pretendido e, em caso afirmativo, o que posso fazer em relação a isso?