Migrazione dei trigger Pub/Sub da Events for Cloud Run for Anthos a Eventarc

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Puoi eseguire la migrazione degli attivatori di evento in modo che un servizio Cloud Run for Anthos possa ricevere eventi Pub/Sub utilizzando Eventarc. Questa guida presuppone che tu stia eseguendo la migrazione di triggers esistenti per Cloud Run for Anthos e che il tuo servizio Cloud Run for Anthos sia in esecuzione in un cluster Google Kubernetes Engine (GKE). È necessario eseguire una migrazione per ogni cluster.

Questo percorso di migrazione evita la perdita di eventi riducendo al minimo la duplicazione.

La migrazione comporta quanto segue:

  1. Per consentire a Eventarc di gestire le risorse nel cluster GKE, abilita le destinazioni GKE.
  2. Se necessario, abilita Workload Identity per il cluster GKE che esegue il servizio Cloud Run for Anthos target.
  3. Identifica gli eventi esistenti per i trigger di Cloud Run for Anthos.
  4. Creare un trigger Eventarc che punta allo stesso servizio Cloud Run for Anthos del trigger esistente.
  5. Conferma che il trigger Eventarc fornisca gli eventi come previsto.
  6. Elimina l'attivatore dell'evento originale ed esegui la pulizia dopo la migrazione.

Prima di iniziare

Questa guida presuppone che tu abbia già:

Configurazione dell'ambiente a riga di comando

Per configurare gli strumenti a riga di comando gcloud e kubectl:

  1. In Google Cloud Console, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore di Google Cloud Console, viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Accedi con il tuo account:

    gcloud auth login
  3. Configura le impostazioni predefinite per l'interfaccia a riga di comando gcloud:

    gcloud config set project PROJECT_ID
    gcloud config set run/cluster CLUSTER_NAME
    gcloud config set run/cluster_location CLUSTER_LOCATION
    gcloud config set run/platform gke
    gcloud config set eventarc/location LOCATION
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • CLUSTER_NAME: il nome del cluster.
    • CLUSTER_LOCATION: qualsiasi zona in cui è supportato GKE, ad esempio us-central1-a.
    • LOCATION: una località per il trigger Eventarc, ad esempio us-central1.
  4. Abilita le API seguenti per il progetto:

    gcloud services enable cloudapis.googleapis.com
    gcloud services enable cloudbuild.googleapis.com
    gcloud services enable cloudresourcemanager.googleapis.com
    gcloud services enable container.googleapis.com
    gcloud services enable containerregistry.googleapis.com
    gcloud services enable eventarc.googleapis.com
    
  5. Installa lo strumento a riga di comando kubectl:

    gcloud components install kubectl
  6. Aggiorna i componenti dell'interfaccia a riga di comando gcloud installati:

    gcloud components update

Abilita destinazioni GKE

Per consentire a Eventarc di gestire le risorse nel cluster GKE, abilita le destinazioni GKE e associa l'account di servizio Eventarc ai ruoli richiesti.

  1. Abilita destinazioni GKE per Eventarc:

    gcloud eventarc gke-destinations init
    
  2. Al momento dell'associazione dei ruoli richiesti, inserisci y.

    Sono collegati i seguenti ruoli:

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

Abilita Workload Identity in un cluster

Se Workload Identity è già abilitato sul tuo cluster, puoi saltare questo passaggio.

Workload Identity è il metodo consigliato per accedere ai servizi Google Cloud dalle applicazioni in esecuzione all'interno di Google Kubernetes Engine (GKE) grazie alle sue proprietà di sicurezza e alla sua gestibilità migliorate. È necessario anche inoltrare gli eventi Cloud Run for Anthos utilizzando Eventarc.

Per abilitare Workload Identity in un cluster esistente, consulta Utilizzo di Workload Identity.

Identificare gli eventi esistenti per i trigger di Cloud Run for Anthos

Prima di eseguire la migrazione di eventuali trigger esistenti per Cloud Run for Anthos, devi recuperare i dettagli del trigger.

  1. Elenca gli eventi Event for Cloud Run for Anthos esistenti per il cluster:

    gcloud beta events triggers list --namespace EVENTS_NAMESPACE
    

    Sostituisci EVENTS_NAMESPACE con lo spazio dei nomi del tuo intermediario degli eventi.

    L'output è simile al seguente:

       TRIGGER             EVENT TYPE                                     TARGET
    ✔  trigger-id          google.cloud.pubsub.topic.v1.messagePublished  cloud-run-service-name
    
  2. Avrai bisogno dell'ID argomento per creare il trigger Eventarc. Recupera l'ID argomento per l'attivatore Eventi per Cloud Run for Anthos esistente:

    gcloud beta events triggers describe TRIGGER_ID \
    --platform gke --namespace EVENTS_NAMESPACE \
    --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
    

    Sostituisci TRIGGER_ID con l'ID dell'attivatore Eventi per Cloud Run for Anthos esistente o di un identificatore completo.

    L'output è simile al seguente:

    topic:     topic-id
    type:      google.cloud.pubsub.topic.v1.messagePublished
    name:      cloud-run-service-name
    namespace: events
    

Crea un trigger Eventarc per sostituire il trigger esistente

Prima di creare il trigger Eventarc, configura un account di servizio gestito dall'utente e assegnagli ruoli specifici, in modo che Eventarc possa gestire gli eventi per le destinazioni Cloud Run for Anthos.

  1. Crea un account di servizio Google Cloud (GSA):

    TRIGGER_GSA=SERVICE_ACCOUNT_NAME
    gcloud iam service-accounts create $TRIGGER_GSA

    Sostituisci SERVICE_ACCOUNT_NAME con un nome compreso tra 6 e 30 caratteri. Può contenere caratteri alfanumerici minuscoli e trattini.

  2. Concedi i ruoli pubsub.subscriber e monitoring.metricWriter all'account di servizio:

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/monitoring.metricWriter"
  3. Crea un nuovo trigger Eventarc basato sulla configurazione esistente di Eventi per Cloud Run for Anthos trigger. Tutti gli argomenti, incluso il servizio di destinazione, il cluster e l'ID argomento, devono corrispondere a quelli dell'attivatore Eventi per Cloud Run for Anthos esistente.

    gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --location LOCATION \
      --destination-gke-service=DESTINATION_SERVICE \
      --destination-gke-cluster=CLUSTER_NAME  \
      --destination-gke-location=CLUSTER_LOCATION  \
      --destination-gke-namespace=EVENTS_NAMESPACE  \
      --destination-gke-path=/ \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \
      --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    Sostituisci EVENTARC_TRIGGER_NAME con un nome per il nuovo trigger Eventarc e TOPIC_ID con l'ID argomento Pub/Sub che hai recuperato in precedenza.

    Viene creato un trigger Eventarc per l'ID argomento Pub/Sub.

  4. Verifica che il trigger sia stato creato correttamente:

    gcloud eventarc triggers list
    

    L'output è simile al seguente:

    NAME                  TYPE                                           DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
    eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished                                                 Yes
    

Testare la migrazione e verificare l'output

Per testare la migrazione, attiva un evento di test pubblicandolo in un argomento Pub/Sub, quindi verifica che sia stato pubblicato almeno un evento per ognuno degli attivatori Eventi esistenti per Cloud Run for Anthos ed Eventarc.

Ad esempio, ipotizzando di aver completato il tutorial Ricezione eventi da Pub/Sub e di aver eseguito la migrazione dell'attivatore Eventi per Cloud Run for Anthos, l'output dopo l'attivazione di un evento di test verrebbe duplicato e sarebbe simile al seguente:

  Hello, World! ID: 2896291125947199
  Hello, World! ID: 2896291125947199

Puoi anche utilizzare il seguente scenario per le indicazioni in cui il destinatario dell'evento può visualizzare i dati dell'evento:

  1. Pubblica un messaggio nell'argomento Pub/Sub:

    gcloud pubsub topics publish TOPIC_ID \
      --message "Hello, World!"
    
  2. Verifica l'evento e la relativa consegna riuscita. Ad esempio, esamina i log del servizio Cloud Run for Anthos ricevente:

    kubectl logs \
      --selector serving.knative.dev/service=DESTINATION_SERVICE \
      -c user-container \
      -n EVENTS_NAMESPACE \
      --tail=100
    

    L'output dei due trigger è simile al seguente, con differenze solo in Context Attributes e Extensions. I dati effettivi dei messaggi, ad eccezione dei dati subscription, devono essere identici in modo che non siano richieste modifiche al ricevitore di eventi dopo la migrazione a Eventarc.

    Evento Eventarc:

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: google.cloud.pubsub.topic.v1.messagePublished
      source: //pubsub.googleapis.com/projects/project-id/topics/topic-name
      id: 2759155988927083
      time: 2021-07-22T17:47:19.964Z
      datacontenttype: application/json
    Data,
      {
        "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567",
        "message": {
          "data": "V29ybGQ=",
          "messageId": "2759155988927083",
          "publishTime": "2021-07-22T17:47:19.964Z"
        }
      }
    

    Eventi per Cloud Run for Anthos:

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: google.cloud.pubsub.topic.v1.messagePublished
      source: //pubsub.googleapis.com/projects/project-id/topics/topic-name
      id: 2759155988927083
      time: 2021-07-22T17:47:19.964Z
      dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto
      datacontenttype: application/json
    Extensions,
      knativearrivaltime: 2021-07-22T17:47:20.723302362Z
      knsourcetrigger: link0.09767362059083662
      traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00
    Data,
      {
        "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf",
        "message": {
          "messageId": "2759155988927083",
          "data": "V29ybGQ=",
          "publishTime": "2021-07-22T17:47:19.964Z"
        }
      }
    

Eseguire la pulizia dopo la migrazione

Dopo aver testato e verificato la migrazione del trigger a Eventarc, puoi eliminare il trigger originale di Eventi per Cloud Run for Anthos.

  1. Elimina il trigger di Eventi per Cloud Run for Anthos:

    gcloud beta events triggers delete TRIGGER_NAME \
      --platform gke \
      --namespace EVENTS_NAMESPACE \
      --quiet
    

Hai eseguito la migrazione di un trigger di Eventi per Cloud Run for Anthos esistente a Eventarc.

Passaggi successivi