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 ".

  1. Installa la CLI del plug-in Object Storage.

    ibmcloud plugin install cloud-object-storage
    
  2. Crea un'istanza della risorsa Object Storage. Ad esempio, crea una risorsa Object Storage denominata mycloud-object-storage che utilizza il piano di servizio IBM Cloud Lite.

    ibmcloud resource service-instance-create mycloud-object-storage cloud-object-storage lite global
    
  3. 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 ID nell'output del comando ibmcloud resource service-instance COS_INSTANCE_NAME.

    ibmcloud resource service-instance mycloud-object-storage
    

    Output 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-storage per visualizzare un elenco di istanze Object Storage.

    Per ulteriori informazioni sulle istanze Object Storage, vedi Introduzione a IBM Cloud Object Storage.

  4. 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 --force per 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 --force
    

    Output di esempio

    Saving new Service Instance ID...
    OK
    Successfully stored your service instance ID.
    
  5. Identifica un bucket a cui sottoscrivere. Per vedere un elenco di bucket associati alla tua istanza Object Storage,

    ibmcloud cos buckets
    

    Per creare un bucket,

    ibmcloud cos bucket-create -bucket BUCKET_NAME
    
  6. Identifica l'ubicazione e il piano del bucket Object Storage ; ad esempio utilizza il bucket mybucket.

    ibmcloud cos bucket-location-get --bucket mybucket
    

    Output 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.

  1. Identifica il progetto Code Engine che vuoi utilizzare. È possibile utilizzare il comando ibmcloud ce project list per visualizzare un elenco di progetti. Utilizzare il comando ibmcloud ce project select per selezionare il progetto come contesto corrente. Ad esempio, per selezionare un progetto denominato myproject

    ibmcloud ce project select -n myproject
    
  2. 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 myproject per un'istanza Object Storage denominata mycosinstance,

    ibmcloud iam authorization-policy-create codeengine cloud-object-storage "Notifications Manager" --source-service-instance-name PROJECT --target-service-instance-name COS-INSTANCE
    

    Dopo 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-create in questo esempio. Per ulteriori informazioni sul comando e le sue opzioni, consultare il comando ibmcloud iam authorization-policy-create.

    componenti del comando iam authorization - policy - create
    Opzione del comando Descrizione
    codeengine Il servizio di origine che può essere autorizzato ad accedere.
    cloud-object-storage Il servizio di destinazione a cui il servizio di origine può essere autorizzato ad accedere.
    Notifications Manager I ruoli che forniscono l'accesso per il servizio di origine.
    source-service-instance-name Il nome del progetto codeengine a cui si desidera autorizzare l'accesso.
    target-service-instance-name Il nome dell'istanza cloud-object-storage a cui vuoi accedere.
  3. Verificare che il ruolo Gestore notifiche sia impostato.

    ibmcloud iam authorization-policies
    

    Output 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

  1. Carica un file .txt nel tuo bucket. Ad esempio, puoi utilizzare il comando ibmcloud cos object-put per caricare l'oggetto sample.txt in un bucket con sample come valore per --key.

    ibmcloud cos object-put --bucket mybucket --key sample --body sample.txt
    
  2. Visualizzare l'evento elaborato utilizzando il comando ibmcloud ce app logs.

    ibmcloud ce app logs --name cos-app
    

    Output 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'oggetto sample del bucket denominato mybucket.

    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.

  1. Aggiorna la sottoscrizione Object Storage per inoltrare gli eventi solo quando le operazioni delete si verificano su file con un prefisso di nome test.

    ibmcloud ce sub cos update --name cos-sub --event-type delete --prefix test
    
  2. Eseguire il comando ibmcloud ce sub cos get per trovare informazioni sulla sottoscrizione.

    ibmcloud ce sub cos get --name cos-sub
    

    Output di esempio

    In questo output, è possibile visualizzare i valori aggiornati per Prefix e EventType.

    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
    
  3. Elimina un oggetto dal tuo bucket che ha il prefisso test. Ad esempio, eliminare un file con test2.txt per il nome (o la chiave). Puoi utilizzare il comando ibmcloud cos object-delete per eliminare un oggetto dal tuo bucket o utilizzare la console Object Storage.

  4. Visualizzare l'evento elaborato utilizzando il comando ibmcloud ce app logs.

    ibmcloud ce app logs --name cos-app
    

    Output 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 .txt del bucket denominato mybucket.

    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.