首页 > 解决方案 > 是否可以在从代码管道调用的 Lambda 函数中获取更新的 ECS 容器列表?

问题描述

我正在使用代码管道将应用程序部署到 ECS,并且我想在部署所有新容器后对其运行命令。

有一个“调用”步骤,可让您将 Lambda 函数作为管道的一部分运行。这可用于 ssh 进入容器并运行命令,但是我找不到如何在 lambda 函数中获取容器列表。理想情况下,它将作为部署步骤的参数传递。

我遇到的唯一可能的解决方案是通过 ssh 进入运行任务的 EC2 实例,查询容器,然后登录它们并运行命令。这似乎与我确信其他人已经做过的事情有关,所以我希望有一些 API 或我无法找到的东西。

标签: aws-lambdaamazon-ecsaws-codepipeline

解决方案


1.您可以使用 boto3 库来收集有关 ECS 实例的元数据。

  1. 附加的代码示例lambda_handler。您可以使用以下方法ec2 describe_instancesdescribe_instance_status
  2. boto3 文档

导入 boto3

从 ec2 导入 describe_instances
从 ecs 导入 describe_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 共享的相同文档中有一个方法 describe_container_instances。ECS


推荐阅读