由于Fargate是aws ecs的托管容器,我们无法直接通过ssh 或者RDP登入排查问题.
但是aws也给我们提供了方法,通过aws ssm服务我们可以登入到Fargate的容器里面.
参考文献:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html
此教程只展示关键步骤,需要读者事先对AWS ECS有所了解. 请自行安装最新版本的 aws cli
第一步:为任务IAM角色添加SSM权限
您应该将以下策略添加到现有 ECS 任务 IAM 角色。这将授予 ECS 任务与 SSM 会话管理器服务连接的权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
第二步:修改任务定义
注意 只有windows的容器才需要添加如下片段,linux可以跳过这一步. (参考文献中有关于initProcessEnabled 的修改 请自行决定)
"containerDefinitions": [
{
"entryPoint": [
"powershell",
"-Command"
],
"command": [
"ping -t localhost"
]
......
......
第三步:为您的service或者task启用 ECS Exec (1和2根据需求选择一种即可)
--enable-execute-command
您可以通过在使用以下 AWS CLI 命令之一时指定标志来为您的服务和独立任务打开 ECS Exec 功能: create-service、update-service、start-task或run-task。
- 如果运行以下命令,将为新创建的service开启 ECS Exec 功能。有关创建服务的更多信息,请参阅create-service。
aws ecs create-service \
--cluster cluster-name \
--task-definition task-definition-name \
--enable-execute-command \
--service-name service-name \
--desired-count 1
- 如果运行以下命令,直接创建一个开启了ECS Exec功能的task(测试首选)
aws ecs run-task \
--cluster <CLUSTER_NAME> \
--task-definition <TASK_DEFINATION> \
--network-configuration awsvpcConfiguration="{subnets=[<PUBLIC_SUBNET_ID>],securityGroups=[<SECURITY_GROUP_ID>],assignPublicIp=ENABLED}" \
--enable-execute-command \
--launch-type FARGATE \
--region <AWS_REGION>
第四步:验证
为任务打开 ECS Exec 后,您可以运行以下命令来确认该任务已准备好使用。如果lastStatus的属性ExecuteCommandAgent列为RUNNING且该enableExecuteCommand属性设置为true,则您的任务已准备就绪。
aws ecs describe-tasks \
--cluster cluster-name \
--tasks task-id
第五步: 安装 AWS CLI 的会话管理器插件 以及登入ECS Fargate
1.安装 AWS CLI 的会话管理器插件:
会话管理器插件是 AWS CLI 的附加组件,允许您连接到 EC2 实例或 AWS Fargate。
要在 Windows 上安装会话管理器插件,请下载并安装此可执行文件:
https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe
要在 macOS 和 Linux 上安装会话管理器插件,请使用 homebrew:
brew install --cask session-manager-plugin
2.登入:
linux:
aws ecs execute-command --cluster cluster-name --task task-id --container container-name --interactive --command "/bin/sh"
windows:
aws ecs execute-command --cluster cluster-name --task task-id --container container-name --interactive --command "powershell"