Как обновить экземпляры кластера AWS ECS с помощью Terraform? - PullRequest
1 голос
/ 04 июня 2019

У меня есть существующий кластер ECS (EC2), созданный с помощью Terraform. Я хочу установить программное обеспечение на эти экземпляры EC2, используя Terraform. Одно из наших бизнес-требований заключается в том, что мы не сможем уничтожить и воссоздать экземпляры, и нам придется делать это на существующих экземплярах.

Как мне подойти к этому?

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Похоже, ваша организация экспериментирует с запуском своих сервисов в докере и ECS. Я также предполагаю, что вы используете AWS ECR для размещения ваших образов докера (хотя технически это не имеет значения).

Когда вы создаете кластер ECS, он изначально пуст. Если вам нужно будет повторно запустить шаблон terraform еще раз, он должен показать вам, что обновлений нет. Чтобы сделать следующий шаг, вам нужно определить ecs-service и ecs-task-definition . Это можно сделать либо в существующем шаблоне terraform, либо в новом шаблоне, либо вы можете сделать это вручную (веб-консоль aws или awscli). Поскольку вы уже используете terraform, я предполагаю, что вы продолжите использовать его. Лично я бы сохранил все в 1 шаблоне, но опять же, это зависит от вас.

ecs-сервис - это, по сути, конфигурация времени выполнения для ваших ecs-задач. Определение ecs-task - это набор Docker-контейнеров для запуска. В простейшем случае это 1 контейнер с одним докером. Здесь вы будете указывать образ (ы) докера, который будете использовать, сколько ЦП + ОЗУ для контейнера докера и т. Д ...

Для того чтобы ваши текущие службы ecs обновлялись без остановки узлов EC2, вам просто нужно обновить образ докера в части определения задачи ecs вашего шаблона terraform (конечно же, terraform run run) ,

со всей этой фоновой информацией теперь вы можете добавить Terraform ecs-service Terraform ecs-task-definition в свой шаблон terraform.

Поскольку вы не предоставили свой шаблон, я не могу точно сказать, как это должно быть настроено, но пример шаблона terraform полного кластера ECS с nginx можно найти ниже Завершить пример Terraform ECS больше примеров можно найти на Официальные примеры использования Terraform ECS github

0 голосов
/ 04 июня 2019

Вы можете запустить provisioner, присоединенный к всегда запускаемому null_resource, чтобы всегда запускать какой-то процесс, но я настоятельно рекомендую переосмыслить ваши процессы.

Ваш кластер ECS должен считаться полностью эфемерным, как с контейнерами, работающими на них. Если вы хотите обновить экземпляры ECS, то уничтожение и замена экземпляров (в идеале в группе автоматического масштабирования) - это то, что вы хотите сделать, поскольку это значительно упрощает работу. Вы можете прочитать больше о преимуществах неизменной инфраструктуры в других местах .

Если вы абсолютно не можете сделать это, то вам, скорее всего, лучше всего использовать другой инструмент, такой как Ansible, полностью. Вы можете запустить его через Terraform с помощью поставщика null_resource, как указано выше, который будет выглядеть примерно так:

resource "null_resource" "on_demand_provisioning" {
  triggers {
    always = "${uuid()}"
  }

  provisioner "local-exec" {
    command = "ansible-playbook -i inventory.yml playbook.yml --ssh-common-args='-o StrictHostKeyChecking=no'"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...