#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 требуются другие разрешения?