Suscripción a sucesos de Object Storage
Con esta guía de aprendizaje, va a aprender a suscribirse a sucesos de Object Storage utilizando la CLI de IBM Cloud® Code Engine.
En entornos distribuidos, a menudo deseará que las aplicaciones o trabajos reaccionen a los mensajes (sucesos) que se generan en otros componentes, normalmente llamados generadores de sucesos. Con Code Engine, las aplicaciones o los trabajos pueden recibir sucesos de interés suscribiéndose a productores de sucesos. La información de sucesos se recibe como solicitudes POST HTTP para aplicaciones y como variables de entorno para trabajos.
Antes de empezar
Todos los usuarios de Code Engine están obligados a tener una cuenta de pago por uso. Las guías de aprendizaje pueden incurrir en costes. Utilice el Estimador de costes para generar una estimación de costes basada en el uso previsto. Para obtener más información, consulta los precios de « Code Engine ».
Determinación del grupo y región de Object Storage
El generador de sucesos de Object Storage genera sucesos en función de las operaciones en los objetos de los grupos de IBM Cloud Object Storage.
-
Instale la CLI del plugin de Object Storage.
ibmcloud plugin install cloud-object-storage -
Cree una instancia recurso de Object Storage. Por ejemplo, cree un recurso de Object Storage llamado
mycloud-object-storageque utilice el plan de servicio IBM Cloud Lite.ibmcloud resource service-instance-create mycloud-object-storage cloud-object-storage lite global -
Visualice los detalles de instancia de recurso de Object Storage que ha creado. Utilice los detalles para obtener el CRN (Cloud Resource Name) de la instancia de Object Storage . El CRN identifica qué instancia de Object Storage desea utilizar. El CRN es el valor del campo
IDen la salida del mandatoibmcloud resource service-instance COS_INSTANCE_NAME.ibmcloud resource service-instance mycloud-object-storageSalida de ejemplo
Name: mycloud-object-storage ID: crn:v1:bluemix:public:cloud-object-storage:global:a/ab9d57f699655f028880abcd2ccdb524:910b727b-abcd-4a73-abcd-77c68bfeabcd:: GUID: 910b727b-abcd-4a73-abcd-77c68bfeabcd Location: global Service Name: cloud-object-storage Service Plan Name: lite Resource Group Name: Default State: active Type: service_instance Sub Type: Created at: 2020-10-14T19:09:22Z Created by: user@us.ibm.com Updated at: 2020-10-14T19:09:22Z [...]Si no sabe el nombre de su instancia de Object Storage, ejecute
ibmcloud resource service-instances --service-name cloud-object-storagepara ver una lista de instancias de Object Storage.Para obtener más información sobre las instancias de Object Storage, consulte Cómo empezar con IBM Cloud Object Storage.
-
Configure el CRN de Object Storage que ha encontrado en el paso anterior para especificar una instancia de Object Storage con la que se va a trabajar. Asegúrese de copiar todo el ID, empezando por
crn:. Estos ejemplos utilizan la opción--forcepara forzar la configuración a utilizar el CRN especificado, lo que puede ser útil si tiene más de una instancia de Object Storage.ibmcloud cos config crn --crn CRN --forceSalida de ejemplo
Saving new Service Instance ID... OK Successfully stored your service instance ID. -
Identifique un grupo al que se va a suscribir. Para ver una lista de grupos asociados a su instancia de Object Storage,
ibmcloud cos bucketsPara crear un grupo,
ibmcloud cos bucket-create -bucket BUCKET_NAME -
Identifique la ubicación y el plan del grupo de Object Storage; por ejemplo, utilice el grupo
mybucket.ibmcloud cos bucket-location-get --bucket mybucketSalida de ejemplo
Details about bucket mybucket: Region: us-south Class: Standard
Su grupo de Object Storage debe ser un grupo regional que se encuentre en la misma región que su proyecto de Code Engine.
Asignación del rol de Gestor de notificaciones a Code Engine
Para poder crear una suscripción de Object Storage, debe asignar el rol de Gestor de notificaciones a un proyecto de Code Engine. Como Gestor de notificaciones, Code Engine puede ver, modificar y suprimir notificaciones para un grupo de Object Storage.
Solo los administradores de la cuenta pueden asignar el rol de Gestor de notificaciones.
-
Identifique el proyecto de Code Engine que desea utilizar. Puede utilizar el mandato
ibmcloud ce project listpara visualizar una lista de proyectos. Utilice el mandatoibmcloud ce project selectpara seleccionar el proyecto como contexto actual. Por ejemplo, para seleccionar un proyecto denominadomyprojectibmcloud ce project select -n myproject -
Asigne el rol Gestor de notificaciones utilizando el mandato
ibmcloud iam authorization-policy-create.Por ejemplo, para asignar el rol de Gestor de notificaciones a un proyecto denominado
myprojectpara una Object Storage instancia denominadamycosinstance,ibmcloud iam authorization-policy-create codeengine cloud-object-storage "Notifications Manager" --source-service-instance-name PROJECT --target-service-instance-name COS-INSTANCETras asignar el rol de Gestor de notificaciones al proyecto, puede crear suscripciones de Object Storage para cualquier grupo regional de su instancia de Object Storage que se encuentre en la misma región que el proyecto.
En la tabla siguiente se resumen las opciones que se utilizan con el mandato
iam authorization-policy-createen este ejemplo. Para obtener más información sobre el mandato y sus opciones, consulte el mandatoibmcloud iam authorization-policy-create.Componentes del mandato iam authorization-policy-create Opción de mandato Descripción codeengineEl servicio de origen que está autorizado para acceder. cloud-object-storageEl servicio de destino al que el servicio de origen está autorizado para acceder. Notifications ManagerLos roles que dan acceso al servicio de origen. source-service-instance-nameEl nombre del proyecto codeengineal que desea autorizar el acceso.target-service-instance-nameEl nombre de la instancia cloud-object-storagea la que desea acceder. -
Verifique que el rol de Gestor de notificaciones se ha establecido.
ibmcloud iam authorization-policiesSalida de ejemplo
ID: abcd1234-a123-b456-bdd9-849e337c4460 Source service name: codeengine Source service instance: 1234abcd-b456-c789-a7c5-ef82e56fb24c Target service name: cloud-object-storage Target service instance: a1b2c3d4-cbad-567a-8cea-77c68bfe97c9 Roles: Notifications Manager
Cree su aplicación (o trabajo)
Se pueden utilizar sucesos para desencadenar aplicaciones o trabajos, en esta guía de aprendizaje se utiliza una aplicación.
Cree una aplicación denominada cos-app con el mandato ibmcloud ce app create utilizando una imagen denominada cos-listen.
Esta app registra cada suceso a medida que llega. Esta imagen se ha creado a partir de cos-listen.go, disponible en el repositorio «Samples for IBM Cloud Code Engine »(GitHub).
ibmcloud ce app create --name cos-app --image icr.io/codeengine/cos-listen
Ejecute ibmcloud ce application get --name cos-app para verificar que la app está en estado Ready (Lista). La aplicación está en estado preparado si el resumen de estado refleja que la aplicación se ha desplegado correctamente.
Para obtener más información sobre esta aplicación, consulta el archivo «readme» de IBM Cloud Object Storage.
Crear una suscripción
Una vez la app esté lista, puede crear una suscripción de Object Storage para poder empezar a recibir sucesos de Object Storage con el mandato ibmcloud ce sub cos create.
Por ejemplo, cree una suscripción de Object Storage que se denomine cos-sub. Esta suscripción reenvía cualquier tipo de operación de grupo del grupo mybucket a una aplicación denominada cos-app.
ibmcloud ce sub cos create --name cos-sub --destination cos-app --bucket mybucket --event-type all
Ejecute el mandato ibmcloud ce sub cos get -n cos-sub para encontrar información sobre la suscripción.
Salida de ejemplo
De forma predeterminada, el mandato ibmcloud ce sub cos get devuelve dos partes. La primera parte incluye información relacionada con
la suscripción de Object Storage como, por ejemplo, el nombre de la suscripción, el destino, el prefijo, el sufijo y el tipo de suceso. La segunda parte incluye información de sucesos relacionada con el recurso sobre la suscripción de Object
Storage que se puede utilizar para fines de depuración. De forma predeterminada, la información de sucesos está disponible durante 1 hora después de que se produzca.
Getting COS event subscription 'cos-sub'...
OK
Name: cos-sub
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 4m16s
Created: 2021-02-01T13:11:31-05:00
Destination: App:cos-app
Bucket: mybucket
EventType: all
Ready: true
Conditions:
Type OK Age Reason
CosConfigured true 38s
Ready true 38s
ReadyForEvents true 38s
SinkProvided true 38s
Events:
Type Reason Age Source Messages
Normal CosSourceReady 39s cossource-controller CosSource is ready
De forma predeterminada, el mandato subscription cos create comprueba primero si existe la aplicación de destino. Si falla la comprobación de destino porque el nombre de la app que se ha indicado no existe en el
proyecto, el mandato subscription cos create devuelve un error. Si desea crear una suscripción sin crear primero la aplicación, utilice la opción --force. Mediante la opción --force,
el mandato ignora la comprobación de destino. Fíjese que en el campo Ready de la suscripción se muestra false hasta que se crea la app de destino. A continuación, la suscripción pasa automáticamente al estado Ready: true.
Tras crear la suscripción, pero antes de que el mandato subscription cos create informe de los resultados, el mandato subscription cos create sondea repetidamente la suscripción para
comprobar el estado con el fin de verificar su disponibilidad. Este sondeo continuo sobre el estado dura 15 segundos de forma predeterminada antes de que se agote el tiempo de espera. Si el estado de la suscripción se devuelve como Ready:true,
informa de que se ha llevado a cabo correctamente, de lo contrario, informa de un error. Puede cambiar la cantidad de tiempo que espera el mandato subscription cos create antes de que se agote el tiempo de espera
utilizando la opción --wait-timeout. También puede ignorar el sondeo del estado definiendo la opción --no-wait en false.
Para obtener más información sobre cabeceras y cuerpo, consulte Cabeceras HTTP e información de cuerpo para sucesos.
Tenga en cuenta que las suscripciones pueden afectar a la forma de escalado de la aplicación. Para obtener más información, consulte Configuración del escalado de una aplicación.
Prueba de la suscripción
-
Cargue un archivo
.txten el grupo. Por ejemplo, puede utilizar el mandatoibmcloud cos object-putpara cargar el objetosample.txten un grupo consamplecomo valor para--key.ibmcloud cos object-put --bucket mybucket --key sample --body sample.txt -
Ver el suceso procesado utilizando el mandato
ibmcloud ce app logs.ibmcloud ce app logs --name cos-appSalida de ejemplo
Este mandato devuelve archivos de registro que incluyen información sobre el suceso que se ha reenviado a la app de destino. En la salida siguiente, puede ver que se ha realizado una operación
Writeen el objetosampledel grupo denominadomybucket.Body: {"bucket":"mybucket","endpoint":"","key":"sample","notification":{"bucket_name":"mybucket","content_type":"text/plain","event_type":"Object:Write","format":"2.0","object_length":"1960","object_name":"sample","request_id":"103dd6f7-dd7b-4f49-86db-c2ff4b678b0a","request_time":"2021-02-11T16:57:42.373Z"},"operation":"Object:Write"}
Actualización de la suscripción de Object Storage
Ahora ya sabe que la suscripción de Object Storage se ha creado correctamente y que la suscripción de Object Storageestá lista para servir sucesos, puede actualizar la suscripción de Object Storage con el mandato ** ibmcloud ce sub cos update**.
Por ejemplo, puede cambiar la suscripción para que se ejecute solamente cuando se producen operaciones específicas en un subconjunto de objetos del grupo.
-
Actualice la suscripción de Object Storage para reenviar sucesos solamente cuando se produzcan operaciones de tipo
deleteen archivos con el prefijotest.ibmcloud ce sub cos update --name cos-sub --event-type delete --prefix test -
Ejecute el mandato
ibmcloud ce sub cos getpara encontrar información sobre la suscripción.ibmcloud ce sub cos get --name cos-subSalida de ejemplo
En esta salida, puede ver que se muestran los valores actualizados para
PrefixyEventType.Getting COS event subscription 'cos-sub'... OK Name: cos-sub ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 4m16s Created: 2021-02-01T13:11:31-05:00 Destination: App:cos-app Bucket: mybucket EventType: delete Prefix: test Ready: true Conditions: Type OK Age Reason CosConfigured true 24m Ready true 24m ReadyForEvents true 24m SinkProvided true 24m Events: Type Reason Age Source Messages Normal CosSourceReady 9s (x2 over 24m) cossource-controller CosSource is ready -
Suprima un objeto del grupo que tiene el prefijo
test. Por ejemplo, suprima un archivo contest2.txtpara el nombre (o clave). Puede utilizar el mandatoibmcloud cos object-deletepara suprimir un objeto del grupo o utilizar la consola de Object Storage. -
Ver el suceso procesado utilizando el mandato
ibmcloud ce app logs.ibmcloud ce app logs --name cos-appSalida de ejemplo
Este mandato devuelve archivos de registro que incluyen información sobre el suceso que se ha reenviado a la app de destino. En la salida siguiente, puede ver que se ha realizado una operación
Deleteen el objeto.txtdel grupo denominadomybucket.Body: {"bucket":"mybucket","endpoint":"",""key":"test2.txt","notification":{"bucket_name":"mybucket","event_type":"Object:Delete","format":"2.0","object_length":"41","object_name":"test2.txt","request_id":"c1099857-f1f3-4d74-9ac4-8d374582f77d","request_time":"2021-09-15T15:22:01.205Z"},"operation":"Object:Delete"}
Guía de aprendizaje para la Limpieza para Object Storage
¿Está preparado para suprimir la suscripción de Object Storage y la app? Puede utilizar los mandatos ibmcloud ce app delete e ibmcloud ce sub cos delete.
Para eliminar la suscripción,
ibmcloud ce sub cos delete --name cos-sub
Para eliminar la aplicación,
ibmcloud ce app delete --name cos-app
¿Está listo para suprimir el grupo de Object Storage y la instancia de servicio? Puede utilizar el mandato ibmcloud cos bucket-delete para eliminar el grupo. Para eliminar la instancia de servicio de Object Storage, utilice el mandato ibmcloud resource service-instance-delete.