如何更改 Cloud Foundry 中给定服务的凭据
How to change credentials for a given service in Cloud Foundry
我想知道如何(如果可能的话)从 Cloud Foundry 中的服务更改 URI 凭据。更具体地说,来自 Pivotal Cloud Foundry 的 mLab 服务(免费计划)。
背景
我创建了一个 nodejs 应用并将其推送到 Pivotal Cloud Foundry。
此应用已绑定到使用免费计划的 mLab 服务。
当使用 Pivotal 网站创建 mLab 服务时,它会自动创建一个带有用户和密码的数据库。
在Pivotal网站打开应用程序设置,我可以看到以下环境变量。请注意 credentials
内的 mongo uri 和 mLab
.
内的 name
{
"staging_env_json": {},
"running_env_json": {},
"system_env_json": {
"VCAP_SERVICES": {
"mlab": [
{
"label": "mlab",
"provider": null,
"plan": "sandbox",
"name": "users",
"instance_name": "users",
"binding_name": null,
"credentials": {
"uri": "mongodb://CloudFoundry_someusergenerated:apasswordgeneratedautomatically@somehost.mlab.com:someport/CloudFoundry_database_name"
}
}
]
}
},
"application_env_json": {
"VCAP_APPLICATION": {
"cf_api": "https://donotuseapi.run.pivotal.io",
"application_name": "website",
"application_uris": [
"xxx.cfapps.io"
],
"name": "website",
"space_name": "space1",
"uris": [
"xxx.cfapps.io"
]
}
}
}
使用此默认用户和密码,与数据库的连接工作正常。为了从环境变量中获取 mongodb uri,我使用了 npm package cfenv
const appEnv = require('cfenv').getAppEnv();
const env = process.env;
keys = {
mongodb: {
dbURI: appEnv.getServiceURL(env.MONGO_SERVICE_NAME)
}
};
在我的 manifest.yaml 文件中,我用环境变量中的服务名称相应地指定了这个 MONGO_SERVICE_NAME
。
---
applications:
- name: website
memory: 128M
disk_quota: 256M
random-route: true
buildpack: nodejs_buildpack
health-check-type: port
env:
MONGO_SERVICE_NAME: 'users'
同样,数据库连接工作正常。
===
然后我打开了这个特定数据库的 mLab 网站并创建了一个新的数据库用户。
现在我想从 VCAP_SERVICES(环境变量)更新 credentials.uri
以便此特定服务使用新用户和密码。
据我所知,cf update-service
CLI 命令不是那个意思,所以我想知道这是否是 Cloud Foundry、Pivotal 或 mLab 的限制。我可以打赌,这个限制是由于我使用的是 Pivotal 试用帐户和 mLab 免费计划,但是如果我升级计划,我的问题仍然是一样的。
谢谢,
作为用户,您无法更改由服务代理生成的 VCAP_SERVICES
条目。这些是固定的,无法更改。
如果您 cf create-service
提供了一项服务,那么它是由服务经纪人创建的,您得到的正是服务提供商为您提供的服务。正如评论中提到的,根据服务代理,您可以使用 cf create-service -c
将参数传递给代理。检查您的服务提供商的文档,看看是否有一个选项可以影响以您希望的方式生成的凭据。
如果您的服务提供商没有提供您想要的选项,您可以创建一个服务密钥,而不是将您的服务绑定到应用程序。这将为您提供一组服务凭据,这些凭据将在服务密钥的持续时间内持续存在。服务密钥凭据不会自动传递到应用程序中,但您可以通过多种方式将它们输入到您的应用程序中。
- 可以通过环境变量传入。
- 您可以创建用户提供的服务 (
cf cups
)。
- 您可以在应用程序配置中或通过配置服务器传递它们。
使用所有这些选项,您将凭据传递到应用程序,因此理论上您可以在它们到达您的应用程序之前调整或更改它们。
希望对您有所帮助!
我想知道如何(如果可能的话)从 Cloud Foundry 中的服务更改 URI 凭据。更具体地说,来自 Pivotal Cloud Foundry 的 mLab 服务(免费计划)。
背景
我创建了一个 nodejs 应用并将其推送到 Pivotal Cloud Foundry。
此应用已绑定到使用免费计划的 mLab 服务。
当使用 Pivotal 网站创建 mLab 服务时,它会自动创建一个带有用户和密码的数据库。
在Pivotal网站打开应用程序设置,我可以看到以下环境变量。请注意 credentials
内的 mongo uri 和 mLab
.
name
{
"staging_env_json": {},
"running_env_json": {},
"system_env_json": {
"VCAP_SERVICES": {
"mlab": [
{
"label": "mlab",
"provider": null,
"plan": "sandbox",
"name": "users",
"instance_name": "users",
"binding_name": null,
"credentials": {
"uri": "mongodb://CloudFoundry_someusergenerated:apasswordgeneratedautomatically@somehost.mlab.com:someport/CloudFoundry_database_name"
}
}
]
}
},
"application_env_json": {
"VCAP_APPLICATION": {
"cf_api": "https://donotuseapi.run.pivotal.io",
"application_name": "website",
"application_uris": [
"xxx.cfapps.io"
],
"name": "website",
"space_name": "space1",
"uris": [
"xxx.cfapps.io"
]
}
}
}
使用此默认用户和密码,与数据库的连接工作正常。为了从环境变量中获取 mongodb uri,我使用了 npm package cfenv
const appEnv = require('cfenv').getAppEnv();
const env = process.env;
keys = {
mongodb: {
dbURI: appEnv.getServiceURL(env.MONGO_SERVICE_NAME)
}
};
在我的 manifest.yaml 文件中,我用环境变量中的服务名称相应地指定了这个 MONGO_SERVICE_NAME
。
---
applications:
- name: website
memory: 128M
disk_quota: 256M
random-route: true
buildpack: nodejs_buildpack
health-check-type: port
env:
MONGO_SERVICE_NAME: 'users'
同样,数据库连接工作正常。
===
然后我打开了这个特定数据库的 mLab 网站并创建了一个新的数据库用户。
现在我想从 VCAP_SERVICES(环境变量)更新 credentials.uri
以便此特定服务使用新用户和密码。
据我所知,cf update-service
CLI 命令不是那个意思,所以我想知道这是否是 Cloud Foundry、Pivotal 或 mLab 的限制。我可以打赌,这个限制是由于我使用的是 Pivotal 试用帐户和 mLab 免费计划,但是如果我升级计划,我的问题仍然是一样的。
谢谢,
作为用户,您无法更改由服务代理生成的 VCAP_SERVICES
条目。这些是固定的,无法更改。
如果您 cf create-service
提供了一项服务,那么它是由服务经纪人创建的,您得到的正是服务提供商为您提供的服务。正如评论中提到的,根据服务代理,您可以使用 cf create-service -c
将参数传递给代理。检查您的服务提供商的文档,看看是否有一个选项可以影响以您希望的方式生成的凭据。
如果您的服务提供商没有提供您想要的选项,您可以创建一个服务密钥,而不是将您的服务绑定到应用程序。这将为您提供一组服务凭据,这些凭据将在服务密钥的持续时间内持续存在。服务密钥凭据不会自动传递到应用程序中,但您可以通过多种方式将它们输入到您的应用程序中。
- 可以通过环境变量传入。
- 您可以创建用户提供的服务 (
cf cups
)。 - 您可以在应用程序配置中或通过配置服务器传递它们。
使用所有这些选项,您将凭据传递到应用程序,因此理论上您可以在它们到达您的应用程序之前调整或更改它们。
希望对您有所帮助!