在ECS EXEC
特性出来之前,如果想docker exec
到容器内部,需要:
docker exec
这种方式对于Fargate不适用,如果想登录到Fargate上的容器就不好办。
ECS Exec
是借助SSM来实现登录到容器内部,本节我们介绍登录到fargate的容器中。
SSM Session Manager plugin
:在本地端要安装SSM Session Manager plugin for the AWS CLI , 参考 https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html#install-plugin-macos
在mac上安装:
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
容器中要运行SSM代理, 代理会调用 SSM 服务来创建安全通道。 因此,ECS 任务需要具有适当的 IAM 权限,SSM 代理才能调用 SSM 服务。
SSM 代理并不作为单独的容器 sidecar 运行,而是作为应用程序容器内的附加进程运行。
为ecsTaskRole
加上SSM的相关权限:
并更新Dogs Task Defination,创建新的 revision:
task Role
配置使用ecsTaskRole
:
同时添加额外一个容器,为了后面测试登录到不同容器上:
创建新的Task Defination版本。
在demo-ecs
集群上重新部署dogs
服务:
使用最新的版本:
ECS会启用更新部署,部署完成后,还要开启enableExectueCommand
:
aws ecs update-service --cluster demo-ecs --service dogs --region us-west-2 --enable-execute-command --force-new-deployment
--enable-execute-command
参数是在task中开启ECS Exec
功能。--force-new-deployment
是强制重新部署,让上面的参数生效更新完成后,复制出来一个task id:
检查task上有没有开启这个参数
aws ecs describe-tasks --cluster demo-ecs --tasks 01428743ca03474f94b90018e3294628 --region us-west-2
确认状态为true:
现在可以执行ecs exec
登录到fargate:
aws ecs execute-command \
--region us-west-2 \
--cluster demo-ecs \
--task 01428743ca03474f94b90018e3294628 \
--container dogs \
--command "/bin/bash" \
--interactive
同样可以登录到jenkins:
aws ecs execute-command \
--region us-west-2 \
--cluster demo-ecs \
--task 01428743ca03474f94b90018e3294628 \
--container jenkins \
--command "/bin/bash" \
--interactive
在使用ECS Exec
时,很容易在一开始遇到各种报错。推荐使用 https://github.com/aws-containers/amazon-ecs-exec-checker
这个工具。下载下来后,执行:
$ export AWS_REGION=us-west-2
$ ./check-ecs-exec.sh <YOUR_ECS_CLUSTER_NAME> <YOUR_ECS_TASK_ID>
如果扫描出来红色的,是一定要修复的:
可以参照github中的修复建议:
参考: