检测Elastic Beanstalk环境?

时间:2015-07-01 16:39:24

标签: ruby-on-rails ruby amazon-web-services elastic-beanstalk

我正在尝试通过弹性beanstalk环境标记错误消息。有没有办法以编程方式确定我在弹性beanstalk中的EC2实例中所处的环境?

我在rails上使用ruby,所以ruby方式会很好,但我可以使用任何语言移植。

2 个答案:

答案 0 :(得分:1)

我有一个rails项目,这是我们目前正在做的内容,以确定我们的ec2实例所属的环境。

在代码下面进行多次检查,文件检查确保您在ec2实例上运行此代码。第二组url调用是抓取ec2实例id以及正在使用的aws区域。最后,它使用前两个数据来使用aws-sdk查找环境名称。它有点难看,但它完成了工作。

require 'net/http'
require 'aws-sdk'

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'
                @env_name = tag.value
            end
        end
    end
end

答案 1 :(得分:1)

无论您做什么,都应该专注于应用程序环境名称,而不是关注弹性beanstalk环境名称。因此,请使用elastic beanstalk environment variables,设置类似APP_ENV,并以您在应用内使用的任何语言编程方式阅读。

它与面向对象编程的原理相同,在这种原则中,您将自己的东西封装为独立于代码的其余部分。 EB的内部结构可能随着下一个版本的变化而变化,弹性beanstalk环境变量仍将存在......