如何从 ECS 任务中安装 aws cli?

Posted

技术标签:

【中文标题】如何从 ECS 任务中安装 aws cli?【英文标题】:How can I install aws cli, from WITHIN the ECS task? 【发布时间】:2021-05-12 08:32:59 【问题描述】:

问题:

说明: 我正在使用 docker 容器来运行 logstash 应用程序(它是弹性系列的一部分)。

docker 镜像名称是“docker.elastic.co/logstash/logstash:7.10.2” 此 logstash 应用程序需要写入 S3,因此需要安装 AWS CLI。 如果未安装 aws,则会崩溃。

# 第 1 步 # 为了避免崩溃,当我将此应用程序仅用作 docker 时,我以一种在 docker 容器启动后导致“logstash start”延迟的方式运行它。 我通过在启动 logstash 之前将“sleep”命令添加到外部 docker-entrypoint 文件来做到这一点。

这是它在 docker-entrypoint 文件中的样子: 睡眠 120

if [[ -z $1 ]] || [[ $1:0:1 == '-' ]] ; then
  exec logstash "$@"
else
  exec "$@"
fi
 # EOF

# 第 2 步 # 使用“--entrypoint”标志运行 docker,这样它将使用我的入口点文件

docker run \
           -d \
           --name my_logstash \
           -v /home/centos/DevOps/psifas_logstash_docker-entrypoint:/usr/local/bin/psifas_logstash_docker-entrypoint  \
           -v /home/centos/DevOps/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
           -v /home/centos/DevOps/logstash.yml:/usr/share/logstash/config/logstash.yml \
           --entrypoint /usr/local/bin/psifas_logstash_docker-entrypoint  \
           docker.elastic.co/logstash/logstash:7.10.2

#步骤 3 # 从托管 docker 的服务器安装 aws cli 并配置 aws cli:

docker exec -it -u root <DOCKER_CONTAINER_ID> yum install awscli -y
docker exec -it <DOCKER_CONTAINER_ID> aws configure set aws_access_key_id <MY_aws_access_key_id>
docker exec -it <DOCKER_CONTAINER_ID> aws configure set aws_secret_access_key <MY_aws_secret_access_key>
docker exec -it <DOCKER_CONTAINER_ID> aws configure set region <MY_region>

这对我有用, 现在我想将此流程“翻译”为 AWS ECS 任务。 在 ECS 中,我将使用参数而不是运行上述 3 个“aws configure”命令。

我的问题 如何从 ECS 任务中执行我的第三步,安装 aws cli? (意思是不在托管ECS集群的EC2服务器上运行)

当我在 docker 上工作时,我也想到了使用 aws cli 的这些选项:

    找到一个包含logstash和aws cli的官方弹性docker镜像。 自己创建这样的图像并使用。

最终我选择了上面的 3 个步骤,但我愿意接受建议。

另外,我的测试表明在同一个 ECS 任务中运行 2 个容器:

    logstah awscli 然后 logstash 容器将使用 aws cli 容器 (图片“amazon/aws-cli”)不工作。

非常感谢 :-)

【问题讨论】:

【参考方案1】:

您的选项#2,自己创建图像,确实是最好的方法。其他任何事情都将成为“黑客”。此外,您不应为在 ECS 中运行的映像运行 aws configure,您应该为任务分配 IAM 角色,AWS CLI 会选择并使用它。

【讨论】:

嗨,马克,谢谢你的回答 :-)【参考方案2】:

Mark B,您的回答帮助我解决了这个问题。谢谢!

在这里写下解决方案,以防对其他人有所帮助。

无需安装 AWS CLI,在 ECS 任务内运行的 logstash docker 容器中。

在 logstash 容器内(来自图像“docker.elastic.co/logstash/logstash:7.10.2”)有 AWS SDK 可以连接到 S3。

唯一需要的是允许 ECS 任务执行角色访问 S3。 (我附上了 AmazonS3FullAccess 政策)

【讨论】:

以上是关于如何从 ECS 任务中安装 aws cli?的主要内容,如果未能解决你的问题,请参考以下文章

ECS 任务。如何在容器中使用 AWS CLI

是否可以使用 ecs-cli compose 注册任务定义?

如何从 AWS Lambda 函数运行 ECS 任务?

如何在 AWS ECS 集群的服务中运行 AWS ECS 任务,而不是将服务从 Circle CI 的“aws-ecs/run-task”中排除

尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误

如何在 AWS ECS 中扩展任务/容器