要在AWS Fargate上启动shell,可以使用AWS Systems Manager Session Manager。以下是一个解决方法,包含了使用Session Manager启动shell的代码示例。
确保已安装AWS CLI,并使用正确的访问密钥和区域配置。
使用以下命令创建一个IAM角色,以便在Fargate任务上使用Session Manager。
aws iam create-role \
--role-name ecs-fargate-session-role \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}'
aws iam put-role-policy \
--role-name ecs-fargate-session-role \
--policy-name ecs-fargate-session-role-policy \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:UpdateInstanceInformation",
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel",
"ssm:UpdateInstanceInformation",
"ssm:GetConnectionStatus",
"ssm:DescribeInstanceProperties",
"ssm:GetManifest",
"ssm:GetDocument",
"ssm:ListInstanceAssociations",
"ssm:ListAssociations",
"ssm:UpdateAssociationStatus",
"ssm:UpdateInstanceAssociationStatus",
"ssm:DescribeAssociation",
"ssm:DescribeInstanceAssociationStatus",
"ssm:GetDeployablePatchSnapshotForInstance",
"ssm:DescribeDocument",
"ssm:ListCommandInvocations",
"ssm:ListCommands",
"ssm:GetCommandInvocation",
"ssm:GetCommandOutput",
"ssm:CancelCommand",
"ssm:ListDocumentVersions",
"ssm:CreateAssociation",
"ssm:CreateAssociationBatch",
"ssm:DeleteAssociation",
"ssm:UpdateAssociationStatus",
"ssm:UpdateInstanceAssociationStatus",
"ssm:LabelParameterVersion",
"ssm:GetParameterHistory",
"ssm:GetParametersByPath",
"ssm:GetParameters",
"ssm:GetParameter",
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:DescribeParameters",
"ssm:GetDeployablePatchSnapshotForInstance",
"ec2messages:AcknowledgeMessage",
"ec2messages:DeleteMessage",
"ec2messages:FailMessage",
"ec2messages:GetEndpoint",
"ec2messages:GetMessages",
"ec2messages:SendReply",
"ssm:UpdateInstanceInformation"
],
"Resource": "*"
}
]
}'
{
"family": "my-task-family",
"networkMode": "awsvpc",
"executionRoleArn": "ecs-fargate-session-role-ARN",
"containerDefinitions": [
{
"name": "my-container",
"image": "my-container-image",
"command": [
"sh",
"-c",
"sleep 1000"
],
"essential": true
}
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512"
}
确保将"ecs-fargate-session-role-ARN"替换为先前创建的IAM角色的ARN,并在"my-container-image"中指定您自己的容器镜像。