#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, чтобы все состояние было синхронизировано с содержимым вашего репозитория.