CLI ECS. Нельзя указывать роль IAM для служб, которым требуется роль, связанная со службой. - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь развернуть контейнер в ECS (Fargate) через aws cli.Я могу успешно создать определение задачи, проблема возникает, когда я хочу добавить новую службу в мой кластер Fargate.

Это команда a execute:

aws ecs create-service --cli-input-json file://aws_manual_cfn/ecs-service.json

Thisэто ошибка, которую я получаю:

An error occurred (InvalidParameterException) when calling the CreateService operation: You cannot specify an IAM role for services that require a service linked role.`

ecs-service.json

{
"cluster": "my-fargate-cluster",
"role": "AWSServiceRoleForECS",
"serviceName": "dropinfun-spots",
"desiredCount": 1,
"launchType": "FARGATE",
"networkConfiguration": {
    "awsvpcConfiguration": {
        "assignPublicIp": "ENABLED",
        "securityGroups": ["sg-06d506f7e444f2faa"],
        "subnets": ["subnet-c8ffcbf7", "subnet-1c7b6078", "subnet-d47f7efb", "subnet-e704cfad", "subnet-deeb43d1", "subnet-b59097e8"]
     }
},
"taskDefinition": "dropinfun-spots-task",
"loadBalancers": [
    {
        "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:283750935672:targetgroup/dropinfun-spots-target-group/c21992d4a411010f",
        "containerName": "dropinfun-spots-service",
        "containerPort": 80
    }
]
}

task-definition.json

{
"family": "dropinfun-spots-task",
"executionRoleArn": "arn:aws:iam::283750935672:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"memory": "0.5GB",
"cpu": "256",
"networkMode": "awsvpc",
"requiresCompatibilities": [
  "FARGATE"
],
"containerDefinitions": [
  {
    "name": "dropinfun-spots-service",
    "image": "283750935672.dkr.ecr.us-east-1.amazonaws.com/dropinfun-spots-service:latest",
    "memory": 512,
    "portMappings": [
        {
          "containerPort": 80
        }
      ],
    "essential": true
  }
]
}

Есть идеи, как справиться с этой связанной ролью ?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вместо указания "role": "AWSServiceRoleForECS"

вы можете указать taskRoleArn в дополнение к executionRoleArn, если хотите назначить определенную роль своей службе (контейнеру).Будет полезно, если вы хотите, чтобы ваш контейнер имел доступ к другим сервисам AWS от вашего имени.

task-definition.json

{
"family": "dropinfun-spots-task",
"executionRoleArn": "arn:aws:iam::************:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
"taskRoleArn" : "here_you_can_define_arn_of_a_specific_iam_role"
"memory": "0.5GB",
"cpu": "256",
"networkMode": "awsvpc",
"requiresCompatibilities": [
  "FARGATE"
],
"containerDefinitions": [
  {
    "name": "dropinfun-spots-service",
    "image": "************.dkr.ecr.us-east-1.amazonaws.com/dropinfun-spots-service:latest",
    "memory": 512,
    "portMappings": [
        {
          "containerPort": 80
        }
      ],
    "essential": true
  }
]
}

off-note: Публиковать aws account_id очень плохая практика: "{

0 голосов
/ 28 мая 2018

Поскольку вы пытаетесь создать задачи типа запуска Fargate, вы устанавливаете сетевой режим в режим awsvpc в определении задачи (Fargate поддерживает только режим awsvpc).

В вашем ecs-service.json я вижучто у него есть "role": "AWSServiceRoleForECS".Похоже, вы пытаетесь назначить роль службы для этой службы.AWS не позволяет указывать роль IAM для служб, которым требуется роль, связанная со службой.

Если вы присвоили роль IAM службы, поскольку хотите использовать балансировщик нагрузки, вы можете удалить ее.Потому что в определении задачи, в котором используется сетевой режим awsvpc, используется роль, связанная со службой, которая создается автоматически [1].

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html#create-service-linked-role

...