Vinculación de una instancia de servicio a una carga de trabajo de aplicación, trabajo o función

Puede integrar una instancia de servicio IBM Cloud en los recursos de un proyecto IBM Cloud® Code Engine utilizando enlaces de servicio.

Tras determinar la instancia de servicio que desea vincular a su carga de trabajo de Code Engine y asegurarse de que ha configurado el acceso para las vinculaciones de servicio, estará listo para vincular la instancia de servicio a su carga de trabajo de aplicación, trabajo o función de Code Engine.

Antes de empezar

El acceso para las vinculaciones de servicio debe configurarse antes de poder vincular una instancia de servicio a una carga de trabajo de aplicación, trabajo o función de Code Engine. Configure el acceso para los enlaces de servicio en función de si desea que Code Engine cree y gestione automáticamente el ID de servicio por usted o si desea utilizar un ID de servicio que usted gestione.

Cuando se trabaja con enlaces de servicio, ¿cuál es la relación entre el ID de servicio, los secretos de acceso al servicio y las credenciales de servicio?

En Code Engine, una vinculación de servicio es la relación entre una carga de trabajo de aplicación, trabajo o función y otro servicio IBM Cloud. Code Engine utiliza un ID de servicio para crear credenciales para una instancia de servicio IBM Cloud específica. Estas credenciales son credenciales de servicio y son utilizadas por su proyecto Code Engine para interactuar con la instancia de servicio. Las credenciales de servicio se almacenan en un secreto de acceso al servicio. Una aplicación, trabajo o función puede acceder a un secreto de acceso al servicio con las credenciales del servicio y se utiliza para interactuar con la instancia del servicio.

Cuando cree su instancia de servicio IBM Cloud, puede elegir crear la credencial de servicio para esa instancia de servicio. O bien, al crear un enlace de servicio, puede elegir que Code Engine cree automáticamente la credencial de instancia de servicio por usted si ha configurado el acceso para enlaces de servicio.

Tanto si elige que Code Engine cree automáticamente la credencial de servicio por usted como si crea manualmente la credencial de servicio para una instancia de servicio específica, debe especificar el rol Identity and Access Management (IAM) para la credencial de servicio. El rol que especifique define la interacción que se permite con la instancia de servicio específica y la aplicación, trabajo o función vinculada Code Engine. Por ejemplo, si crea un enlace de servicio desde Code Engine a una instancia de servicio IBM Cloudant y desea que la aplicación, trabajo o función sólo lea de la base de datos IBM Cloudant, seleccione el rol Reader.

Vinculación de una instancia de servicio a una aplicación o trabajo de Code Engine desde la consola

Puede crear una vinculación de servicio que vincule una instancia de servicio existente a una aplicación o trabajo de Code Engine utilizando la consola. Para crear un enlace de servicio para una función, debe utilizar la CLI.

Vinculación de una instancia de servicio con un nuevo secreto de acceso al servicio (con una credencial autogenerada Code Engine )

Vamos a crear una vinculación de servicio para vincular una instancia de servicio a una aplicación o trabajo con un nuevo secreto de acceso al servicio que utiliza una credencial de servicio generada automáticamente por Code Engine. Para este ejemplo, cree un enlace de servicio desde la consola para la aplicación myapp y elija que Code Engine cree automáticamente la credencial de servicio a una instancia de servicio IBM Cloud. Antes de que Code Engine pueda crear automáticamente la credencial de servicio, asegúrese de configurar el acceso para que Code Engine cree y gestione automáticamente el ID de servicio para los enlaces de servicio.

  1. Una vez que tu proyecto esté en estado «Activo», haz clic en el nombre del mismo en la página «Proyectos» de Code Engine.
  2. En la página Descripción general, haga clic en Vinculaciones de servicio.
  3. En la página Enlaces de servicio, haga clic en Crear para crear el enlace.
  4. Selecciona la instancia del servicio « IBM » que desees vincular a tu aplicación o tarea de « Code Engine ».
  5. Seleccione la aplicación Code Engine o el trabajo que desea vincular a la instancia de servicio; por ejemplo, seleccione la aplicación myapp.
  6. Especifique el secreto de acceso al servicio que se utilizará con esta vinculación. El secreto de acceso al servicio almacena las credenciales para la vinculación del servicio. Observe que cualquier credencial de servicio previamente definida para su instancia de servicio específica, que no esté asociada con la aplicación o el trabajo que ha seleccionado, aparece en la lista. Si actualmente no existe ningún secreto de acceso al servicio, entonces está creando un nuevo secreto. Si existe un secreto de acceso al servicio, para crear un nuevo secreto de acceso al servicio con una nueva credencial de servicio para esta vinculación, seleccione Nuevo secreto. Realice los siguientes pasos.
    1. Seleccione la función para la credencial de instancia de servicio.
    2. Expanda Opciones avanzadas.
    3. Para que Code Engine cree automáticamente la credencial de servicio para una instancia de servicio de IBM Cloud, seleccione Auto-generate.
    4. (opcional) Especifica un prefijo personalizado para el enlace del servicio. Si no especifica un prefijo personalizado, Code Engine genera automáticamente un prefijo. El prefijo se utiliza para distinguir las variables de entorno que se crean para este enlace de servicio.
  7. Haz clic en «Añadir» para crear el enlace de servicio.
  8. Ahora que la vinculación del servicio a su aplicación o trabajo está creada desde la consola, puede ver una lista de todas las vinculaciones de servicio definidas entre instancias de servicio y aplicaciones y trabajos de Code Engine desde la página Vinculaciones de servicio.

Alternativamente, también puede crear y gestionar enlaces de servicio a aplicaciones y trabajos específicos desde la página de aplicaciones o trabajos específicos de Code Engine en la consola. Para trabajar con service bindings en el contexto de tu aplicación o trabajo, ve a la pestaña Service bindings para tu aplicación o trabajo específico.

Vinculación de una instancia de servicio con un nuevo secreto de acceso al servicio (con una credencial existente)

Supongamos que desea crear una vinculación de servicio para vincular una instancia de servicio a una aplicación o trabajo con un nuevo secreto de acceso al servicio que utiliza una credencial de servicio existente. La credencial de servicio existente podría haber sido generada automáticamente por Code Engine, o la credencial de servicio podría haber sido generada manualmente. Para este ejemplo, cree un enlace de servicio para el trabajo myjob, con un nuevo secreto de acceso al servicio que utilice una credencial de servicio existente.

  1. Una vez que tu proyecto esté en estado «Activo», haz clic en el nombre del mismo en la página «Proyectos» de Code Engine.
  2. En la página Descripción general, haga clic en Vinculaciones de servicio.
  3. En la página Enlaces de servicio, haga clic en Crear para crear el enlace.
  4. Selecciona la instancia del servicio « IBM » que desees vincular a tu aplicación o tarea de « Code Engine ».
  5. Seleccione la aplicación Code Engine o el trabajo que desea vincular a la instancia de servicio; por ejemplo, seleccione el trabajo myjob.
  6. Especifique el secreto de acceso al servicio que se utilizará con esta vinculación. El secreto de acceso al servicio almacena las credenciales para la vinculación del servicio. Observe que cualquier credencial de servicio previamente definida para su instancia de servicio específica, que no esté asociada con la aplicación o el trabajo que ha seleccionado, aparece en la lista. Si actualmente no existe ningún secreto de acceso al servicio, entonces está creando un nuevo secreto. Si existe un secreto de acceso al servicio, para crear un nuevo secreto de acceso al servicio con una nueva credencial de servicio para esta vinculación, seleccione Nuevo secreto. Realice los siguientes pasos.
    1. Seleccione la función para la credencial de instancia de servicio.
    2. Expanda Opciones avanzadas.
    3. Seleccione la credencial de servicio que se utilizará con este secreto de acceso al servicio.
    4. (opcional) Especifica un prefijo personalizado para el enlace del servicio. Si no especifica un prefijo personalizado, Code Engine genera automáticamente un prefijo. El prefijo se utiliza para distinguir las variables de entorno que se crean para este enlace de servicio.
  7. Haz clic en «Añadir» para crear el enlace de servicio.
  8. Ahora que la vinculación del servicio a su aplicación o trabajo está creada desde la consola, puede ver una lista de todas las vinculaciones de servicio definidas entre instancias de servicio y aplicaciones y trabajos de Code Engine desde la página Vinculaciones de servicio.

Alternativamente, también puede crear y gestionar enlaces de servicio a aplicaciones y trabajos específicos desde la página de aplicaciones o trabajos específicos de Code Engine en la consola. Para trabajar con service bindings en el contexto de tu aplicación o trabajo, ve a la pestaña Service bindings para tu aplicación o trabajo específico.

Vinculación de una instancia de servicio con un secreto de acceso al servicio existente

Puede reutilizar los secretos de acceso a los servicios en los enlaces de servicio. Para una instancia específica del servicio IBM Cloud, puede reutilizar los secretos de acceso al servicio con diferentes aplicaciones o trabajos. No se puede reutilizar un secreto de acceso a servicio para la misma aplicación o trabajo para el que se creó originalmente el secreto de acceso a servicio. Dado que la credencial de servicio se almacena dentro del secreto de acceso al servicio, es importante tener en cuenta los siguientes puntos:

  • Puede tener más de una aplicación o trabajo vinculado a la misma instancia de servicio IBM Cloud con el mismo secreto de acceso al servicio.

  • Un secreto de acceso a un servicio no puede reutilizarse en un enlace de servicio para la misma aplicación o trabajo. Sin embargo, puedes reutilizar el mismo secreto de acceso al servicio en una aplicación o trabajo diferente. Dado que un secreto de acceso al servicio está asociado a una instancia de servicio específica de IBM Cloud, sólo puede reutilizar el secreto de acceso al servicio en una aplicación o trabajo diferente, si se está vinculando a la misma instancia de servicio.

Vamos a crear un enlace de servicio para enlazar una instancia de servicio a un trabajo que utiliza un secreto de acceso de servicio existente. Por ejemplo, cree un enlace de servicio para el trabajo myjob y elija un secreto de acceso de servicio existente para una instancia de servicio específica.

  1. Una vez que tu proyecto esté en estado «Activo», haz clic en el nombre del mismo en la página «Proyectos» de Code Engine.
  2. En la página Descripción general, haga clic en Vinculaciones de servicio.
  3. En la página Enlaces de servicio, haga clic en Crear para crear el enlace.
  4. Selecciona la instancia del servicio « IBM » que desees vincular a tu aplicación o tarea de « Code Engine ».
  5. Selecciona la aplicación o el trabajo de « Code Engine » que quieras vincular a la instancia del servicio.
  6. Puede reutilizar una credencial existente para el secreto de acceso al servicio para un enlace de servicio a una instancia de servicio IBM Cloud específica con una aplicación o trabajo diferente. En este caso, seleccione Secreto existente. Observe que aparece cualquier credencial de servicio previamente definida para su instancia de servicio específica, que no está asociada con la aplicación o el trabajo que ha seleccionado. Realice los siguientes pasos.
    1. Revise la lista de secretos existentes y seleccione el secreto que desea utilizar con esta vinculación de servicio.
    2. (opcional) Especifica un prefijo personalizado para el enlace del servicio. Si no especifica un prefijo personalizado, Code Engine genera automáticamente un prefijo. El prefijo se utiliza para distinguir las variables de entorno que se crean para este enlace de servicio.
  7. Haz clic en «Añadir» para crear el enlace de servicio.
  8. Ahora que la vinculación del servicio a su aplicación o trabajo está creada desde la consola, puede ver una lista de todas las vinculaciones de servicio definidas entre instancias de servicio y aplicaciones y trabajos de Code Engine desde la página Vinculaciones de servicio.

Alternativamente, también puede crear y gestionar enlaces de servicio a aplicaciones y trabajos específicos desde la página de aplicaciones o trabajos específicos de Code Engine en la consola. Para trabajar con service bindings en el contexto de tu aplicación o trabajo, ve a la pestaña Service bindings para tu aplicación o trabajo específico.

Vinculación de una instancia de servicio a una aplicación, trabajo o función de Code Engine con la CLI

Puede crear una vinculación de servicio que vincule una instancia de servicio existente a una aplicación, trabajo o función de Code Engine con la CLI.

Antes de empezar

  • Cree y trabaje con un proyecto.

  • Configure su entorno de CLI de Code Engine.

  • Crea la instancia del servicio que desees vincular a tu carga de trabajo de « Code Engine ».

    Por ejemplo, para crear una instancia de servicio de IBM Cloud Object Storage (plan Lite):

    ibmcloud resource service-instance-create my-object-storage cloud-object-storage lite global -g Default
    
  • Crea una carga de trabajo de « Code Engine ».

Enlace de una instancia de servicio con una credencial nueva

  • Para enlazar la nueva instancia de servicio a la aplicación de Code Engine y generar una credencial de servicio nueva, utilice el mandato ibmcloud ce application bind.
  • Para enlazar la instancia de servicio a un trabajo de Code Engine, utilice el mandato ibmcloud ce job bind.
  • Para vincular su instancia de servicio a una función Code Engine, utilice el comando ibmcloud ce function bind comando

Para crear una aplicación que se utilizará para estos pasos, ejecute el siguiente comando.

ibmcloud ce application create --name my-application --image icr.io/codeengine/hello
  1. Indica el nombre de la instancia del servicio que deseas vincular a tu aplicación, tarea o función. Puede encontrar todas las instancias de servicio que hay en su cuenta para el grupo de recursos actual ejecutando el mandato ibmcloud resource service-instances; por ejemplo,

    ibmcloud resource service-instances
    

    Salida de ejemplo

    Name                               Location   State    Type               Resource Group ID
    my-object-storage                  global     active   service_instance   325d80be5d7945608f6d121712c96ee9
    
  2. Vincula tu instancia de servicio a tu aplicación, tarea o función de Code Engine y genera unas nuevas credenciales de servicio con el rol de servicio predeterminado. El rol de servicio predeterminado es el Gestor o el primer rol que proporciona el servicio si el Gestor no recibe soporte. En el siguiente ejemplo, application bind comando vincula la instancia del servicio my-object-storage con la aplicación denominada my-application. Se genera una nueva credencial de servicio con el rol Gestor para esta acción de enlace.

    ibmcloud ce application bind --name my-application --service-instance my-object-storage
    

    En la tabla siguiente se resumen las opciones que se utilizan con el mandato application bind en este ejemplo. Para obtener más información sobre el mandato y sus opciones, consulte el mandato ibmcloud ce application bind.

    Opciones de mandato
    Opción Descripción
    --name El nombre de la aplicación que se va a enlazar. Este valor es obligatorio.
    --service-instance Especifique el nombre de una instancia de servicio existente que se va a enlazar con la aplicación. Este valor es obligatorio.

    Salida de ejemplo

    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. Comprueba que las credenciales se hayan generado mediante el uso de application get, el job get, o el function get comando . En el ejemplo siguiente, verifique que se han creado las credenciales creadas en el ejemplo anterior.

    ibmcloud ce application get --name my-application
    

    Salida de ejemplo

    [...]
    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
    [...]
    

Asignación de una instancia de servicio a un rol específico

  • Para enlazar la nueva instancia de servicio a la aplicación de Code Engine y generar una credencial de servicio nueva, utilice el mandato ibmcloud ce application bind.
  • Para enlazar la instancia de servicio a un trabajo de Code Engine, utilice el mandato ibmcloud ce job bind.
  • Para vincular su instancia de servicio a una función Code Engine, utilice el comando ibmcloud ce function bind comando

Para crear una función que se utilizará para estos pasos, ejecute el siguiente comando.

ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs
  1. Indica el nombre de la instancia del servicio que deseas vincular a tu aplicación, tarea o función. Puede encontrar todas las instancias de servicio que hay en su cuenta para el grupo de recursos actual ejecutando el mandato ibmcloud resource service-instances; por ejemplo,

    ibmcloud resource service-instances
    

    Salida de ejemplo

    Name                               Location   State    Type               Resource Group ID
    my-object-storage                  global     active   service_instance   325d80be5d7945608f6d121712c96ee9
    
  2. Vincula tu instancia de servicio a tu aplicación, tarea o función de Code Engine y genera unas nuevas credenciales de servicio con un rol de servicio específico. Para obtener más información sobre los roles de servicio de IAM, consulte Roles de acceso al servicio. En el siguiente ejemplo, el function bind comando vincula la instancia del servicio « my-object-storage » a la función denominada « my-function » utilizando el rol de servicio «Writer». Se genera una nueva credencial de servicio con el rol Escritor para esta acción de enlace. Al especificar la opción --prefix, se añade un prefijo a las variables de entorno creadas por los enlaces de servicio.

    ibmcloud ce function bind --name my-function --service-instance my-object-storage --role Writer --prefix MYPREFIX
    

    En la tabla siguiente se resumen las opciones que se utilizan con el mandato function bind en este ejemplo. Para obtener más información sobre el mandato y sus opciones, consulte el mandato ibmcloud ce function bind.

    Opciones de mandato
    Opción Descripción
    --name El nombre de la función a enlazar. Este valor es obligatorio.
    --prefix El prefijo de las variables de entorno que se crean para esta vinculación de servicio. Por ejemplo, --prefix MYPREFIX añade el prefijo MYPREFIX a cualquier variable de entorno que se cree para este enlace de servicio. Para más información, consulte el método del prefijo.
    --service-instance Especifica el nombre de una instancia de servicio existente a la que vincular la función. Este valor es obligatorio.
    --role El nombre de un rol de servicio para la credencial de servicio nueva que se ha creado para este enlace de servicio. Los valores válidos son Reader, Writer, Manager o un rol específico del servicio. Si no se especifica la opción --role, el valor predeterminado es Manager o el primer rol que proporciona el servicio si Manager no recibe soporte. Esta opción se omite si se especifica --service-credential.

    Salida de ejemplo

    Binding service instance...
    Status: Done
    OK
    
  3. Comprueba que las credenciales se hayan generado mediante el uso de application get, el job get comando o el function get comando. En el ejemplo siguiente, verifique que se han creado las credenciales creadas en el ejemplo anterior.

    ibmcloud ce function get --name my-function
    

    Salida de ejemplo

    [...]
    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
    [...]
    

Enlace de una instancia de servicio con credenciales existentes

Si ya ha creado una credencial para la instancia de servicio y desea utilizarla para el enlace de servicio, añada la opción --service-credentials.

Para crear un trabajo que se utilizará para estos pasos, ejecute el siguiente comando.

ibmcloud ce job create --name my-job --image icr.io/codeengine/hello
  1. Indica el nombre de la instancia del servicio que deseas vincular a tu aplicación, tarea o función. Puede encontrar todas las instancias de servicio que hay en su cuenta para el grupo de recursos actual ejecutando el mandato ibmcloud resource service-instances; por ejemplo,

    ibmcloud resource service-instances
    

    Salida de ejemplo

    Name                               Location   State    Type               Resource Group ID
    my-object-storage                  global     active   service_instance   325d80be5d7945608f6d121712c96ee9
    
  2. Localice las credenciales de la instancia de servicio.

    ibmcloud resource service-keys --instance-name INSTANCENAME
    

    Salida de ejemplo

    Name                State    Created At
    my-cos-credential   active   Tue Mar  2 01:15:33 UTC 2021
    

    Para ver detalles de una credencial de servicio, ejecute ibmcloud resource service-key KEYNAME. Puede encontrar todas las claves de servicio del grupo de recursos ejecutando ibmcloud resource service-keys.

  3. Vincula la instancia del servicio a la aplicación, el trabajo o la función con las credenciales existentes. Por ejemplo, el siguiente mandato de job bind enlaza la instancia de servicio de my-object-storage con credenciales de servicio existentes denominadas my-cos-credential a un trabajo existente denominado myjob.

    ibmcloud ce job bind --name myjob --service-instance my-object-storage --service-credential my-cos-credential
    

    En la tabla siguiente se resumen las opciones que se utilizan con el mandato job bind en este ejemplo. Para obtener más información sobre el mandato y sus opciones, consulte el mandato ibmcloud ce job bind.

    Opciones de mandato
    Opción Descripción
    --name El nombre del trabajo que se va a enlazar. Este valor es obligatorio.
    --service-instance Especifique el nombre de una instancia de servicio existente que se va a enlazar con el trabajo. Este valor es obligatorio.
    --service-credential El nombre de la credencial de servicio existente que se va a enlazar.
  4. Comprueba que las credenciales se hayan generado mediante el uso de application get, el job get, o el function get comando . En el ejemplo siguiente, verifique que se han creado las credenciales creadas en el ejemplo anterior.

    ibmcloud ce job get --name myjob
    

    Salida de ejemplo

    [...]
    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
    [...]
    

Desenlace de instancias de servicio

Al desvincular instancias de servicio de una aplicación, un trabajo o una función, se eliminan los enlaces de servicio existentes.

Cuando se desvincula (o elimina) una vinculación de servicio, se elimina la asociación de la carga de trabajo de aplicación, trabajo o función con el secreto de acceso al servicio, de modo que la carga de trabajo ya no tiene acceso al servicio IBM Cloud vinculado previamente.

Una vez definida una vinculación de servicio entre la aplicación y una instancia de servicio, la vinculación de servicio estará activa mientras la aplicación y la instancia de servicio estén activas o no se haya completado una operación de desvinculación para eliminar la vinculación de servicio. Si se elimina la instancia de servicio, tendrá que eliminar manualmente la vinculación del servicio.

Desvincular una instancia de servicio de la consola

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.
  2. En la página Descripción general, haga clic en Enlaces de servicio para ver una lista de todos los enlaces de servicio definidos. O bien, si desea gestionar los enlaces de servicio desde el contexto de su aplicación o trabajo, en la página Descripción general, haga clic en Aplicaciones o Trabajos y haga clic en el nombre de su aplicación o trabajo. Desde la página específica de la aplicación o del trabajo, vaya a la pestaña Service bindings>.
  3. En la lista de enlaces de servicio, elimina el enlace que desees eliminar de tu aplicación o trabajo. Haga clic en el icono Acciones Acciones > Borrar para eliminar el enlace de servicio.

Desvinculación de una instancia de servicio con la CLI

  1. Busca el enlace de servicio que deseas eliminar con el application get, job get, o el function get comando ; por ejemplo,

    ibmcloud ce application get --name my-application
    

    Salida de ejemplo

    [...]
    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. Elimine la vinculación del servicio mediante el botón application unbind, job unbind o function unbind.

    • Para eliminar un enlace único, especifique las opciones --name y --binding.
        ibmcloud ce application unbind --name APPLICATION_NAME --binding BINDING_NAME
        ```
    * Para desenlazar todas las instancias de servicio, utilice la opción `--all`.
    
    ```txt {: pre}
        ibmcloud ce job unbind --name JOB_NAME --all
        ```