我的应用程序体系结构具有一个弹性负载平衡器和自动伸缩组,在Auto Scaling组中,我创建了Launch配置,用UserData实例化EC2实例,以便在每个实例上运行nodejs服务器。 AWS_ACCESS_ID 和 AWS_SECRET_ACCESS_KEY 已使用用户数据添加到EC2环境变量中。因此,在我的服务器端(节点)代码中,我没有提供这些凭据。 使用S3 SDK时出现错误。 错误消息:“ CredentialsError:配置中缺少凭据”。
但是,如果我使用相同的用户数据来创建单个EC2实例,而没有任何负载均衡器和Auto Scaling组,那么它将正常工作。
而且,如果我在EC2实例上手动停止节点服务器(当我有负载均衡器和自动伸缩组时)并再次运行它,它将开始正常工作。
以下是我用于EC2启动配置的用户数据。
我正在EC2上使用Amazon-Linux。
#!/bin/bash
set -e -x
echo AWS_ACCESS_KEY_ID=********** >> /etc/environment
echo AWS_SECRET_ACCESS_KEY=****************************** >> /etc/environment
curl --silent --location https://rpm.nodesource.com/setup_9.x | bash -
sudo yum install -y git nodejs
git clone https://github.com/Vaaceph/BackEndCloud.git && cd BackEndCloud
sudo npm install
DEBUG=express:* node server.js
答案 0 :(得分:0)
EC2的最佳做法是按照https://docs.aws.amazon.com/autoscaling/ec2/userguide/us-iam-role.html
分配实例配置文件这样做的好处是EC2使用的凭据是短暂的,自动轮换的,并且不需要对用户访问密钥/秘密密钥进行持续管理。