IBM Cloud Docs
サービス・バインディングを使用した IBM Cloud サービスと Code Engine の統合

サービス・バインディングを使用した IBM Cloud サービスと Code Engine の統合

サービス・バインディングを使用して、IBM Cloud プロジェクトのリソースに IBM Cloud® Code Engine のサービス・インスタンスを統合する方法について説明します。

サービス・バインディングは、 IBM Cloud サービスへのアプリケーション、ジョブ、および機能のアクセスを提供します。

CLI を使用してサービス・バインディングを処理しており、CLI 1.27.0より 前の バージョンの CLI で作成されたサービス・バインディングがある場合、以前の実装を使用するサービス・バインディングの置換について、 考慮事項 を参照してください。 CLIの最新機能強化を利用するには、 IBM Cloud Code Engine CLIの最新バージョン に更新してください。

IBM Cloud Code Engine サービス・バインディングとは何ですか?

サービスインスタンスを Code Engine アプリケーションまたはジョブにバインドすると、サービスインスタンスの認証情報が、アプリケーションまたはジョブのコンテナの環境変数、またはFunctionのコードバンドルに自動的に追加されます。 サービス資格情報の内容を確認するには、サービス・インスタンスのダッシュボードに移動し、**「サービス資格情報」**ページを見つけます。 バインドしたときにアプリケーションまたはジョブの環境に追加されたサービス資格情報が、JSON オブジェクトとして表示されます。

{
    "apikey": "xxxxxxx",
    "endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints",
    "iam_apikey_description": "Auto-generated for key abcdabcd-abcd-4d8c-78cf-abcdabcdabcd",
    "iam_apikey_name": "my-object-storage-codeengine-credential",
    "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
    "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/1176a104ad4241e6b0aa82ed0b60c15c::serviceid:ServiceId-abcdabcd-7ae8-abcd-a219-abcdabcdabcd",
    "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/1176a104ac4241e6b0cb82ed0b60c15c:abcdabcd-abcd-4777-abcd-d330a450c85b::"
}

Code Engine のワークロードにサービスインスタンスをバインドするには、まずそのサービスのインスタンスを用意する必要があります。 次に、 Code Engine コンソールまたは CLI を使用して、アプリ、ジョブ、または機能を IBM Cloud サービス・インスタンスにバインドします。

サービス・インスタンスを Code Engine ワークロードにバインドすると、 Code Engine は サービス・アクセス・シークレット を使用して、指定された IBM Cloud の資格情報を保管します。 このタイプのシークレットは、 IBM Cloud サービス・インスタンスを特定の Code Engine アプリ、ジョブ、または関数に接続するサービス・バインディングの主要なメカニズムです。 Code Engine は、このシークレットを作成して管理します。

どのようなタイプのサービスをバインドできますか?
IBM Cloud Identity and Access Management (IAM) に対して有効になっており、サービス資格情報を使用する任意のタイプの IBM Cloud サービスをアプリケーション、ジョブ、または機能のワークロードに追加できます。 サポートされている IBM Cloud サービスのリストについては、IBM Cloud のカタログを参照してください。
IBM Cloudサービス・インスタンスのサービス資格情報を既に持っています。 これらの資格情報をCode Engineサービス・バインディングで使用できますか?
はい、既存のサービス認証情報を使用して、サービスインスタンスを Code Engine のワークロードにバインドすることができます。 コンソールから、サービス・バインディングで既に使用されている既存の資格情報を使用できます。 CLI から既存のサービス資格情報を使用するには、 ibmcloud ce application bindibmcloud ce job bind、または ibmcloud ce function bind コマンドで --service-credential オプションを指定し、サービス資格情報の名前を指定します。
サービス・バインディングを作成するにはどのようなアクセス権限が必要ですか?
Code Engine プロジェクトは、 IAMアクセスポリシー のセットで構成する必要があります。これにより、 Code Engine サービスバインディングが、お客様のアカウント内のサービスインスタンスの表示や、サービス認証の表示および作成を行うことが許可されます。 IAM ポリシーは、サービス ID によって Code Engine サービス・バインディングに提供されます。 詳しくは、 サービス・バインディングのアクセスの構成 を参照してください。
プロジェクト内のすべてのユーザーのサービス・バインディング操作を構成する方法はありますか?
はい。 十分な許可があれば、コンソールの「統合」ページを使用して、単一ページからサービス・バインディング操作を構成できます。 これらのアクションを実行するための十分な権限がない場合は、このページを使用して、必要な権限を理解することができます。 プロジェクト全体の設定の構成 を参照してください。
Code Engine ワークロードをサービス・インスタンスにバインドした後、このサービス・バインディングの存続期間はどの程度ですか?
Code Engine ワークロードとサービス・インスタンスの間にバインディングを作成すると、 Code Engine ワークロードとサービス・インスタンスがアクティブである限り、サービス・バインディングはアクティブになります。それ以外の場合は、アンバインド操作が完了していません。 サービス・インスタンスが削除された場合は、サービス・バインディングを手動で削除する必要があります。 サービス・バインディングをアンバインド (または削除) すると、アプリ、ジョブ、または機能とサービス・アクセス・シークレットとの関連付けが削除され、アプリ、ジョブ、または機能は以前にバインドされた IBM Cloud サービスにアクセスできなくなります。

Code Engine ワークロードからバインドされたサービス・インスタンスにアクセスする

Code Engine は、 CE_SERVICES メソッドと PREFIX メソッドの両方を使用して Code Engine ワークロードにバインドされたサービス・インスタンスにアクセスするための環境変数を提供します。

  • CE_SERVICES 環境変数は、すべてのサービス・バインディング情報を JSON オブジェクトとして含む単一の環境変数です。

  • Code Engine も、サービス・インスタンスのサービス資格情報の変数に基づいて、サービス・バインディングの複数の環境変数を作成します。 サービス・バインディングのこれらの複数の環境変数を区別するために、これらの環境変数が同じ接頭部を使用するように PREFIX を使用できます。 カスタム接頭部を指定しない場合、 Code Engine は自動的に接頭部を生成します。

プライベートネットワークを使用してバインドされたサービスと通信したいアプリケーション、ジョブ、または機能があり、そのサービスが privatedirect の両方のエンドポイント( IBM Cloud Object Storage など)を持っている場合、 direct のエンドポイントを使用する必要があります。

CE_SERVICES環境変数

CE_SERVICES 環境変数には、サービス・インスタンスと対話するために使用できる情報が格納されます。 この環境変数は、キー/値のペアを格納した JSON オブジェクトを指しています。 これらのキー値のペアは、アプリケーション、ジョブ、または関数にバインドされた各サービスのタイプを表します。 keyは、サービス・タイプの名前 (cloud-object-storage など) です。valueは、バインドされているそのタイプのサービス・インスタンスの資格情報の配列です。

次の例は、 CE_SERVICES 変数を示しています。

{
  "appid": [
    {
      "credentials": {
        "apikey": "xxxxxx",
        "appidServiceEndpoint": "https://us-south.appid.cloud.ibm.com",
        "clientId": "abcdabcd-xxxxxxxx",
        "discoveryEndpoint": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxxxx/.well-known/openid-configuration",
        "iam_apikey_description": "Auto-generated for key crn:v1:bluemix:public:appid:us-south:a/abcdabcd719f45b98a931f6e20db1bd8:xxxxxxxx:resource-key:abcdabcd-xxxxxxxx",
        "iam_apikey_name": "ce-service-access-abcd",
        "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
        "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/abcdabcd719f45b98a931f6e20db1bd8::serviceid:ServiceId-6d7087e5-0611-4240-9e46-af8a4c15cba4",
        "managementUrl": "https://us-south.appid.cloud.ibm.com/management/v4/xxxxxxxx",
        "oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxxxx",
        "profilesUrl": "https://us-south.appid.cloud.ibm.com",
        "secret": "abcdabcdYTAtZmU0MC00YTQ1LTliY2YtMDk0ODg0NDMyNDgw",
        "tenantId": "xxxxxxxx",
        "version": 4
      },
      "name": "App ID-yn",
      "plan": "c0258a22-160a-403b-845d-1588ad61204c",
      "resourcekey_name": "ce-service-access-abcd",
      "resourcekey_id": "abcdabcd-xxxxxxxx"
    }
  ],
  "cloud-object-storage": [
    {
      "credentials": {
        "apikey": "xxxxxx",
        "endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints",
        "iam_apikey_description": "Auto-generated for key crn:v1:bluemix:public:cloud-object-storage:global:a/abcdabcd719f45b98a931f6e20db1bd8:abcdabcd-34b3-4edf-95b7-abcdabcdabcd:resource-key:abcdabcd-96e0-46ef-b805-31288524f194",
        "iam_apikey_name": "ce-service-access-c5yn1",
        "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
        "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/abcdabcd719f45b98a931f6e20db1bd8::serviceid:ServiceId-ee6394cb-f203-4c3c-9152-ac886a3f66bb",
        "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/abcdabcd719f45b98a931f6e20db1bd8:abcdabcd-34b3-4edf-95b7-abcdabcdabcd::"
      },
      "name": "Cloud Object Storage-56",
      "plan": "2fdf0c08-2d32-4f46-84b5-32e0c92fffd8",
      "resourcekey_name": "ce-service-access-c5yn1",
      "resourcekey_id": "abcdabcd-96e0-46ef-b805-31288524f194"
    }
  ]
}

接頭部方式

接頭部方式では、サービスの資格情報オブジェクトに含まれている資格情報変数ごとに、下線で区切られた大文字で構成される共通の環境変数構文 (VARIABLE_NAME など) を使用して、変数が個々に環境に提供されます。

デフォルトでは、変数名は、サービスの名前に資格情報変数の名前が付いたものになります。 例えば、 apikey という名前の IBM Cloud Object Storage サービス認証変数は、 CLOUD_OBJECT_STORAGE_APIKEY という環境変数で利用可能です。 以下の例は、IBM Cloud Object Storage のサービス・インスタンス・バインディングで作成された環境変数を示しています。

CLOUD_OBJECT_STORAGE_APIKEY=xxxxxx
CLOUD_OBJECT_STORAGE_ENDPOINTS=https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
CLOUD_OBJECT_STORAGE_IAM_APIKEY_DESCRIPTION=Auto-generated for key abcdabcd-abcd-abcd-abcd-abcdabcdabcd
CLOUD_OBJECT_STORAGE_IAM_APIKEY_NAME=my-object-storage-codeengine-credential
CLOUD_OBJECT_STORAGE_IAM_ROLE_CRN=crn:v1:bluemix:public:iam::::serviceRole:Manager
CLOUD_OBJECT_STORAGE_IAM_SERVICEID_CRN=crn:v1:bluemix:public:iam-identity::a/1176a104ad4441e6b0aa92ed0b60b15c::serviceid:ServiceId-abcdabcd-abcd-abcd-8b41-531fc64e640e
CLOUD_OBJECT_STORAGE_RESOURCE_INSTANCE_ID=crn:v1:bluemix:public:cloud-object-storage:global:a/1176a104ad4441e6b0aa92ed0b60b15c:11179ac4-abcd-4887-abcd-d330a430abcd::
CLOUD_OBJECT_STORAGE_SERVICENAME=my-object-storage

デフォルトでは、同じタイプの複数のインスタンスを 1 つのアプリケーションにバインドすると、Code Engine が、CLOUD_OBJECT_STORAGE_2_APIKEY のように、サービス名にインデックスを追加します。

各サービス・バインディングは、カスタム環境変数接頭部を使用するように構成できます。 コンソールを使用している場合は、サービス・バインディングの作成時にオプションで接頭部を指定できます。 CLI を使用する場合は、 app bindjob bind、または function bind コマンドで --prefix オプションを使用します。

前の実装を使用するサービス・バインディングがある場合は、何を考慮する必要がありますか?

CLI 1.27.0 では、改善されたサービス・バインディング実装が導入されました。これは、このバージョン以降で作成されたすべてのバインディングに使用されます。 CLI 1.27.0 より前のバージョンの CLIで作成されたサービス・バインディングは、以前のサービス・バインディング実装を使用しています。 以前の実装を使用するサービスバインディングを持つアプリケーション、ジョブ、および機能は、バインドされたサービスへのアクセスに関して、引き続き正常に機能します。 ただし、以前の実装を使用するサービス・バインディングを変更する場合は、以下の情報を考慮してください。

  • 同じアプリケーション、ジョブ、または機能に対して、以前の実装と改善された実装サービスのバインディングを混在させることはできません。 以前のインプリメンテーションを使用するサービスバインディングを持つアプリ、ジョブ、または関数に新しいサービスバインディングを追加する前に、これらのサービスバインディングをすべて解除する必要があります。 その後、改善された実装でそれらを再作成し、新しいサービス・バインディングを追加することができます。
  • これらのサービス・バインディングを個別にアンバインドすることはできません。 これらをすべて削除するには、**app unbind --allコマンドまたはjob unbind --all**コマンドを使用する必要があります。
  • 関数ワークロードを処理する場合、関数はサービス・バインディングの最新の実装を自動的に使用します。

最新の機能拡張を利用し、アプリおよびジョブのサービス・バインディングを引き続き簡単に管理するには、最新の IBM Cloud Code Engine CLI バージョンおよび以前の実装を使用するサービス・バインディングの置換に更新します。

以前の実装を使用するサービス・バインディングを置き換えるにはどうすればよいでしょうか?

アプリケーションまたはジョブに以前のインプリメンテーションを使用するサービスバインディングがあり、アプリケーションまたはジョブに新しいサービスバインディングを追加したい場合は、新しいバインディングを作成する前に、まず以前のインプリメンテーションを使用するバインディングを削除する必要があります。 必要に応じて、これらの既存のサービス・バインディングを再作成できます。

アンバインドおよび再バインドの処理中に、アプリケーションが完全に機能していない可能性があります。

  1. アプリケーションまたはジョブが以前のサービスバインディング実装を使用しているかどうかを確認するには、 app get または job get コマンドを実行してください。 以前のサービスバインド実装を使用している場合、このコマンドの出力から、別のサービスをアプリケーションまたはジョブにバインドするために使用すべきコマンドに関する情報が得られます。 以下に例を示します。

    ibmcloud ce app get --name myapp
    

    出力例

    Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances.
    Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances.
    OK
    
    This application uses a previous service binding implementation.
    Your application will continue to function normally.
    To bind an additional service to this application, delete and re-create those service bindings with the improved implementation.
    Your application might not be fully functional during the process of unbinding and rebinding.
    Re-create the existing service bindings by issuing the following commands:
    (1) Remove all existing service bindings from this application.
    ibmcloud ce application unbind --name myapp -all
    (2) Bind the services again.
    ibmcloud ce application bind --name myapp --service-instance myobjectstorage --prefix CLOUD_OBJECT_STORAGE
    
    Name:               myapp
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    Project ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Age:                2m4s
    Created:            2021-09-09T14:01:02-04:00
    URL:                https://myapp.abcdabcdabc.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.abcdabcdabc.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:     Application deployed successfully
    [...]
    Service Bindings:
    Service Instance    Service Type           Environment Variable Prefix
    myobjectstorage     cloud-object-storage   CLOUD_OBJECT_STORAGE
    

    同様に、ジョブを操作している場合は、ibmcloud ce job get --name JOB_NAMEコマンドを実行して、非推奨のバインディングがジョブで使用されているかどうかを検出します。

  2. 前の実装を使用する既存のサービス・バインディングをアンバインドします。 --allオプションは、このアプリケーションのすべてのサービス・インスタンスをアンバインドすることを指定します。

    ibmcloud ce app unbind --name APP_NAME --all
    

    同様に、ジョブを処理している場合は、ibmcloud ce job unbind --name JOB_NAME --allコマンドを実行して、ジョブのすべてのサービス・インスタンスをアンバインドします。

  3. 新規バインディングを作成します。 新規バインディングを作成するには、ibmcloud ce app bindまたはibmcloud ce job bindコマンドを実行します。 以前の実装を使用していたサービス・バインディングを置き換えるには、app getコマンドまたはjob getコマンドの出力で提供されているコマンドを使用します。 例えば、Code Engineアプリケーション myappからIBM Cloud Object Storageサービス・インスタンスmyobjectstorageへの既存のバインディングを再作成するには、以下のようにします。

    ibmcloud ce app bind --name myapp --service-instance myobjectstorage --prefix CLOUD_OBJECT_STORAGE
    

    同様に、ジョブを処理する場合は、ibmcloud ce job bind --name JOB_NAME ---service-instance SERVICE_INSTANCE --prefix PREFIXコマンドを実行します。

    再作成するバインディングごとに、このステップを繰り返します。

  4. (オプション) **app getコマンドまたはjob get**コマンドを再度実行します。 今回は、コマンドの出力に、以前の実装でのサービス・バインディングに関する情報が表示されないことに注意してください。 以下に例を示します。

    ibmcloud ce app get --name myapp
    

    出力例

    Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances.
    Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances.
    OK
    
    Name:               myapp
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    Project ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Age:                2m4s
    Created:            2021-09-09T14:01:02-04:00
    URL:                https://myapp.abcdabcdabc.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.abcdabcdabc.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:     Application deployed successfully
    [...]
    
    Service Bindings:
    Name                                         ID                                    Service Instance      Service Type          Role / Credential  Environment Variable Prefix
    myapp-app-ce-service-binding-abcde          abcde5d3-dfc3-4f52-b133-b869b5eabcde   my-object-storage    cloud-object-storage   Writer             CLOUD_OBJECT_STORAGE
    

次のステップ

サービス・インスタンスを Code Engine アプリ、ジョブ、または関数ワークロードにバインドする前に、バインディングのアクセス権限を構成する必要があります。 サービス・バインディングのアクセスの構成 を参照してください。