获取部署到Elastic Beanstalk的Python应用版本标签
我想知道怎么才能获取部署在Elastic Beanstalk上的包的版本标签属性,以便在我的应用程序中显示出来。
据我所知,使用“git aws.push”上传的包会被放到一个S3存储桶里。我的目标是获取这个版本号,并把它设置为环境变量,或者动态获取它,以便在我的Django应用中显示。
谢谢
1 个回答
1
我看到有两种可能的解决方法。虽然我不太明白为什么这件事不更简单,因为这是一个相当合理的使用场景,但看起来AWS目前不支持这个功能。
解决方案1:生成版本标签
你可以在自己这边生成一个版本标签(比如用提交的哈希值),然后把它作为代码的一部分。
比如在你的 Makefile
文件里:
VERSION=$(shell git rev-parse --short HEAD)
deploy: requirements.txt
echo $(VERSION) > version.txt
eb deploy --label $(VERSION)
.PHONY: deploy
然后你可以直接从实例中读取这个文件。还有其他一些选项,比如使用 sed
命令把它放到你某个文件的变量里。
解决方案2:从一个未记录的文件获取(不太稳定)
我试着在EC2实例上找到这个元数据,结果在一个不幸的是属于root的文件里找到了:
[root@... ec2-user]# cat /opt/elasticbeanstalk/deploy/manifest
{"RuntimeSources":{"yourappname":{"app-VERSION":{"s3url":""}}},"DeploymentId":24,"Serial":26}
[ec2-user@... ~]$ ls -la /opt/elasticbeanstalk/deploy/manifest
-rw-rw---- 1 root awseb 98 Mar 22 17:57 /opt/elasticbeanstalk/deploy/manifest
我不确定你能否这样做,但你可以在部署后执行一个命令,把这个文件的所有权更改,或者把它复制到一个你可以读取的地方。我可能会试试这个方法,然后告诉你是否成功。
这里也有人问过类似的问题: 如何在你的应用中获取Elastic Beanstalk应用版本?(显然我是在写完上面的内容后才找到的)。