我正在尝试让 AWS ECS hello world 正常工作,但我对任务定义角色如何映射到 EC2 实例上的实际角色感到困惑。
创建任务定义时,有“任务角色”,我将其保留为“无”,以及“任务执行角色”,我让其自动创建并填写为“ecsTaskExecutionRole”。但是,当我进行部署时,EC2 实例会列出 IAM 角色“ecsInstanceRole”,该角色也是与“ecsTaskExecutionRole”一起自动创建的。
据我了解:
“任务角色”是容器内部承担的角色,允许它们例如访问 S3,因此可以将其保留为 None,因为我不需要访问任何其他 AWS 资源。
“任务执行角色”由容器代理承担,因此我希望它显示为 EC2 实例的角色,但我看到 EC2 实例分配了“ecsInstanceRole”和“ecsTaskExecutionRole”似乎没有任何活动。
这是预期的行为吗?
这是 EC2 实例所承担的角色,允许其向 ECS 集群注册自身。如果您要部署到 Fargate 而不是 EC2,则不会使用此角色。
这是 AWS ECS 服务本身承担的角色,以便访问部署 ECS 任务所需的内容。这用于访问 ECR 来提取容器映像、将任务日志推送到 CloudWatch 以及从 SecretsManager 或 SSM 参数存储中提取机密(如果您在任务定义中配置了这些信息)。
这是为 ECS 任务容器中运行的需要调用 AWS 服务的任何代码提供的角色。此角色是可选的,仅当您的容器内有使用 AWS CLI 工具或 AWS 开发工具包调用 AWS API 的代码时才需要。
“任务执行角色”由容器代理承担,因此我希望它显示为 EC2 实例的角色,但我看到 EC2 实例分配了“ecsInstanceRole”并且出现“ecsTaskExecutionRole”没有任何活动。
如果您要部署到 EC2,那么这两个角色会有一些重叠。实例角色是 EC2 实例上运行的 ECS 代理所承担的角色。该文档指出,任务执行角色仍在 EC2 部署中使用,目的是从 Secrets Manager 和 SSM 参数存储中提取秘密值,以及访问私有映像注册表。