如何在 boto3 中设置 executionRoleArn 的值?
Posted
技术标签:
【中文标题】如何在 boto3 中设置 executionRoleArn 的值?【英文标题】:How to set value for executionRoleArn in boto3? 【发布时间】:2020-09-25 20:01:46 【问题描述】:我是 AWS 的新手,我不知道如何使用 Python boto3 使用来自 ECR 的图像在 Fargate 中成功运行任务。这是我的工作:
创建客户端
ecs_cli = boto3.client(
'ecs',
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
region_name=region
)
注册一个任务定义
response = ecs_cli.register_task_definition(
family='what_is_family_06_06', #i dont get what's a family
networkMode='awsvpc',
containerDefinitions=[
"name": "rand_name_06_06",
"image": image_name,
],
cpu = "256",
memory = "512",
requiresCompatibilities=['FARGATE']
)
并运行任务
response = ecs_cli.run_task(
cluster='default',
launchType='FARGATE',
networkConfiguration=
'awsvpcConfiguration':
'subnets': [
'subnet-03fc922da97e2d95e',
'subnet-08a73abb757cf2fab'
],
'securityGroups': [
'sg-04a3379a63a69cb74',
],
,
taskDefinition='arn:aws:ecs:us-east-1:420295140958:task-definition/what_is_family_06_06:1',
)
我收到此错误:
"Fargate requires task definition to have execution role ARN to support ECR images."
这意味着我必须将executionRoleArn='something'
添加到 register_task_definition()
但是,例如,this tutorial,在任务定义和 boto3 docs for creating a task definition 中没有提及 executionRoleARN,它没有具体说明 executionRoleARN
的值应该是什么。
我看过Optional IAM Permissions for Fargate Tasks Pulling Amazon ECR Images,但这对我没有帮助。
我在this tutorial 之后创建了 IAM 管理员用户。
【问题讨论】:
【参考方案1】:之所以需要 executionRoleArn,是因为容器定义中的图像来自 ECR,它是一个私有存储库。
ECS 包含基本执行任务角色策略here。
您可以修改此内容并创建新策略,也可以将 AmazonECSTaskExecutionRolePolicy
的托管策略附加到您的 IAM 角色。
创建它时很重要,它是使用ecs-tasks.amazonaws.com
的信任关系创建的。
创建角色后,获取其 Arn,可从控制台或通过 CLI 上的 list-roles 命令访问。
把这个arn添加到register_task_definition
,如下图所示
response = ecs_cli.register_task_definition(
family='what_is_family_06_06', #i dont get what's a family
networkMode='awsvpc',
containerDefinitions=[
"name": "rand_name_06_06",
"image": image_name,
],
cpu = "256",
memory = "512",
requiresCompatibilities=['FARGATE'],
executionRoleArn='ARN'
)
【讨论】:
谢谢!我已按照您提到的链接中的步骤,将以下行添加到 register_task_definition: executionRoleArn='arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy' 但是,我得到“发生错误(ClientException)调用 RegisterTaskDefinition 操作时:角色无效”。你也许知道我做错了什么?再次感谢! 您是否将其创建为 ecs 角色?如果没有编辑信任关系以添加它。在回答中使用服务名称 我现在知道了!!这是我需要添加的内容:'arn:aws:iam::420295140958:role/ecsTaskExecutionRole'。非常感谢我已经为此苦苦挣扎了一段时间! :)以上是关于如何在 boto3 中设置 executionRoleArn 的值?的主要内容,如果未能解决你的问题,请参考以下文章