ECS Exec

背景

ECS EXEC特性出来之前,如果想docker exec到容器内部,需要:

  1. 先找到task所在的机器,然后放到ssh登录
  2. 登录到EC2,然后执行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

配置policy

容器中要运行SSM代理, 代理会调用 SSM 服务来创建安全通道。 因此,ECS 任务需要具有适当的 IAM 权限,SSM 代理才能调用 SSM 服务。

SSM 代理并不作为单独的容器 sidecar 运行,而是作为应用程序容器内的附加进程运行。

ecsTaskRole加上SSM的相关权限:

image-20231101232317889

并更新Dogs Task Defination,创建新的 revision:

image-20231101233602860

task Role配置使用ecsTaskRole:

image-20231101233336952

同时添加额外一个容器,为了后面测试登录到不同容器上:

image-20231101233412993

创建新的Task Defination版本。

创建Service

demo-ecs集群上重新部署dogs服务:

image-20231101233527846

使用最新的版本:

image-20231101233508658

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:

image-20231101234642513

检查task上有没有开启这个参数

aws ecs describe-tasks --cluster demo-ecs --tasks 01428743ca03474f94b90018e3294628 --region us-west-2

确认状态为true:

image-20231101234600867

测试ECS Exec

现在可以执行ecs exec登录到fargate:

aws ecs execute-command  \
    --region us-west-2 \
    --cluster demo-ecs \
    --task  01428743ca03474f94b90018e3294628 \
    --container dogs \
    --command "/bin/bash" \
    --interactive

image-20231101234808915

同样可以登录到jenkins:

aws ecs execute-command  \
    --region us-west-2 \
    --cluster demo-ecs \
    --task  01428743ca03474f94b90018e3294628 \
    --container jenkins \
    --command "/bin/bash" \
    --interactive

image-20231101234911335

ECS Exec的排错

在使用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>

如果扫描出来红色的,是一定要修复的:

image-20231101235601028

可以参照github中的修复建议:

image-20231101235640199


参考:

https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/