Я использую экземпляр ec2 с ролью IAM, которая дает мне все права на sqs
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sqs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Роль IAM имеет отношение 'ec2' в качестве доверительных отношений.
В этом случае у меня есть приложение node.js, работающее с aws-sdk.Я использую библиотеку sqs-customer для доступа к очереди.
Это мой код инициализации:
const consumer = require('sqs-consumer');
const AWS = require('aws-sdk');
let options = {apiVersion: '2012-11-05', region:'eu-central-1'};
let sqsClient = new AWS.SQS(options);
const app = consumer.create({
queueUrl: 'my_sqs_url',
region:'eu-central-1',
handleMessage: handleMessage,
sqs: sqsIncoming,
messageAttributeNames:['All']
});
app.on('error', (err) => {
console.log(err);
});
Точное сообщение об ошибке, которое я получаю: «Сбой получения сообщения SQS: отсутствуют учетные данные в конфигурации».Что верно, поскольку роль IAM должна предоставлять учетные данные, в соответствии с документацией это должно работать автоматически ( ссылка ).Я также использую эту настройку для пары экземпляров автоматического масштабирования ecs, и это работает без проблем, хотя я использую там более старую версию sdk (2.324.0).
Я использую aws-sdk версии 2.4.19 (последняя на данный момент).
- РЕДАКТИРОВАТЬ - Я забыл упомянуть, я использую Windows Server AMI.
Вещи, которые я пробовал:
- определение жестко закодированных учетных данных, тогда это работает
- создание более широкого профиля sqs (как видно выше)
- попробовал 2-й ответ из этой темы
Поэтому мне интересно, почему это не работает, мне нужна дополнительная настройка aws-sdk?
- EDIT2-- Оказывается, мне нужно больше установочного кода, см. эту ссылку для получения дополнительной информации.
Когда я вызываю sqs с помощью aws-cli, теперь я получаю сообщение об ошибке: Ошибка при получении учетных данных из Ec2InstanceMetadata: учетные данные не найдены в credential_source, указанном в профиле по умолчанию
Моя конфигурация выглядит как
# In ~/.aws/config
[profile default]
role_arn=arn:aws:iam:...
credential_source=Ec2InstanceMetadata