我有一个AWS问题:我有一个在Beanstalk上运行的应用程序。我有两个环境,XXX-LIVE和XXX-TEST。
我想知道如何使用SDK获取环境名称,因为如果代码在XXX-TEST环境中运行,我想指向我的测试数据库?
到目前为止,我只找到了对象AWSClientFactory.CreateAmazonElasticBeanstalkClient()的.RetrieveEnvironmentInfo()方法;
但这要求您提供环境名称/ ID。
有人可以帮忙吗?
答案 0 :(得分:3)
以下是我们如何为ruby中的应用程序执行此操作:
def self.beanstalk_env
begin
uuid = File.readlines('/sys/hypervisor/uuid', 'r')
if uuid
str = uuid.first.slice(0,3)
if str == 'ec2'
metadata_endpoint = 'http://169.254.169.254/latest/meta-data/'
dynamic_endpoint = 'http://169.254.169.254/latest/dynamic/'
instance_id = Net::HTTP.get( URI.parse( metadata_endpoint + 'instance-id' ) )
document = Net::HTTP.get( URI.parse( dynamic_endpoint + 'instance-identity/document') )
parsed_document = JSON.parse(document)
region = parsed_document['region']
ec2 = AWS::EC2::Client.new(region: region)
ec2.describe_instances({instance_ids:[instance_id]}).reservation_set[0].instances_set[0].tag_set.each do |tag|
if tag.key == 'elasticbeanstalk:environment-name'
return tag.value
end
end
end
end
rescue
end
'No_Env'
end
您的实例的IAM策略必须允许ec2:describe:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:Describe*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
答案 1 :(得分:0)
您可以为两个环境添加自定义“environment-name”参数。将值设置为环境名称或仅指定“test”或“production”。
如果数据库访问URL是两者之间的唯一区别,那么将URL设置为参数,最终会得到相同的代码而没有分支。
有关自定义的更多详细信息,请访问:Customizing and Configuring AWS Elastic Beanstalk Environments