Можно ли получить список обновленных контейнеров ECS в функции Lambda, вызываемой из Code Pipeline?
Я развертываю приложение в ECS с использованием Code Pipeline, и я хотел бы запустить команду на всех новых контейнерах после их развертывания.
Существует шаг 'invoke', который позволяет вам запускать функцию Lambda как часть конвейера. Это может быть использовано для ssh в контейнеры и запуска команды, однако я не могу найти, как получить список контейнеров в лямбда-функции. В идеале это будет передано в качестве аргумента на этапе развертывания.
Единственное возможное решение, с которым я столкнулся, - это подключиться к экземпляру EC2, в котором выполняются задачи, выполнить ssh, запросить контейнеры, а затем войти в них и выполнить команды. Похоже, что это связано с чем-то, что другие люди сделали, поэтому я надеялся, что есть какой-то API или что-то, чего я не смог найти.
1 ответ
1.Вы можете использовать библиотеку boto3, которая может выполнять необходимые действия для сбора метаданных об экземплярах ECS.
- Пример кода прилагается для
lambda_handler
, Вы можете использовать следующие методыec2
describe_instances
а такжеdescribe_instance_status
- 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