Iscriversi agli eventi dell' Object Storage
Con questo tutorial potrai imparare come sottoscrivere eventi di un Object Storage e utilizzando la CLI di IBM Cloud® Code Engine.
Spesso, in ambienti distribuiti, si desidera che le applicazioni o i lavori reagiscano ai messaggi (eventi) generati da altri componenti, generalmente denominati produttori di eventi. Con Code Engine, le tue applicazioni o i tuoi processi possono ricevere gli eventi di interesse iscrivendosi ai produttori di eventi. Le informazioni relative agli eventi vengono ricevute sotto forma di richieste POST all'indirizzo HTTP per le applicazioni e sotto forma di variabili d'ambiente per i processi.
Prima di iniziare
Tutti gli utenti di Code Engine devono disporre di un account Pay-as-you-Go. Le esercitazioni potrebbero comportare dei costi. Utilizza lo Strumento di stima dei costi per generare una stima dei costi in base al tuo utilizzo previsto. Per ulteriori informazioni, consulta la pagina dedicata ai prezzi di Code Engine.
Determina il tuo bucket e regione Object Storage
Il produttore di eventi " Object Storage " genera eventi in base alle operazioni eseguite sugli oggetti presenti nei bucket " IBM Cloud Object Storage ".
-
Installa la CLI del plug-in Object Storage.
ibmcloud plugin install cloud-object-storage -
Crea un'istanza della risorsa Object Storage. Ad esempio, crea una risorsa Object Storage denominata
mycloud-object-storageche utilizza il piano di servizio IBM Cloud Lite.ibmcloud resource service-instance-create mycloud-object-storage cloud-object-storage lite global -
Visualizza i dettagli dell'istanza della risorse Object Storage che hai creato. Utilizza i dettagli per ottenere il CRN (Cloud Resource Name) dalla tua istanza Object Storage. Il CRN identifica quale istanza Object Storage si desidera utilizzare. Il CRN è il valore del campo
IDnell'output del comandoibmcloud resource service-instance COS_INSTANCE_NAME.ibmcloud resource service-instance mycloud-object-storageOutput di esempio
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 [...]Se non conosci il nome della tua istanza Object Storage, esegui
ibmcloud resource service-instances --service-name cloud-object-storageper visualizzare un elenco di istanze Object Storage.Per ulteriori informazioni sulle istanze Object Storage, vedi Introduzione a IBM Cloud Object Storage.
-
Configura il tuo CRN Object Storage che hai trovato con il passo precedente per specificare un'istanza Object Storage con cui lavorare. Assicurarsi di copiare l'intero ID, iniziando con
crn:. Questo esempio utilizza l'opzione--forceper forzare la configurazione a utilizzare il CRN specificato, che potrebbe essere utile se hai più di una istanza Object Storage.ibmcloud cos config crn --crn CRN --forceOutput di esempio
Saving new Service Instance ID... OK Successfully stored your service instance ID. -
Identifica un bucket a cui sottoscrivere. Per vedere un elenco di bucket associati alla tua istanza Object Storage,
ibmcloud cos bucketsPer creare un bucket,
ibmcloud cos bucket-create -bucket BUCKET_NAME -
Identifica l'ubicazione e il piano del bucket Object Storage ; ad esempio utilizza il bucket
mybucket.ibmcloud cos bucket-location-get --bucket mybucketOutput di esempio
Details about bucket mybucket: Region: us-south Class: Standard
Il bucket di Object Storage deve essere un bucket regionale situato nella stessa regione del progetto Code Engine.
Assegnazione del ruolo Gestore notifiche a Code Engine
Prima di poter creare un abbonamento a Object Storage, è necessario assegnare il ruolo "Notifications Manager" a un progetto Code Engine. In qualità di responsabile delle notifiche, Code Engine può visualizzare, modificare ed eliminare le notifiche relative a un bucket Object Storage.
Solo gli amministratori di account possono assegnare il ruolo Gestore notifiche.
-
Identifica il progetto Code Engine che vuoi utilizzare. È possibile utilizzare il comando
ibmcloud ce project listper visualizzare un elenco di progetti. Utilizzare il comandoibmcloud ce project selectper selezionare il progetto come contesto corrente. Ad esempio, per selezionare un progetto denominatomyprojectibmcloud ce project select -n myproject -
Assegnare il ruolo Gestore notifiche utilizzando il comando
ibmcloud iam authorization-policy-create.Ad esempio, per assegnare il ruolo Gestore notifiche a un progetto denominato
myprojectper un'istanza Object Storage denominatamycosinstance,ibmcloud iam authorization-policy-create codeengine cloud-object-storage "Notifications Manager" --source-service-instance-name PROJECT --target-service-instance-name COS-INSTANCEDopo aver assegnato il ruolo di “Notifications Manager” al tuo progetto, potrai creare delle sottoscrizioni “ Object Storage ” per qualsiasi bucket regionale presente nella tua istanza di Object Storage che si trovi nella stessa regione del tuo progetto.
La seguente tabella riepiloga le opzioni utilizzate con il comando
iam authorization-policy-createin questo esempio. Per ulteriori informazioni sul comando e le sue opzioni, consultare il comandoibmcloud iam authorization-policy-create.componenti del comando iam authorization - policy - create Opzione del comando Descrizione codeengineIl servizio di origine che può essere autorizzato ad accedere. cloud-object-storageIl servizio di destinazione a cui il servizio di origine può essere autorizzato ad accedere. Notifications ManagerI ruoli che forniscono l'accesso per il servizio di origine. source-service-instance-nameIl nome del progetto codeenginea cui si desidera autorizzare l'accesso.target-service-instance-nameIl nome dell'istanza cloud-object-storagea cui vuoi accedere. -
Verificare che il ruolo Gestore notifiche sia impostato.
ibmcloud iam authorization-policiesOutput di esempio
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
Crea la tua applicazione (o lavoro)
Mentre gli eventi possono essere utilizzati per attivare applicazioni o lavori, questa esercitazione utilizza un'app.
Crea un'applicazione denominata cos-app con il comando ibmcloud ce app create utilizzando un'immagine denominata cos-listen.
Questa applicazione registra ogni evento quando arriva. Questa immagine viene creata da cos-listen.go, disponibile da Esempi per il repository IBM Cloud Code Engine GitHub.
ibmcloud ce app create --name cos-app --image icr.io/codeengine/cos-listen
Esegui ibmcloud ce application get --name cos-app per verificare che la tua applicazione sia in uno stato Ready. L'applicazione si trova in uno stato di pronto se il riepilogo dello stato indica che l'applicazione è
stata distribuita correttamente.
Per ulteriori informazioni su questa app, vedi il file readme IBM Cloud Object Storage.
Creare una sottoscrizione
Una volta che la tua app è pronta, puoi creare un abbonamento Object Storage per iniziare a ricevere gli eventi Object Storage tramite il ibmcloud ce sub cos create comando.
Ad esempio, crea una sottoscrizione Object Storage denominata cos-sub. Questa sottoscrizione inoltra qualsiasi tipo di operazione del bucket dal bucket mybucket a un'applicazione denominata cos-app.
ibmcloud ce sub cos create --name cos-sub --destination cos-app --bucket mybucket --event-type all
Eseguire il comando ibmcloud ce sub cos get -n cos-sub per trovare informazioni sulla propria sottoscrizione.
Output di esempio
Per impostazione predefinita, il comando ibmcloud ce sub cos get restituisce due parti. La prima parte include le informazioni relative
alla sottoscrizione Object Storage come il nome sottoscrizione, la destinazione, il prefisso, il suffisso e il tipo di evento. La seconda parte include le informazioni sull'evento correlate alle risorse relative alla sottoscrizione Object
Storage che possono essere utilizzate per scopi di debug. Per impostazione predefinita, le informazioni sugli eventi sono disponibili per 1 ora dopo che si sono verificati.
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
Per impostazione predefinita, il comando subscription cos create verifica innanzitutto se l'applicazione di destinazione esiste. Se il controllo della destinazione non riesce perché il nome dell'app che hai fornito
non esiste nel tuo progetto, il comando subscription cos create restituisce un errore. Se si desidera creare una sottoscrizione senza prima creare l'applicazione, utilizzare l'opzione --force. Utilizzando
l'opzione --force, il comando ignora il controllo di destinazione. Nota che il campo Ready della sottoscrizione mostra false fino a quando non viene creata l'app di destinazione. Quindi, la sottoscrizione
passa automaticamente allo stato Ready: true.
Dopo che la sottoscrizione è stata creata, ma prima che il comando subscription cos create riporti i risultati, il comando subscription cos create esegue ripetutamente il polling della
sottoscrizione per verificarne lo stato di preparazione. Questo polling continuo per lo stato dura per 15 secondi per impostazione predefinita prima del timeout. Se lo stato della sottoscrizione viene restituito come Ready:true,
riporta l'esito positivo, altrimenti riporta un errore. È possibile modificare la quantità di tempo che il comando subscription cos create attende prima di andare in timeout utilizzando l'opzione --wait-timeout.
È anche possibile ignorare il polling dello stato impostando l'opzione --no-wait su false.
Per ulteriori informazioni sulle intestazioni e sul corpo, consultare le informazioni relative alle intestazioni e al corpo degli eventi disponibili all'indirizzo HTTP.
Tenere presente che le sottoscrizioni possono influire sul modo in cui un'applicazione viene ridimensionata. Per ulteriori informazioni, vedi Configurazione del ridimensionamento dell'applicazione.
Verifica della sottoscrizione
-
Carica un file
.txtnel tuo bucket. Ad esempio, puoi utilizzare il comandoibmcloud cos object-putper caricare l'oggettosample.txtin un bucket consamplecome valore per--key.ibmcloud cos object-put --bucket mybucket --key sample --body sample.txt -
Visualizzare l'evento elaborato utilizzando il comando
ibmcloud ce app logs.ibmcloud ce app logs --name cos-appOutput di esempio
Questo comando restituisce i file di log che includono le informazioni sull'evento inoltrato alla tua applicazione di destinazione. Dal seguente output, puoi vedere che un'operazione
Writeè stata eseguita sull'oggettosampledel bucket denominatomybucket.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"}
Aggiorna la tua sottoscrizione Object Storage
Ora che sai che l'abbonamento Object Storage è stato creato correttamente e che l'abbonamento Object Storage è pronto a gestire gli eventi, puoi aggiornare l'abbonamento Object Storage con il ibmcloud ce sub cos update comando. Ad esempio, è possibile modificare la sottoscrizione in modo che venga eseguita solo quando si verificano operazioni specifiche su un sottoinsieme di oggetti nel bucket.
-
Aggiorna la sottoscrizione Object Storage per inoltrare gli eventi solo quando le operazioni
deletesi verificano su file con un prefisso di nometest.ibmcloud ce sub cos update --name cos-sub --event-type delete --prefix test -
Eseguire il comando
ibmcloud ce sub cos getper trovare informazioni sulla sottoscrizione.ibmcloud ce sub cos get --name cos-subOutput di esempio
In questo output, è possibile visualizzare i valori aggiornati per
PrefixeEventType.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 -
Elimina un oggetto dal tuo bucket che ha il prefisso
test. Ad esempio, eliminare un file contest2.txtper il nome (o la chiave). Puoi utilizzare il comandoibmcloud cos object-deleteper eliminare un oggetto dal tuo bucket o utilizzare la console Object Storage. -
Visualizzare l'evento elaborato utilizzando il comando
ibmcloud ce app logs.ibmcloud ce app logs --name cos-appOutput di esempio
Questo comando restituisce i file di log che includono le informazioni sull'evento inoltrato alla tua applicazione di destinazione. Dal seguente output, puoi vedere che un'operazione
Deleteè stata eseguita sull'oggetto.txtdel bucket denominatomybucket.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"}
Ripulisci per l'esercitazione Object Storage
Pronto per eliminare la tua sottoscrizione Object Storage e la tua app? È possibile utilizzare i comandi ibmcloud ce app delete e ibmcloud ce sub cos delete.
Per rimuovere la sottoscrizione,
ibmcloud ce sub cos delete --name cos-sub
Per rimuovere l'applicazione,
ibmcloud ce app delete --name cos-app
Sei pronto a eliminare la tua istanza del bucket e del servizio Object Storage ? Puoi usare il comando ibmcloud cos bucket-delete per rimuovere il tuo bucket. Per rimuovere la tua istanza del servizio Object Storage, utilizza il comando ibmcloud resource service-instance-delete.