我希望能够从我的 EC2 实例中提取有关当前弹性 beantalk 环境的信息,以便我可以将该信息包含在从我的服务器发送的错误电子邮件中。
例如,了解当前环境的名称和已部署代码的版本标签都很有用。有人知道如何以编程方式执行此操作吗?我知道已经有一个用于检索 EC2 信息(例如公共主机名和 AMI-id 等)的 API,但我找不到任何有关 elastic beanstalk 的信息。
目前我的解决方案是手动设置一些我的应用程序可以读取的环境变量,但显然这很麻烦。
答案1
在网上搜索了一番后,我发现了。我知道这个问题很老了,但我想我会给出这个答案。
$ /opt/elasticbeanstalk/bin/get-config container -k environment_name
答案2
我已经想出办法了。对于那些好奇的人:
我可以通过 获取 EC 实例信息http://169.254.169.254/latest/meta-data/
。特别是我想要我的 EC2 实例 ID
我可以通过以下方式确定所有 beanstalk 环境的列表描述环境
对于每个我可以运行的环境describe-environment-resources
。此调用返回一个实例列表,我可以将当前实例的实例 ID 与该列表进行匹配。这样我就可以找出我的环境名称。
最后,我可以参考结果来describe-environments
确定当前部署的代码的版本标签。
在执行任何操作之前,我需要配置我的 ec2 实例以访问 elastic beanstalk 信息。我可以通过为与我的 ec2 实例关联的角色分配正确的访问策略并获取身份验证信息(同样通过以下位置的实例元数据)来实现此目的:http://169.254.169.254/latest/meta-data/
由于我使用的是 pythonboto
库,所以上面描述的所有操作都已经有预先准备好的库函数来帮我执行。
呃
我还没有编写代码,但如果我能让它工作,我会在这里发布一个片段
编辑 工作代码
答案3
它没有记录,所以可能会在没有警告的情况下中断,但是 EB 的/opt/elasticbeanstalk/bin/get-config
命令从位于的文件中读取,/opt/elasticbeanstalk/deploy/configuration/containerconfiguration
其中包含的数据比 所公开的更多get-config
。
由于它被格式化为 JSON,并且 EB 图像包含jq
开箱即用的功能,因此该命令将提取环境名称(可能受到访问限制,因此sudo
可能需要其他访问控制机制):
$ jq .system.environment_name /opt/elasticbeanstalk/deploy/configuration/containerconfiguration
describe-environments
与使用或(EB 定义了一个包含环境名称的标签)相比,选择离线方法的一个原因describe-tags
是,由于 AWS API 速率限制,您的部署可能会在大规模部署中失败,这不是一种在凌晨 3 点醒来的有趣方式。