将服务实例绑定到应用程序、作业或功能工作负载
您可以使用服务绑定将 IBM Cloud 服务实例集成到 IBM Cloud® Code Engine 项目中的资源。
在确定要绑定到您的 Code Engine 工作负载的服务实例,并确保您已配置 服务绑定的访问权限 后,您就可以将服务实例绑定到您的 Code Engine 应用程序、作业或函数工作负载。
准备工作
- 创建项目。
- 创建 Code Engine 工作负载以绑定到服务实例。 要绑定到服务实例的工作负载必须存在。
- 创建要绑定到 Code Engine 工作负载的服务实例。
- 配置服务绑定的访问权。
在将服务实例绑定到 Code Engine 应用程序、作业或功能工作负载之前,必须先配置服务绑定的访问权限。 配置服务绑定的访问权,这取决于您是希望 Code Engine 自动为您创建和管理服务标识,还是要使用您管理的服务标识。
- 使用服务绑定时,服务标识,服务访问私钥和服务凭证之间有什么关系?
-
在 Code Engine 中,服务绑定是指应用程序、工作或功能工作量与另一个 IBM Cloud 服务之间的关系。Code Engine 使用服务ID 为特定的 IBM Cloud 服务实例创建凭据。 这些凭证是 服务凭证,供 Code Engine 项目用于与服务实例进行交互。 服务凭证存储在 服务访问私钥中。 服务访问密钥可通过应用程序、作业或功能访问,并用于与服务实例进行交互。
-
创建 IBM Cloud 服务实例时,可以选择为该服务实例创建服务凭证。 或者,在创建服务绑定时,可以选择 Code Engine,以便在配置了 服务绑定访问权 时自动为您创建服务实例凭证。
-
无论您是选择 Code Engine 为您自动创建服务凭证,还是为特定服务实例手动创建服务凭证,都必须为服务凭证指定 Identity and Access Management (IAM) 角色。 您指定的角色定义了与特定服务实例以及绑定的 Code Engine 应用程序、作业或功能之间的交互。 例如,如果您创建了一个从 Code Engine 绑定到 IBM Cloudant 服务实例的服务,并且您希望应用程序、作业或功能仅从 IBM Cloudant 数据库读取,请选择
Reader
角色。
从控制台将服务实例绑定到 Code Engine 应用程序或作业
您可以使用控制台创建服务绑定,将现有服务实例绑定到 Code Engine 应用程序或作业。 要为函数创建服务绑定,必须 使用 CLI。
使用新的服务访问私钥 (使用 Code Engine 自动生成的凭证) 绑定服务实例
让我们创建一个服务绑定,使用由 Code Engine 自动生成的服务凭证,通过新的服务访问密钥将服务实例绑定到应用程序或作业。 在此示例中,从控制台为 myapp
应用程序创建服务绑定,并选择为 Code Engine 自动创建服务凭据到 IBM Cloud 服务实例。 在 Code Engine 可以自动创建服务凭证之前,请确保 配置 Code Engine 的访问权以自动创建和管理服务绑定的服务标识。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 从“概述”页面中,单击 服务绑定。
- 在“服务绑定”页面中,单击 创建 以创建绑定。
- 选择要绑定到 Code Engine 应用程序或作业的 IBM 服务实例。
- 选择您要绑定到服务实例的 Code Engine 应用程序或工作;例如,选择
myapp
应用程序。 - 指定要与此绑定配合使用的服务访问私钥。 服务访问秘密存储了服务绑定的凭证。 请注意,任何先前为您的特定服务实例定义的服务凭证(与所选应用程序或工作无关)都会列出。 如果当前不存在服务访问私钥,那么您将创建新的私钥。 如果存在服务访问私钥,要使用此绑定的新服务凭证创建新的服务访问私钥,请选择 新建私钥。 请完成以下步骤。
- 选择服务实例凭证的 角色。
- 扩展高级选项。
- 对于 Code Engine,要自动为 IBM Cloud 服务实例创建服务凭证,请选择
Auto-generate
。 - (可选)为服务绑定指定自定义前缀。 如果未指定定制前缀,那么 Code Engine 会自动生成前缀。 前缀用于区分为此服务绑定创建的环境变量。
- 单击添加创建服务绑定。
- 现在,您可以通过控制台创建与应用程序或工作相关的服务绑定,然后从“服务绑定”页面查看服务实例与 Code Engine 应用程序和工作之间所有已定义的服务绑定列表。
或者,您也可以从控制台中的特定 Code Engine 应用程序或工作页面创建和管理特定应用程序和工作的服务绑定。 要在应用程序或工作环境中使用服务绑定,请转到特定应用程序或工作的服务绑定选项卡。
使用新的服务访问私钥 (使用现有凭证) 绑定服务实例
假设您想创建一个服务绑定,将服务实例绑定到使用现有服务凭证的新服务访问密钥的应用程序或作业。 现有服务凭证可能已由 Code Engine自动生成,或者服务凭证可能已手动生成。 对于此示例,请使用使用现有服务凭证的新服务访问私钥为 myjob
作业创建服务绑定。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 从“概述”页面中,单击 服务绑定。
- 在“服务绑定”页面中,单击 创建 以创建绑定。
- 选择要绑定到 Code Engine 应用程序或作业的 IBM 服务实例。
- 选择您要绑定到服务实例的 Code Engine 应用程序或工作;例如,选择
myjob
工作。 - 指定要与此绑定配合使用的服务访问私钥。 服务访问秘密存储了服务绑定的凭证。 请注意,任何先前为您的特定服务实例定义的服务凭证(与所选应用程序或工作无关)都会列出。 如果当前不存在服务访问私钥,那么您将创建新的私钥。 如果存在服务访问私钥,要使用此绑定的新服务凭证创建新的服务访问私钥,请选择 新建私钥。 请完成以下步骤。
- 选择服务实例凭证的 角色。
- 扩展高级选项。
- 选择要与此服务访问私钥配合使用的服务凭证。
- (可选)为服务绑定指定自定义前缀。 如果未指定定制前缀,那么 Code Engine 会自动生成前缀。 前缀用于区分为此服务绑定创建的环境变量。
- 单击添加创建服务绑定。
- 现在,您可以通过控制台创建与应用程序或工作相关的服务绑定,然后从“服务绑定”页面查看服务实例与 Code Engine 应用程序和工作之间所有已定义的服务绑定列表。
或者,您也可以从控制台中的特定 Code Engine 应用程序或工作页面创建和管理特定应用程序和工作的服务绑定。 要在应用程序或工作环境中使用服务绑定,请转到特定应用程序或工作的服务绑定选项卡。
使用现有服务访问私钥绑定服务实例
您可以在服务绑定中复用服务访问私钥。 对于特定的 IBM Cloud 服务实例,您可以使用不同的应用程序或作业来复用服务访问私钥。 您不能将服务访问密码用于最初创建该密码的同一应用程序或工作。 由于服务凭证存储在服务访问私钥中,因此请务必考虑以下几点:
-
您可以使用同一个服务访问密钥在同一个 IBM Cloud 服务实例中拥有多个应用程序或职位。
-
服务访问密码不能在同一个应用程序或作业的服务绑定中重复使用。 但是,您可以在不同的应用程序或工作中重复使用同一个服务访问密码。 由于服务访问密钥与特定的 IBM Cloud 服务实例相关联,因此如果您绑定到同一服务实例,则只能在不同的应用程序或作业中重复使用服务访问密钥。
让我们创建服务绑定,以将服务实例绑定到使用现有服务访问私钥的作业。 例如,为 myjob
作业创建服务绑定,并为特定服务实例选择现有服务访问私钥。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 从“概述”页面中,单击 服务绑定。
- 在“服务绑定”页面中,单击 创建 以创建绑定。
- 选择要绑定到 Code Engine 应用程序或作业的 IBM 服务实例。
- 选择要绑定到服务实例的 Code Engine 应用程序或作业。
- 您可以将现有凭据用于访问服务密钥,该服务与特定 IBM Cloud 服务实例绑定,用于不同的应用程序或工作。 对于此案例,请选择 现有私钥。 请注意,这里列出了您之前为特定服务实例定义的服务凭证,这些凭证与您所选的应用程序或工作无关。 请完成以下步骤。
- 查看现有私钥列表,并选择要与此服务绑定配合使用的私钥。
- (可选)为服务绑定指定自定义前缀。 如果未指定定制前缀,那么 Code Engine 会自动生成前缀。 前缀用于区分为此服务绑定创建的环境变量。
- 单击添加创建服务绑定。
- 现在,您可以通过控制台创建与应用程序或工作相关的服务绑定,然后从“服务绑定”页面查看服务实例与 Code Engine 应用程序和工作之间所有已定义的服务绑定列表。
或者,您也可以从控制台中的特定 Code Engine 应用程序或工作页面创建和管理特定应用程序和工作的服务绑定。 要在应用程序或工作环境中使用服务绑定,请转到特定应用程序或工作的服务绑定选项卡。
使用CLI将服务实例绑定到 Code Engine 应用程序、作业或功能
您可以使用 CLI 创建服务绑定,将现有服务实例绑定到 Code Engine 应用程序、作业或函数。
准备工作
-
设置 Code Engine CLI 环境。
-
创建要绑定到 Code Engine 工作负载的服务实例。
例如,要创建 IBM Cloud Object Storage 服务实例 (轻量套餐):
ibmcloud resource service-instance-create my-object-storage cloud-object-storage lite global -g Default
-
创建 Code Engine 工作负载。
使用新凭证绑定服务实例
- 要将您的新服务实例绑定到您的 Code Engine 应用程序并生成新的服务凭证,请使用
ibmcloud ce application bind
命令。 - 要将服务实例绑定到 Code Engine 作业,请使用
ibmcloud ce job bind
命令。 - 要将服务实例绑定到 Code Engine 函数,请使用
ibmcloud ce function bind
命令。
要创建一个用于这些步骤的应用程序,请运行以下命令。
ibmcloud ce application create --name my-application --image icr.io/codeengine/hello
-
确定您要绑定到应用程序、作业或函数的服务实例的名称。 您可以通过运行
ibmcloud resource service-instances
命令来查找当前资源组的帐户中的所有服务实例; 例如,ibmcloud resource service-instances
示例输出
Name Location State Type Resource Group ID my-object-storage global active service_instance 325d80be5d7945608f6d121712c96ee9
-
将您的服务实例绑定到您的 Code Engine 应用程序、作业或功能,并使用默认服务角色生成新的服务凭证。 缺省服务角色是“管理者”或服务提供的第一个角色 (如果 "管理者" 不受支持)。 在以下示例中,
application bind
命令将my-object-storage
服务实例与名为my-application
的应用程序绑定。 将为此绑定操作生成具有“管理者”角色的新服务凭证。ibmcloud ce application bind --name my-application --service-instance my-object-storage
下表概述了此示例中与
application bind
命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅ibmcloud ce application bind
命令。命令选项 选项 描述 --name
要绑定的应用程序名称。 此值是必需的。 --service-instance
指定要绑定到应用程序的现有服务实例的名称。 此值是必需的。 示例输出
Binding service instance... Status: Done Waiting for application revision to become ready... The Configuration is still working to reflect the latest desired specification. Traffic is not yet migrated to the latest revision. Ingress has not yet been reconciled. Waiting for load balancer to be ready. OK
-
使用
application get
,job get
或function get
命令验证是否生成了凭证。 在以下示例中,验证是否已创建先前示例中创建的凭证。ibmcloud ce application get --name my-application
示例输出
[...] Service Bindings: Name ID Service Instance Service Type Role / Credential Environment Variable Prefix my-application-app-ce-service-binding-abcde abcde5d3-dfc3-4f52-b133-b869b5eabcde my-object-storage cloud-object-storag Writer CLOUD_OBJECT_STORAGE [...]
使用特定角色绑定服务实例
- 要将您的新服务实例绑定到您的 Code Engine 应用程序并生成新的服务凭证,请使用
ibmcloud ce application bind
命令。 - 要将服务实例绑定到 Code Engine 作业,请使用
ibmcloud ce job bind
命令。 - 要将服务实例绑定到 Code Engine 函数,请使用
ibmcloud ce function bind
命令。
要创建用于这些步骤的函数,请运行以下命令。
ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-nodejs
-
确定您要绑定到应用程序、作业或函数的服务实例的名称。 您可以通过运行
ibmcloud resource service-instances
命令来查找当前资源组的帐户中的所有服务实例; 例如,ibmcloud resource service-instances
示例输出
Name Location State Type Resource Group ID my-object-storage global active service_instance 325d80be5d7945608f6d121712c96ee9
-
将您的服务实例绑定到您的 Code Engine 应用程序、作业或功能,并生成具有特定服务角色的新的服务凭证。 有关 IAM 服务角色的更多信息,请参阅 服务访问角色。 在以下示例中,
function bind
命令使用“写入者”服务角色将my-object-storage
服务实例绑定到名为my-function
的函数。 将为此绑定操作生成具有“写入者”角色的新服务凭证。 通过指定--prefix
选项,将向服务绑定创建的环境变量添加前缀。ibmcloud ce function bind --name my-function --service-instance my-object-storage --role Writer --prefix MYPREFIX
下表概述了此示例中与
function bind
命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅ibmcloud ce function bind
命令。命令选项 选项 描述 --name
要绑定的函数的名称。 此值是必需的。 --prefix
为服务绑定创建的环境变量的前缀。 例如, --prefix MYPREFIX
将MYPREFIX
前缀添加到为此服务绑定创建的任何环境变量。 有关更多信息,请参阅 前缀方法。--service-instance
指定要绑定到函数的现有服务实例的名称。 此值是必需的。 --role
为该服务绑定创建的新服务凭证的服务角色名称。 有效值包括 Reader
,Writer
,Manager
或特定于服务的角色。 如果未指定--role
选项,那么缺省值为Manager
或服务提供的第一个角色 (如果不支持Manager
)。 如果指定了--service-credential
,那么将忽略此选项。示例输出
Binding service instance... Status: Done OK
-
使用
application get
,job get
命令或function get
命令验证是否生成了凭证。 在以下示例中,验证是否已创建先前示例中创建的凭证。ibmcloud ce function get --name my-function
示例输出
[...] Service Bindings: Name ID Service Instance Service Type Role / Credential Environment Variable Prefix my-function-ce-service-binding-abcde abcde5d3-dfc3-4f52-b133-b869b5eabcde my-object-storage cloud-object-storage Writer MYPREFIX 30s [...]
使用现有凭证绑定服务实例
如果您已经为服务实例创建了凭证,并且想要将其用于服务绑定,请添加 --service-credentials
选项。
要创建要用于这些步骤的作业,请运行以下命令。
ibmcloud ce job create --name my-job --image icr.io/codeengine/hello
-
确定您要绑定到应用程序、作业或函数的服务实例的名称。 您可以通过运行
ibmcloud resource service-instances
命令来查找当前资源组的帐户中的所有服务实例; 例如,ibmcloud resource service-instances
示例输出
Name Location State Type Resource Group ID my-object-storage global active service_instance 325d80be5d7945608f6d121712c96ee9
-
查找服务实例的凭证。
ibmcloud resource service-keys --instance-name INSTANCENAME
示例输出
Name State Created At my-cos-credential active Tue Mar 2 01:15:33 UTC 2021
要查看服务凭证的详细信息,请运行
ibmcloud resource service-key KEYNAME
。 您可以通过运行ibmcloud resource service-keys
来查找资源组中的所有服务密钥。 -
使用现有凭据将服务实例绑定到应用程序、作业或功能。 例如,以下
job bind
命令将具有名为my-cos-credential
的现有服务凭证的my-object-storage
服务实例与名为myjob
的现有作业绑定。ibmcloud ce job bind --name myjob --service-instance my-object-storage --service-credential my-cos-credential
下表概述了此示例中与
job bind
命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅ibmcloud ce job bind
命令。命令选项 选项 描述 --name
要绑定的任务名称。 此值是必需的。 --service-instance
指定要绑定到作业的现有服务实例的名称。 此值是必需的。 --service-credential
要绑定的现有服务凭证的名称。 -
使用
application get
,job get
或function get
命令验证是否生成了凭证。 在以下示例中,验证是否已创建先前示例中创建的凭证。ibmcloud ce job get --name myjob
示例输出
[...] Service Bindings: Name ID Service Instance Service Type Role / Credential Environment Variable Prefix myjob-ce-service-binding-abcde abcde645-d3f9-407d-b964-6c3ae69abcde my-object-storage cloud-object-storage my-cos-credential CLOUD_OBJECT_STORAGE [...]
取消绑定服务实例
从应用程序、作业或功能工作负载中取消绑定服务实例,可删除现有的服务绑定。
当您取消绑定(或删除)服务绑定时,您正在删除应用程序、工作或功能工作负载与服务访问密钥的关联,因此工作负载不再能够访问之前绑定的 IBM Cloud 服务。
在应用程序与服务实例之间定义服务绑定后,只要应用程序和服务实例处于活动状态,服务绑定就处于活动状态,或者您尚未完成取消绑定操作以除去服务绑定。 如果删除了服务实例,那么您将需要手动删除服务绑定。
从控制台解除绑定服务实例
- 从 Code Engine "项目" 页面,转至您的项目。
- 在“概述”页面中,单击 服务绑定 以查看所有已定义服务绑定的列表。 或者,如果您想从应用程序或工作的上下文管理服务绑定,请从“概览”页面中点击 “应用程序” 或“工作”,然后点击您的应用程序或工作的名称。 从特定应用或工作页面,进入服务绑定> 选项卡。
- 从服务绑定列表中,删除您想要从应用程序或工作中移除的绑定。 单击 操作 图标
> 删除 以删除服务绑定。
使用 CLI 取消绑定服务实例
-
使用
application get
,job get
或function get
命令查找要除去的服务绑定; 例如,ibmcloud ce application get --name my-application
示例输出
[...] Service Bindings: Name ID Service Instance Service Type Role / Credential Environment Variable Prefix my-application-app-ce-service-binding-abcde abcde5d3-dfc3-4f52-b133-b869b5eabcde my-object-storage cloud-object-storage Writer CLOUD_OBJECT_STORAGE [...]
-
使用
application unbind
,job unbind
或function unbind
命令除去服务绑定。-
要除去单个绑定,请指定
--name
和--binding
选项。ibmcloud ce application unbind --name APPLICATION_NAME --binding BINDING_NAME
-
要取消所有服务实例的绑定,请使用
--all
选项。ibmcloud ce job unbind --name JOB_NAME --all
-