获取当前的环境名称

时间:2014-01-03 13:30:01

标签: amazon-web-services elastic-beanstalk

我有一个AWS问题:我有一个在Beanstalk上运行的应用程序。我有两个环境,XXX-LIVE和XXX-TEST。

我想知道如何使用SDK获取环境名称,因为如果代码在XXX-TEST环境中运行,我想指向我的测试数据库?

到目前为止,我只找到了对象AWSClientFactory.CreateAmazonElasticBeanstalkClient()的.RetrieveEnvironmentInfo()方法;

但这要求您提供环境名称/ ID。

有人可以帮忙吗?

2 个答案:

答案 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”。

enter image description here

如果数据库访问URL是两者之间的唯一区别,那么将URL设置为参数,最终会得到相同的代码而没有分支。

有关自定义的更多详细信息,请访问:Customizing and Configuring AWS Elastic Beanstalk Environments