我正在使用AWS Java API RunInstance()从我的自定义AMI映像启动一个新的EC2实例。如何向新的EC2实例传递环境变量,如数据库url、AWS凭证等?
发布于 2012-03-31 12:05:17
http://alestic.com/2009/06/ec2-user-data-scripts解释了如何使用用户数据执行此操作。有关使用Java的问题,请参阅AmazonEC2 launch with userdata。
请注意,我已经提到,这不适用于Windows,只适用于Unix。
在此处更新有关设置环境变量的更多数据:https://forums.aws.amazon.com/message.jspa?messageID=139744
在对我进行了大量测试之后,将环境变量回显到/etc/environment中效果最好,如下所示:
reservation = connection.run_instances(image_id = image_id,
key_name = keypair,
instance_type = 'm1.small',
security_groups = ['default'],
user_data = '''#!/bin/sh\necho export foozle=barzle >> /etc/environment\n''')然后在登录时:
ubuntu@ip-10-190-81-29:~$ echo $foozle
barzle发布于 2014-08-21 07:40:18
免责声明:我不是sys管理员!
我使用的是安全的S3存储桶,这意味着只有您要启动的实例才能访问该存储桶。您可以设置IAM角色,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::some-secure-bucket/*"
}
]
}然后,您可以将您的.env文件上传到该存储桶中(加密存储)。然后,要在EC2实例上访问它,您可以使用AWS cli工具:
sudo apt-get install -y python-pip (for aws s3 CLI library)
sudo pip install awscli
aws s3 cp --region us-east-1 s3://some-secure-bucket/.some-dot-env-file output_file_path您可以在代码运行时下载此文件,也可以选择将上述cp命令放入/etc/init.d/download_credentials.sh等位置的初始化脚本中,使其在引导时发生
我认为这是一个非常好的选择,用来下载每个使用AMI的实例都需要的东西,比如凭据。但是,如果您想指定每个实例的元数据,我只是使用我认为效果很好的标签来实现。要执行此操作,请将上面的IAM角色更改为以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::some-secure-bucket/*"
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags"
],
"Resource": "*"
}
]
}然后安装ec2-api-tools
sudo sed -i.dist 's,universe$,universe multiverse,' /etc/apt/sources.list
sudo apt-get update
sudo apt-get install -y ec2-api-tools现在,您应该能够通过标记获取每个实例的元数据,例如实例的“名称”:
ec2-describe-tags --filter resource-id="$(ec2metadata --instance-id)" --filter "key=Name" | cut -f5注意:我的bash很烂,所以我用ruby去掉了名字,但是如果你喜欢的话你可以用tr去掉换行符!
发布于 2013-01-16 20:46:09
您还可以使用实例元数据检索,如https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html中所述
在上面的文档中,如果您从实例内部运行,则以下GET请求将检索实例的用户数据:
GET http://169.254.169.254/latest/user-data这样,即使在实例已经启动和运行之后,也可以动态检索用户数据。
https://stackoverflow.com/questions/9950586
复制相似问题