サービスインスタンスをアプリケーション、ジョブ、またはファンクションのワークロードにバインドする
サービスバインディングを使用して、 IBM Cloud サービスインスタンスを IBM Cloud® Code Engine プロジェクトのリソースに統合できます。
Code Engine ワークロードにバインドするサービスインスタンスを決定し、 サービスバインディングのためのアクセスを 確実に構成したら、 Code Engine アプリケーション、ジョブ、またはファンクションワークロードにサービスインスタンスをバインドする準備が整いました。
開始前に
- プロジェクトを作成します。
- Code Engine ワークロードを作成し、サービスインスタンスにバインドする。 サービスインスタンスにバインドするワークロードが存在しなければならない。
- Code Engine ワークロードにバインドしたいサービスインスタンスを作成します。
- サービスバインディングのアクセスを設定する。
サービスインスタンスを Code Engine アプリケーション、ジョブ、またはファンクションのワークロードにバインドする前に、サービスバインディングのアクセスを構成する必要があります。 Code Engine、サービスIDを自動的に作成して管理するか、または管理するサービスIDを使用するかに基づいて、 サービスバインディングのアクセスを設定 します。
- サービスバインディングを扱う場合、サービスID、サービスアクセスシークレット、サービスクレデンシャルの間にはどのような関係がありますか?
-
Code Engine において、 サービスバインディングとは、アプリケーション、ジョブ、または機能ワークロードと、別の IBM Cloud サービスとの間の関係である。 Code Engine は、特定の IBM Cloud サービスインスタンス用のクレデンシャルを作成するために、 サービス ID を使用する。 これらのクレデンシャルはサービス・クレデンシャルであり、 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を自動的に作成し、管理するようにアクセスを設定して ください。
- プロジェクトのステータスが「 アクティブ 」になったら、 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 のアプリケーション、ジョブ、または関数にバインドし、デフォルトのサービスロールを持つ新しいサービス認証情報を生成します。 デフォルトのサービス役割は Manager です。Manager がサポートされない場合には、サービスから最初に指定された役割になります。 次の例では、
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-codebundle-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コマンドは、Writerサービスロールを使用して、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 プロジェクトページ から、自分のプロジェクトに移動します。
- 概要]ページで[ サービスバインディング]をクリックすると、定義されているすべてのサービスバインディングの一覧が表示されます。 または、アプリケーションやジョブのコンテキストからサービスバインディングを管理したい場合は、Overviewページから Applications または Jobsをクリックし、アプリケーション名またはジョブ名をクリックします。 特定のアプリケーションまたはジョブページから、 サービスバインディング> タブに移動します。
- サービスバインディングの一覧から、アプリケーションまたはジョブから削除したいバインディングを削除します。 Actions アイコン
Actions > Deleteをクリックして、サービスバインディングを削除します。
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`オプションを使用します。 ```txt {: pre} ibmcloud ce job unbind --name JOB_NAME --all ``` - 単一のバインディングを削除するには、