我是 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
的具体值应该是什么。
我已经查看了 Fargate 任务拉取 Amazon ECR 映像的可选 IAM 权限,但这对我没有帮助。
我已按照本教程创建了 IAM 管理员用户。
之所以需要 executionRoleArn,是因为容器定义中的映像来自 ECR,这是一个私有存储库。
ECS 在此处包含基本执行任务角色策略。
您可以修改此设置并创建新策略,也可以将托管策略AmazonECSTaskExecutionRolePolicy
附加到您的 IAM 角色。
创建它时很重要,它是使用信任关系创建的ecs-tasks.amazonaws.com
.
创建角色后,可以获取其 Arn,可以从控制台或通过 CLI 上的列表角色命令访问该角色。
获取此 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'
)