【发布时间】:2021-05-12 08:32:59
【问题描述】:
问题: 如何从 ECS 任务中安装 aws cli?
说明: 我正在使用 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”)不工作。
非常感谢 :-)
【问题讨论】:
标签: amazon-web-services logstash amazon-ecs