Можно ли получить список обновленных контейнеров ECS в функции Lambda, вызываемой из Code Pipeline?

Я развертываю приложение в ECS с использованием Code Pipeline, и я хотел бы запустить команду на всех новых контейнерах после их развертывания.

Существует шаг 'invoke', который позволяет вам запускать функцию Lambda как часть конвейера. Это может быть использовано для ssh в контейнеры и запуска команды, однако я не могу найти, как получить список контейнеров в лямбда-функции. В идеале это будет передано в качестве аргумента на этапе развертывания.

Единственное возможное решение, с которым я столкнулся, - это подключиться к экземпляру EC2, в котором выполняются задачи, выполнить ssh, запросить контейнеры, а затем войти в них и выполнить команды. Похоже, что это связано с чем-то, что другие люди сделали, поэтому я надеялся, что есть какой-то API или что-то, чего я не смог найти.

1 ответ

1.Вы можете использовать библиотеку boto3, которая может выполнять необходимые действия для сбора метаданных об экземплярах ECS.

  1. Пример кода прилагается для lambda_handler, Вы можете использовать следующие методы ec2describe_instances а также describe_instance_status
  2. boto3 документы

импорт boto3

из ec2 import attribute_instances
из ес импорта import_container_instances

 global ECS_CLIENT
 if not ECS_CLIENT:
    ECS_CLIENT = boto3.client('ecs')


def get_instances():

  response = ECS_CLIENT.describe_container_instances('cluster_name')
  containerInstances = response.get('containerInstances')
  instances = []

  for reservation in containerInstances:
     reservation_status = reservation.get('status')
     instances += reservation_status 

  return instances

Извиняюсь за мисс ECS немного. В тех же документах, которыми я поделился для ECS, есть метод description_container_instances. ECS

Другие вопросы по тегам