首页 > 解决方案 > 如何在 boto3 中设置 executionRoleArn 的值?

问题描述

我是 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()

但是,例如,在本教程中,任务定义中没有提及 executionRoleARN,在用于创建任务定义的 boto3 文档中,它没有具体说明 executionRoleARN应该是什么值。

我查看了用于提取 Amazon ECR 映像的 Fargate 任务的可选 IAM 权限,但这对我没有帮助。

我按照本教程创建了 IAM 管理员用户。

标签: pythonamazon-web-servicesboto3amazon-iamamazon-ecs

解决方案


之所以需要 executionRoleArn,是因为容器定义中的图像来自 ECR,它是一个私有存储库。

ECS 在此处包含基本执行任务角色策略。

您可以修改此内容并创建新策略或将托管策略附加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'
)

推荐阅读