我有一个Docker化的Django应用程序,我想通过cloudfoundry cli工具部署在SAP云平台上。我已经添加了几个用户提供的服务,有他们自己的凭证集。例如,我添加了AWS S3作为用户提供的服务,并为其提供了证书。
现在,这些凭证以环境变量的形式提供,如
VCAP_SERVICES={"user-provided":[{ "label": "user-provided", "name": "s3", "tags": [ ], "instance_name": "s3", "binding_name": null, "credentials": { "aws_access_key": "****", "aws_secret_key": "****", "bucket": "****", "region": "****", "endpoint": "*****" }, "syslog_drain_url": "", "volume_mounts": [ ] }]}
我有一个.env文件,其中我定义了变量,例如:AWS_ACCESS_KEY。通常情况下,我传递字符串值到变量,然后由我的应用程序消耗。但是,鉴于我已经通过用户提供服务机制配置了它,并且证书已经在那里,我想知道我如何访问这些证书。
有几种方法可以在Python应用程序中提取服务信息。
您可以使用 cfenv库. 你只需将这个库集成到你的应用程序的启动过程中。这通常提供了最大的灵活性,但有时可能很难与框架集成,这取决于框架如何期望配置被输入。
你可以生成环境变量或配置文件,从你的例子来看,你可以生成环境变量或配置文件。.env
文件,在飞行中。这可以通过使用 .profile
脚本. A .profile
脚本,如果放在应用程序的根目录下,将在应用程序之前执行,但在运行时容器内。这允许你在最后一刻调整你的应用程序的配置。
A .profile
脚本只是一个shell脚本,在其中,你可以使用诸如 jq
或 sed
来提取信息。VCAP_SERVICES
环境变量,并将这些信息放在其他地方(可能是其他环境变量,也可能是在一个叫做 .env
文件)。)
因为您推送的是一个Python应用程序,所以您的 .profile
也可以执行一个Python脚本。Python buildpack将运行并保证PATH上有一个Python运行时供您的 .profile
脚本。因此,你可以做这样的事情,来执行一个Python脚本。
.profile脚本:
python $HOME/.profile.py
.profile.py脚本(起这个名字,你可以叫它任何名字):
#!/usr/bin/env python3
print("Hello from python .profile script")
你甚至可以在你的脚本中导入Python库,这些库包括在你的 requirements.txt
文件从这个脚本。