我有一个节点应用程序,用于侦听RabbitMQ队列上的消息,并且对于它接收的每条消息,它启动一个新的独立节点进程,用于处理消息内容。
第二个按需启动节点应用程序可以使用S3从IAM角色获取其凭据。
事实证明,我似乎遇到了Node AWS SDK通过EC2元数据服务检索IAM角色的错误。基本上,在负载下,对元数据服务的http调用超时(https://github.com/aws/aws-sdk-js/issues/692)。
因此,作为一种解决方法,我想知道父节点进程是否可以使用某种API调用或其他技巧以某种方式检索AWS凭证,并将它们在命令行上传递给子节点应用程序?
这意味着父应用只能调用元数据服务,减少了对它的负担。
可能以任何方式?
答案 0 :(得分:2)
让主节点应用程序从元数据服务中检索凭据,将它们本地缓存在内存中,在调用子进程时根据需要传递它们,并让主节点应用程序在它们到期之前刷新缓存的凭据。
您可以直接从元数据服务检索访问密钥ID,秘密访问密钥,会话令牌和到期时间。例如: var query = this.dbContext.Parent.AsNoTracking()
.Where(p => p.Age > 70)
.Select(p=> new
{
Parent = p,
FirstChild = p.FirstChild,
ChildrenCollection = p.ChildrenCollection
GrandChildrenCollection = p.ChildrenCollection.SelectMany(cc => cc.GrandChildren)
}).FirstOrDefault();
将产生:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-xyz