Cloudfoundry VCAP_SERVICES变量没有提供给django的容器。

问题描述 投票:0回答:1

我有一个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。通常情况下,我传递字符串值到变量,然后由我的应用程序消耗。但是,鉴于我已经通过用户提供服务机制配置了它,并且证书已经在那里,我想知道我如何访问这些证书。

cloudfoundry sap-cloud-platform
1个回答
1
投票

有几种方法可以在Python应用程序中提取服务信息。

  1. 您可以使用 cfenv库. 你只需将这个库集成到你的应用程序的启动过程中。这通常提供了最大的灵活性,但有时可能很难与框架集成,这取决于框架如何期望配置被输入。

  2. 你可以生成环境变量或配置文件,从你的例子来看,你可以生成环境变量或配置文件。.env 文件,在飞行中。这可以通过使用 .profile 脚本. A .profile 脚本,如果放在应用程序的根目录下,将在应用程序之前执行,但在运行时容器内。这允许你在最后一刻调整你的应用程序的配置。

    A .profile 脚本只是一个shell脚本,在其中,你可以使用诸如 jqsed 来提取信息。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 文件从这个脚本。

© www.soinside.com 2019 - 2024. All rights reserved.