terraform применяет переменную pass для развертывания определенных ECS

#amazon-web-services #terraform #amazon-ecs

Вопрос:

У меня есть несколько ECS. Можно ли передать переменную в определение ecs-контейнера.json для развертывания в определенном ECS?

например, применение terraform-var ‘развертывание=aws-ecs-серверная часть’

Комментарии:

1. Что ты имеешь в виду? У вас есть какой-нибудь код, чтобы продемонстрировать, что вы хотите сделать?

Ответ №1:

Во-первых, здесь есть несколько пересекающихся концепций. Вы не указываете, какую версию Terraform вы используете, поэтому я предполагаю, что она относительно недавняя.

Ресурс Terraform, на который вы, вероятно, ссылаетесь, является определением ecs_task_definition. Этот ресурс имеет следующий формат (из документов):

 resource "aws_ecs_task_definition" "service" {   
    family = "service"
    container_definitions = jsonencode([

     //ommitted for brevity

    ])

}
 

Похоже, что вместо этого вы используете функции файла или файла шаблона для встраивания содержимого файла с именем ecs-container-definition.json в свой ресурс. С точки зрения Terraform, вы не применяете изменения к этому файлу, вы применяете изменения к ресурсу, ссылающемуся на него (определение aws_ecs_task_definition).

Процесс, который вы пытаетесь выполнить, — это таргетинг ресурсов, и он вызывается (например) путем указания целевого ресурса в terraform apply команде. Вот пример, если ваш ресурс ecs_task_definition называется myservice, у вас будет следующее:

 resource "aws_ecs_task_definition" "myservice" {   
    family = "service"
    container_definitions = file('./templates/aws_ecs_task_definition')
    .....
}
 

Затем вы примените изменения к этому ресурсу, используя приведенную ниже команду (запуск из того же каталога, что и файл .tf, содержащий:

terraform plan -target="aws_ecs_task_definition.myservice" (чтобы увидеть запланированные изменения)

terraform apply -target="aws_ecs_task_definition.myservice" (чтобы применить изменения)

Имейте в виду, что это своего рода анти-шаблон терраформирования, как указано в документации во вступительном абзаце:

Иногда вам может потребоваться применить только часть плана, например, в ситуациях, когда состояние Terraform не синхронизировано с вашими ресурсами из-за сбоя сети, проблемы с вышестоящей облачной платформой или ошибки в Terraform или ее поставщиках.

Как правило, лучше всего использовать «чистое применение» Terraform, чтобы все состояние было синхронизировано с содержимым вашего репозитория.