use*_*116 21 amazon-ec2 amazon-web-services ec2-ami ec2-api-tools
我正在使用AWS Java API RunInstance()从我的自定义AMI映像启动新的EC2实例.如何将环境变量传递给新的EC2 INSTANCE,例如数据库URL,AWS凭证等?
jco*_*ctx 12
http://alestic.com/2009/06/ec2-user-data-scripts解释了如何使用用户数据执行此操作.关于使用Java的问题,请参阅使用userdata启动AmazonEC2.
请注意,我已经看到提到这不适用于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''')
Run Code Online (Sandbox Code Playgroud)
然后登录时:
ubuntu@ip-10-190-81-29:~$ echo $foozle
barzle
Run Code Online (Sandbox Code Playgroud)
免责声明:我不是系统管理员!
我使用安全的S3存储桶,这意味着只有您正在启动的实例才能访问的存储桶.您可以设置IAM角色,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::some-secure-bucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以.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
Run Code Online (Sandbox Code Playgroud)
您可以在代码运行时将此文件拉下来,或者通过将上述cp命令放在位于某个位置的init脚本中,可选择使其在启动时启动/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": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后安装 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
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够通过标记获取每个实例元数据,例如实例的"名称":
ec2-describe-tags --filter resource-id="$(ec2metadata --instance-id)" --filter "key=Name" | cut -f5
Run Code Online (Sandbox Code Playgroud)
注意:我在bash上吮吸所以我在ruby tr中删除了这个名字,但如果你进入它,你可以用它来删除换行符!
您还可以使用实例元数据检索,如https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html中所述
从上述文档中,如果您从实例内运行以下 GET 请求,则该请求将检索该实例的用户数据:
GET http://169.254.169.254/latest/user-data
Run Code Online (Sandbox Code Playgroud)
这样,即使实例已经启动并运行,也可以动态检索用户数据。
| 归档时间: |
|
| 查看次数: |
11589 次 |
| 最近记录: |