将服务实例与应用程序、工作或功能工作量绑定

您可以使用服务绑定将 IBM Cloud 服务实例集成到 IBM Cloud® Code Engine 项目的资源中。

确定要绑定到 Code Engine 工作负载的服务实例,并确保已配置 服务绑定的访问权限 后,就可以将服务实例绑定到 Code Engine 应用程序、作业或功能工作负载。

准备工作

在将服务实例绑定到 Code Engine 应用程序、作业或功能工作负载之前,必须配置服务绑定的访问权限。 根据您是希望 Code Engine 自动为您创建和管理服务 ID,还是希望使用由您管理的服务 ID,来配置服务绑定的访问权限

在处理服务绑定时,服务 ID、服务访问机密和服务凭证之间有什么关系?

在 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 配置访问权限,以便自动创建和管理服务绑定的服务 ID

  1. 项目处于激活状态后,单击 Code Engine 项目页面上的项目名称。
  2. 从“概览”页面,单击“服务绑定”。
  3. 在“服务绑定”页面,单击“创建”创建绑定。
  4. 选择您要将其与 Code Engine 应用程序或作业进行绑定的 IBM 服务实例。
  5. 选择要绑定到服务实例的 Code Engine 应用程序或作业;例如,选择 myapp 应用程序。
  6. 指定与此绑定一起使用的服务访问秘密。 服务访问密钥用于存储服务绑定所需的凭据。 请注意,您特定服务实例的任何先前定义的服务凭据都已列出,这些凭据与您选择的应用程序或工作无关。 如果当前不存在服务访问秘密,则您要创建一个新秘密。 如果确实存在服务访问密文,要为此绑定创建带有新服务凭证的新服务访问密文,请选择新密文。 请完成以下步骤。
    1. 选择服务实例凭证的角色
    2. 展开 “高级选项”
    3. 要让 Code Engine 自动创建 IBM Cloud 服务实例的服务凭证,请选择 Auto-generate
    4. (可选)为服务绑定指定一个自定义前缀。 如果不指定自定义前缀,Code Engine 会自动生成一个前缀。 前缀用于区分为该服务绑定创建的环境变量。
  7. 单击 “添加” 以创建服务绑定。
  8. 既然已从控制台创建了与应用程序或作业的服务绑定,就可以从服务绑定页面查看服务实例与 Code Engine 应用程序和作业之间所有已定义服务绑定的列表。

此外,还可以从控制台中的特定 Code Engine 应用程序或作业页面创建和管理与特定应用程序和作业的服务绑定。 要在应用程序或工作的上下文中使用服务绑定,请转到特定应用程序或工作的“服务绑定”选项卡。

将服务实例与新的服务访问密钥(与现有凭证)绑定

假设您想创建一个服务绑定,将服务实例与使用现有服务凭证的新服务访问秘密绑定到应用程序或作业。 现有服务凭据可能是由 Code Engine 自动生成的,也可能是手动生成的。 在此示例中,为 myjob 作业创建服务绑定,并使用现有服务凭据创建新的服务访问密 码。

  1. 项目处于激活状态后,单击 Code Engine 项目页面上的项目名称。
  2. 从“概览”页面,单击“服务绑定”。
  3. 在“服务绑定”页面,单击“创建”创建绑定。
  4. 选择您要将其与 Code Engine 应用程序或作业进行绑定的 IBM 服务实例。
  5. 选择要绑定到服务实例的 Code Engine 应用程序或作业;例如,选择 myjob 作业。
  6. 指定与此绑定一起使用的服务访问秘密。 服务访问密钥用于存储服务绑定所需的凭据。 请注意,您特定服务实例的任何先前定义的服务凭据都已列出,这些凭据与您选择的应用程序或工作无关。 如果当前不存在服务访问秘密,则您要创建一个新秘密。 如果确实存在服务访问密文,要为此绑定创建带有新服务凭证的新服务访问密文,请选择新密文。 请完成以下步骤。
    1. 选择服务实例凭证的角色
    2. 展开 “高级选项”
    3. 选择要与此服务访问秘密一起使用的服务凭证。
    4. (可选)为服务绑定指定一个自定义前缀。 如果不指定自定义前缀,Code Engine 会自动生成一个前缀。 前缀用于区分为该服务绑定创建的环境变量。
  7. 单击 “添加” 以创建服务绑定。
  8. 既然已从控制台创建了与应用程序或作业的服务绑定,就可以从服务绑定页面查看服务实例与 Code Engine 应用程序和作业之间所有已定义服务绑定的列表。

此外,还可以从控制台中的特定 Code Engine 应用程序或作业页面创建和管理与特定应用程序和作业的服务绑定。 要在应用程序或工作的上下文中使用服务绑定,请转到特定应用程序或工作的“服务绑定”选项卡。

将服务实例与现有服务访问秘密绑定

您可以在服务绑定中重复使用服务访问秘密。 对于特定的 IBM Cloud 服务实例,您可以在不同的应用程序或作业中重复使用服务访问秘密。 不能在与服务访问密 码最初创建的应用程序或任务相同的应用程序或任务中重复使用服务访问密 码。 由于服务凭据存储在服务访问密文中,因此必须考虑以下几点:

  • 您可以将多个应用程序或任务绑定到同一个 IBM Cloud 服务实例,并使用相同的服务访问密钥。

  • 服务访问秘密不能在同一应用程序或任务的服务绑定中重复使用。 不过,您可以在不同的应用程序或任务中重复使用相同的服务访问秘密。 由于服务访问密钥与特定的 IBM Cloud 服务实例相关联,因此如果绑定到相同的服务实例,只能在不同的应用程序或任务中重复使用服务访问密钥。

让我们创建一个服务绑定,将服务实例绑定到使用现有服务访问秘密的作业。 例如,为 myjob 作业创建服务绑定,并为特定服务实例选择现有的服务访问密 码。

  1. 项目处于激活状态后,单击 Code Engine 项目页面上的项目名称。
  2. 从“概览”页面,单击“服务绑定”。
  3. 在“服务绑定”页面,单击“创建”创建绑定。
  4. 选择您要将其与 Code Engine 应用程序或作业进行绑定的 IBM 服务实例。
  5. 选择要与该服务实例进行绑定的 Code Engine 应用程序或作业。
  6. 您可以重复使用服务访问密钥的现有凭证,以便将服务绑定到具有不同应用程序或任务的特定 IBM Cloud 服务实例。 在这种情况下,请选择“现有秘密”。 请注意,您特定服务实例的任何先前定义的服务凭据都已列出,而这些凭据与您选择的应用程序或工作无关。 请完成以下步骤。
    1. 查看现有秘密列表,选择要与此服务绑定一起使用的秘密。
    2. (可选)为服务绑定指定一个自定义前缀。 如果不指定自定义前缀,Code Engine 会自动生成一个前缀。 前缀用于区分为该服务绑定创建的环境变量。
  7. 单击 “添加” 以创建服务绑定。
  8. 既然已从控制台创建了与应用程序或作业的服务绑定,就可以从服务绑定页面查看服务实例与 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 工作量。

用新凭证绑定服务实例

要创建用于这些步骤的应用程序,请运行以下命令。

ibmcloud ce application create --name my-application --image icr.io/codeengine/hello
  1. 确定要绑定到应用程序、任务或功能的服务实例名称。 您可以通过运行 ibmcloud resource service-instances 命令,例如

    ibmcloud resource service-instances
    

    示例输出

    Name                               Location   State    Type               Resource Group ID
    my-object-storage                  global     active   service_instance   325d80be5d7945608f6d121712c96ee9
    
  2. 将服务实例绑定到 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
    
  3. 通过使用 application getjob getfunction 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
    [...]
    

将服务实例与特定角色绑定

要创建用于这些步骤的函数,请运行以下命令。

ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs
  1. 确定要绑定到应用程序、任务或功能的服务实例名称。 您可以通过运行 ibmcloud resource service-instances 命令,例如

    ibmcloud resource service-instances
    

    示例输出

    Name                               Location   State    Type               Resource Group ID
    my-object-storage                  global     active   service_instance   325d80be5d7945608f6d121712c96ee9
    
  2. 将服务实例绑定到 Code Engine 应用程序、任务或功能,并生成具有特定服务角色的新服务凭证。 有关 IAM 服务角色的更多信息,请参阅 服务访问角色。 在下面的示例中,function bind 命令通过使用 Writer 服务角色将 my-object-storage 服务实例绑定到名为 my-function 的函数。 为该绑定操作生成一个具有 Writer 角色的新服务证书。 通过指定 --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 MYPREFIXMYPREFIX 前缀添加到为该服务绑定创建的任何环境变量中。 更多信息,请参阅 前缀方法
    --service-instance 指定要绑定到函数的现有服务实例的名称。 此值是必需的。
    --role 为该服务绑定创建的新服务凭据所对应的服务角色的名称。 有效值包括 ReaderWriterManager,或特定于某项服务的角色。 如果未指定 --role 选项,则默认为 Manager ;如果不支持 Manager,则默认为服务提供的第一个角色。 如果指定了 --service-credential,该选项将被忽略。

    示例输出

    Binding service instance...
    Status: Done
    OK
    
  3. 通过使用 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
  1. 确定要绑定到应用程序、任务或功能的服务实例名称。 您可以通过运行 ibmcloud resource service-instances 命令,例如

    ibmcloud resource service-instances
    

    示例输出

    Name                               Location   State    Type               Resource Group ID
    my-object-storage                  global     active   service_instance   325d80be5d7945608f6d121712c96ee9
    
  2. 查找服务实例的证书。

    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 可以找到资源组中的所有服务密钥。

  3. 使用现有凭证将服务实例绑定到应用程序、任务或功能。 例如,以下 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 要绑定的现有服务证书的名称。
  4. 通过使用 application getjob getfunction 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 服务。

在应用程序和服务实例之间定义服务绑定后,只要应用程序和服务实例处于活动状态,或者您还没有完成解除绑定操作来移除服务绑定,服务绑定就会处于活动状态。 如果删除了服务实例,则需要手动删除服务绑定。

从控制台解除服务实例的绑定

  1. Code Engine 项目页面,转到您的项目。
  2. 从“概览”页面,单击“服务绑定”查看所有已定义服务绑定的列表。 或者,如果要在应用程序或作业的上下文中管理服务绑定,可在“概览”页面中单击“应用程序”或“作业”,然后单击应用程序或作业的名称。 从特定应用程序或任务页面,转到服务绑定 > 选项卡。
  3. 从服务绑定列表中,删除要从应用程序或任务中移除的绑定。 单击操作图标操作 > 删除删除服务绑定。

使用 CLI 解除绑定服务实例

  1. 使用 application get, job getfunction 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
    [...]
    
  2. 使用 application unbind, job unbindfunction unbind 命令删除服务绑定。

    • 要删除单个绑定,请指定 --name--binding 选项。
        ibmcloud ce application unbind --name APPLICATION_NAME --binding BINDING_NAME
        ```
    * 要解除所有服务实例的绑定,请使用 `--all` 选项。
    
    ```txt {: pre}
        ibmcloud ce job unbind --name JOB_NAME --all
        ```