如何从 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-cli compose 注册任务定义?
如何在 AWS ECS 集群的服务中运行 AWS ECS 任务,而不是将服务从 Circle CI 的“aws-ecs/run-task”中排除