我正在使用AWS Java API RunInstance()从我的自定义AMI镜像启动一个新的EC2实例。 我如何将环境变量传递给新的EC2实例,例如数据库URL,AWS凭据等?
我正在使用AWS Java API RunInstance()从我的自定义AMI镜像启动一个新的EC2实例。 我如何将环境变量传递给新的EC2实例,例如数据库URL,AWS凭据等?
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
声明:我不是系统管理员!
我使用一个安全的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
{
"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
tr
来删除换行符!GET http://169.254.169.254/latest/user-data