Node.js aws sqs获得';配置'中缺少凭据;错误消息

Node.js aws sqs获得';配置'中缺少凭据;错误消息,node.js,amazon-web-services,amazon-ec2,amazon-sqs,Node.js,Amazon Web Services,Amazon Ec2,Amazon Sqs,我正在使用一个具有IAM角色的ec2实例,该角色赋予我对sqs的所有权限 { "Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:*" ], "Effect": "Allow", "Resource": "*" } ] } IAM角色具有“ec2”作为信任关系 在这个实例上,我有一个node.js应用程序在运行aws sdk。

我正在使用一个具有IAM角色的ec2实例,该角色赋予我对sqs的所有权限

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "sqs:*"
        ],
        "Effect": "Allow",
        "Resource": "*"
    }
]
}

IAM角色具有“ec2”作为信任关系

在这个实例上,我有一个node.js应用程序在运行aws sdk。我正在使用sqs消费者库访问队列

这是我的初始化代码:

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服务器ami

我尝试过的事情:

  • 定义硬编码凭证,然后它就可以工作了
  • 创建更广泛的sqs配置文件(如上所示)
  • 尝试了来自的第二个答案
所以我想知道为什么这不起作用,我需要额外的aws sdk设置吗

--EDIT2——事实证明我需要更多的设置代码,有关更多信息,请参阅

使用aws cli调用sqs时,我现在会收到错误消息:从EC2INSTANCEMTADATA检索凭据时出错:在配置文件默认值中引用的凭据_源中找不到凭据

我的配置看起来像

# In ~/.aws/config
[profile default]
role_arn=arn:aws:iam:...
credential_source=Ec2InstanceMetadata

您是否尝试过从计算机上的CLI手动执行此操作?例如,使用AWS访问SQS队列?我已安装cli并收到不同的错误消息,请参阅我的第二次编辑以了解更多信息。您不需要配置凭据源或角色,我将同时删除它们。相反,请在AWS控制台中再次检查是否为EC2实例配置了正确的IAM角色。感谢您继续关注此问题。我已经仔细检查了这个角色,但它仍然不起作用。我现在使用一种变通方法,我已经创建了一个新用户,并为此用户定义了一个策略,这样我就可以在默认配置文件中使用此用户的访问密钥。这比必要的步骤多了一步,但至少它起作用了。