Из задания контейнера, запущенного в пакетном режиме, я пытаюсь извлечь идентификатор экземпляра экземпляра EC2, в котором выполняется это пакетное задание AWS:
Я выполняю следующее:
- В скрипте задания я беру переменную окружения
AWS_BATCH_JOB_ID
и вызываю boto3.client('batch').describe_jobs(jobs=[job_id])
- Я извлекаю
containerInstanceArn
из предыдущего ответа. Это имеет вид: "arn:aws:ecs:us-west-2:55555555:container-instance/3364c30a-aaaa-bbbb-cccc-03e68c347f00"
Я звоню boto3.client('ecs').describe_container_instances(...)
с полученным Арном. в этом ответе должен содержаться идентификатор экземпляра EC2:
# this is run from the batch job environment -- inside the container instance
instances = ecs.describe_container_instances(
cluster=config['cluster_arn'],
containerInstances=[this_container_instance_arn],
include=['TAGS'])
Однако при вызове DescribeContainerInstances
выдается ошибка:
botocore.errorfactory.InvalidParameterException:
An error occurred (InvalidParameterException) when calling the
DescribeContainerInstances operation: Identifier is for 12345678.
Your accountId is 55555555
I 'Мы отредактировали числа, но 55555555 соответствует префиксу в containerInstanceArn. 12345678 соответствует идентификатору во всех моих ролях iam, например, arn:aws:iam::12345678:role/my-ecs-job-role
.
Задание было запущено из CLI (из моей основной учетной записи пользователя). Я предполагаю, что при выполнении задания предполагается другая роль, потому что экземпляр запускается автоматически какой-либо учетной записью службы AWS?
Что мне нужно изменить в IAM, чтобы разрешить моему сценарию задания запрашивать ECSэкземпляр с boto?
Вот роль задания, которую я настроил в своем определении пакетного задания:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
У меня также есть следующий документ политики, прикрепленный к роли задания. без него вызов describe_container_instances
отклоняется:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:DescribeContainerInstances"
],
"Resource": "*"
}
]
}
Есть ли еще одна роль, которую мне нужно отредактировать. Я заметил, что есть также роль экземпляра ECS, которая отличается от роли задания.