获取部署到Elastic Beanstalk的Python应用版本标签

4 投票
1 回答
1179 浏览
提问于 2025-04-18 09:28

我想知道怎么才能获取部署在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应用版本?(显然我是在写完上面的内容后才找到的)。

撰写回答