如何在 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 的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Netbeans 中设置环境变量?

如何在 Android 中设置 libsvm?

如何在 Laravel 中设置全局变量?

如何在代码中设置绑定?

如何在协议扩展中设置委托

如何在预览中设置环境对象