Как составить список задач ecs с помощью клиента boto3 при типе запуска Fargate?

#boto3 #amazon-ecs #aws-fargate

#boto3 #amazon-ecs #aws-fargate

Вопрос:

Я пытаюсь получить список arn задач из кластера (тип запуска Fargate) с помощью клиента boto3.

Если тип запуска — EC2, то это работает:

 ecs = boto3.client('ecs')
ecs.list_tasks(
    cluster='cluster_name',
    containerInstance='container_instance_arn',
)
 

Но когда тип запуска — fargate, для передачи функции нет экземпляров контейнера.
Я пробовал только с именем кластера

 ecs = boto3.client('ecs')
ecs.list_tasks(
    cluster='cluster_name'
)
 

но затем это не удается “not authorized to perform: ecs:ListTasks on resource: *”

Когда я использую ECS API напрямую, требуется только имя кластера. (тип запуска — Fargate)

 aws ecs list-tasks --cluster <cluster_name>

{
    "taskArns": [
        "arn:aws:ecs:eu-west-1:xxxxxxxxxxxx:task/679ac0fa-107b-4e7c-b630-9d8ae3a1cb8b",
        "arn:aws:ecs:eu-west-1:xxxxxxxxxxxx:task/8abe5ea2-6323-46fd-b937-c976f273e517",
        "arn:aws:ecs:eu-west-1:xxxxxxxxxxxx:task/98c4e42b-a6a9-4353-b5b9-9ba78f116aa0"
    ]
}
 

Как я могу получить этот же список, используя boto3?

Редактировать: вот пример политики, которую я использую:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ecs:ListTasks",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:ecs:*:xxxxxxxxxxx:container-instance/*",
                "arn:aws:logs:eu-central-1:xxxxxxxxxxx:*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:eu-central-1:xxxxxxxxxxx:log-group:/aws/lambda/aTestFunction:*"
        }
    ]
}
 

Ответ №1:

В сообщении об ошибке был указан прямой ответ.

 “not authorized to perform: ecs:ListTasks on resource: *”
 

Что было необходимо, так это добавить это утверждение в политику:

 {
     "Sid": "VisualEditor0",
     "Effect": "Allow",
     "Action": "ecs:ListTasks",
     "Resource": "*"
}
 

Спасибо, что @Marcin указал мне правильное направление.

Ответ №2:

Команда, которую вы используете:

 ecs.list_tasks(cluster='cluster_name')
 

правильно. Однако ошибка, которую вы получаете:

 not authorized to perform: ecs:ListTasks on resource: *
 

указывает, что у любого пользователя / роли IAM, который вы используете для его запуска, нет разрешений ecs:ListTasks . Таким образом, вы должны дважды проверить, какой пользователь / роль используется для выполнения вашего скрипта.

Комментарии:

1. Я добавил пример политики, которую роль использует для запуска функции Lambda. С этим что-то не так? ecs.list_tasks Команда работает с обоими cluster containerInstance параметрами и, но завершается not authorized ошибкой без containerInstance параметра. А в случае Fargate нет никаких экземпляров контейнера, которые можно было бы ему передать.

2. @Sam Команда в порядке, и она работает, как и ожидалось, с fargate. Проблема должна быть где-то в другом месте. Может быть, для fargate требуются другие разрешения?