Gestione dei bind del servizio per integrare i servizi IBM Cloud con Code Engine

Scopri come integrare un'istanza del servizio " IBM Cloud " con le risorse di un progetto " IBM Cloud® Code Engine " utilizzando il binding del servizio.

I bind del servizio forniscono alle applicazioni, ai lavori e alle funzioni l'accesso ai servizi IBM Cloud.

Se si utilizza la CLI per gestire i binding di servizio e si dispone di binding di servizio creati con una versione della CLI precedente alla 1.27.0, consultare la sezione "Considerazioni" per informazioni sulla sostituzione dei binding di servizio che utilizzano l'implementazione precedente. Per usufruire delle ultime migliorie apportate alla CLI, esegui l'aggiornamento all'ultima versione della CLI di IBM Cloud Code Engine.

Che cos’è un binding di servizi IBM Cloud Code Engine?

Il bind di un'istanza del servizio a un'applicazione o a un lavoro Code Engine aggiunge automaticamente le credenziali per un'istanza del servizio alle variabili di ambiente del contenitore per la tua applicazione o il lavoro o il bundle di codici della tua funzione. Per vedere il contenuto di una credenziale del servizio, vai al dashboard dell'istanza del servizio e individua la pagina Credenziali del servizio. Le credenziali del servizio vengono mostrate come un oggetto JSON, che, quando associato, viene aggiunto all'applicazione o all'ambiente di lavoro.

{
    "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::"
}

Per associare un'istanza del servizio al proprio carico di lavoro Code Engine, è necessario prima configurare un'istanza del servizio. Utilizza quindi la console Code Engine o la CLI per eseguire il bind della tua applicazione, lavoro o funzione alla tua istanza del servizio IBM Cloud.

Quando esegui il bind di un'istanza del servizio a un carico di lavoro Code Engine, Code Engine utilizza un segreto di accesso del servizio per memorizzare la credenziale dell'istanza del servizio IBM Cloud specificata. Questo tipo di segreto è il meccanismo chiave in un bind del servizio che collega l'istanza del servizio IBM Cloud a una particolare applicazione, lavoro o funzione Code Engine. Code Engine crea e gestisce questo segreto per te.

Quali tipi di servizi posso collegare?
Puoi aggiungere qualsiasi servizio IBM Cloud abilitato per IBM Cloud Identity and Access Management (IAM) e che utilizza le credenziali del servizio per la tua applicazione, il tuo lavoro o il tuo carico di lavoro della funzione. Per trovare un elenco dei servizi IBM Cloud supportati, vedi il catalogo IBM Cloud.
Ho già le credenziali del servizio per una istanza del servizio IBM Cloud. Posso utilizzare queste credenziali con i bind del servizio Code Engine ?
Sì, puoi eseguire il bind di una istanza del servizio ai carichi di lavoro Code Engine utilizzando le credenziali del servizio esistenti. Dalla console, puoi usare le credenziali esistenti già utilizzate in un bind del servizio. Per utilizzare le credenziali del servizio esistenti dalla CLI, specifica l'opzione --service-credential nel comando ibmcloud ce application bind, ibmcloud ce job bind o nel comando ibmcloud ce function bind e fornisci il nome delle credenziali del servizio.
Quale accesso è richiesto per creare i bind del servizio?
Ogni progetto Code Engine deve essere configurato con una serie di Politiche di accesso IAM, che autorizza i bind del servizio Code Engine a visualizzare le istanze del servizio e a visualizzare e creare le credenziali del servizio nel tuo account. Le politiche IAM vengono fornite al bind del servizio Code Engine con un ID servizio. Per ulteriori informazioni, consultare Configurazione dell'accesso per i bind del servizio.
Esiste un modo per configurare le operazioni di bind del servizio per tutti gli utenti in un progetto?
Sì. Con autorizzazioni sufficienti, è possibile utilizzare la pagina Integrazione nella console per configurare le operazioni di bind del servizio da una singola pagina. Se non si dispone di autorizzazioni sufficienti per eseguire queste azioni, è possibile utilizzare questa pagina per comprendere le autorizzazioni richieste. Consultare Configurazione delle impostazioni a livello di progetto.
Dopo il bind del mio carico di lavoro Code Engine a una istanza del servizio, qual è la durata di questo bind del servizio?
Quando crei un bind tra il tuo carico di lavoro Code Engine e un'istanza del servizio, il bind del servizio è attivo finché il carico di lavoro Code Engine e l'istanza del servizio è attiva oppure non hai completato un'operazione di annullamento del bind per rimuovere il bind del servizio. Se l'istanza del servizio viene eliminata, sarà necessario eliminare manualmente il bind del servizio. Quando si annulla il bind (o si rimuove) un bind del servizio, si elimina l'associazione dell'applicazione, del lavoro o della funzione con il segreto di accesso del servizio in modo che l'app, il lavoro o la funzione non abbia più accesso al servizio IBM Cloud precedentemente associato.

Accesso a un'istanza del servizio di cui è stato eseguito il bind da un carico di lavoro Code Engine

Code Engine fornisce le variabili di ambiente per accedere alle istanze del servizio associate al tuo carico di lavoro Code Engine con i metodi CE_SERVICES e PREFIX.

  • La variabile di ambiente CE_SERVICES è una variabile di ambiente singola che contiene tutte le informazioni di bind del servizio come un oggetto JSON.

  • Code Engine crea anche più variabili di ambiente per il tuo bind del servizio, che si basano sulle variabili nella credenziali del servizio per la tua istanza del servizio. Per distinguere queste variabili di ambiente multiple per il tuo bind del servizio, puoi utilizzare PREFIX in modo che queste variabili di ambiente utilizzino lo stesso prefisso. Se non specifichi un prefisso personalizzato, Code Engine genera automaticamente un prefisso.

Se la propria applicazione, processo o funzione desidera comunicare con un servizio associato tramite una rete privata e il servizio dispone sia di endpoint private che direct (ad esempio IBM Cloud Object Storage ), è necessario utilizzare gli endpoint direct.

CE_SERVICES variabile di ambiente

La variabile d'ambiente CE_SERVICES contiene informazioni che è possibile utilizzare per interagire con un'istanza di servizio. Questa variabile di ambiente punta a un oggetto JSON che contiene coppie chiave - valore. Queste coppie di valori chiave rappresentano ogni tipo di servizio collegato alla tua applicazione, lavoro o funzione. key è il nome del tipo di servizio, ad esempio cloud-object-storage, e value è un array di credenziali per le istanze del servizio associate di tale tipo.

Il seguente esempio illustra una variabile 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"
    }
  ]
}

Metodo prefisso

Con il metodo prefix, per ogni variabile della credenziale in un oggetto credenziali del servizio, tale variabile viene fornita individualmente al tuo ambiente utilizzando la sintassi della variabile di ambiente comune di lettere maiuscole separate da caratteri di sottolineatura, come VARIABLE_NAME.

Per default, il nome della variabile è quello del servizio, seguito dal nome della variabile della credenziale. Ad esempio, una variabile della credenziale del servizio IBM Cloud Object Storage denominata apikey è disponibile in una variabile di ambiente denominata CLOUD_OBJECT_STORAGE_APIKEY. Il seguente esempio mostra le variabili di ambiente create per un bind di istanza del servizio 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

Per impostazione predefinita, se più di un'istanza dello stesso tipo è associata a una singola applicazione, Code Engine accoda un indice al nome del servizio, ad esempio CLOUD_OBJECT_STORAGE_2_APIKEY.

Ogni bind del servizio può essere configurato per utilizzare un prefisso di variabile di ambiente personalizzato. Se stai utilizzando la console, puoi facoltativamente fornire un prefisso quando crei il bind del servizio. Se si utilizza la CLI, utilizzare l'opzione --prefix con app bind, job bind o il comando function bind.

Cosa devo considerare se dispongo di bind di servizio che utilizzano l'implementazione precedente?

CLI 1.27.0 ha introdotto un'implementazione di bind del servizio migliorata, che viene utilizzata per tutti i bind creati con questa versione o successiva. I bind del servizio creati con una versione della CLI precedente a CLI 1.27.0 utilizzano la precedente implementazione del bind del servizio. Le applicazioni, i lavori e le funzioni che hanno collegamenti di servizio che utilizzano l'implementazione precedente continuano a funzionare normalmente per quanto riguarda l'accesso ai servizi collegati. Tuttavia, se si desidera modificare i bind del servizio che utilizzano l'implementazione precedente, considerare le seguenti informazioni.

  • Non è possibile avere una combinazione di precedenti implementazioni e collegamenti di servizi di implementazione migliorati per la stessa applicazione, lavoro o funzione. Prima di poter aggiungere nuovi bind di servizio a un'applicazione, un lavoro o una funzione che dispone di bind di servizio che utilizzano l'implementazione precedente, è necessario annullare il bind di tutti questi bind di servizio. È quindi possibile ricrearli con l'implementazione migliorata e aggiungere nuovi bind di servizio.
  • Non è possibile annullare singolarmente il bind di questi bind del servizio. È necessario rimuoverli tutti utilizzando il comando app unbind --all o job unbind --all.
  • Se si utilizzano i carichi di lavoro Funzione, la funzione utilizza automaticamente l'ultima implementazione dei bind del servizio.

Per usufruire delle ultime migliorie e continuare a gestire facilmente i collegamenti ai servizi per le tue app e i tuoi processi, esegui l'aggiornamento all'ultima versione della CLI di IBM Cloud Code Engine e sostituisci i collegamenti ai servizi che utilizzano l'implementazione precedente.

Come posso sostituire un bind del servizio che utilizza l'implementazione precedente?

Se l'applicazione o il lavoro ha collegamenti di servizio che utilizzano l'implementazione precedente e si desidera aggiungere nuovi collegamenti di servizio all'applicazione o al lavoro, è necessario rimuovere prima i collegamenti che utilizzano l'implementazione precedente prima di crearne di nuovi. È possibile ricreare i bind del servizio esistenti, se necessario.

Durante il processo di disassociazione e riassociazione, l'applicazione potrebbe non funzionare correttamente.

  1. Per scoprire se la tua applicazione o il tuo lavoro utilizza l'implementazione precedente dei binding di servizio, esegui il app get o job get. Se viene utilizzata l'implementazione del bind del servizio precedente, l'output di questo comando fornisce le informazioni e i comandi che è necessario utilizzare per collegare un altro servizio all'applicazione o al lavoro. Ad esempio,

    ibmcloud ce app get --name myapp
    

    Output di esempio

    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
    

    Allo stesso modo, se si utilizzano i lavori, eseguire il comando ibmcloud ce job get --name JOB_NAME per rilevare se i collegamenti obsoleti sono utilizzati con il lavoro.

  2. Annullare il bind dei bind di servizio esistenti che utilizzano l'implementazione precedente. L'opzione --all specifica di annullare il bind di tutte le istanze del servizio per questa applicazione.

    ibmcloud ce app unbind --name APP_NAME --all
    

    Allo stesso modo, se stai utilizzando i lavori, esegui il comando ibmcloud ce job unbind --name JOB_NAME --all per annullare il bind di tutte le istanze del servizio per il tuo lavoro.

  3. Creare nuovi bind. Per creare nuovi bind, eseguire il comando ibmcloud ce app bind o ibmcloud ce job bind. Per sostituire il bind del servizio che ha utilizzato l'implementazione precedente, utilizzare i comandi forniti nell'output dei comandi app get o job get. Ad esempio, per ricreare un bind esistente dall'applicazione Code Engine, myapp, all'istanza del servizio IBM Cloud Object Storage, myobjectstorage,

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

    Allo stesso modo, se si utilizzano i lavori, eseguire il comando ibmcloud ce job bind --name JOB_NAME ---service-instance SERVICE_INSTANCE --prefix PREFIX.

    Ripeti questo passaggio per ogni collegamento che desideri ricreare.

  4. (Facoltativo) Eseguire di nuovo il comando app get o job get. Questa volta, l'output del comando non visualizza le informazioni sui bind del servizio con una precedente implementazione. Ad esempio,

    ibmcloud ce app get --name myapp
    

    Output di esempio

    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
    

Passi successivi

Prima di poter eseguire il bind di un'istanza del servizio a un carico di lavoro di applicazione, lavoro o funzione Code Engine, devi configurare l'accesso per i bind. Consultare Configurazione dell'accesso per i bind del servizio.