Можно ли получить список обновленных контейнеров ECS в функции Lambda, вызываемой из Code Pipeline? - PullRequest
0 голосов
/ 04 сентября 2018

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

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

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

1 Ответ

0 голосов
/ 04 сентября 2018

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

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

импорт boto3

из ec2 import description_instances
из ecs import attribute_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

...