Come posso attivare un processo AWS Glue in un account AWS in base allo stato di un processo AWS Glue in un altro account?

7 minuti di lettura
0

Desidero creare una pipeline in cui il completamento di un processo AWS Glue in un account AWS avvii un crawler in un altro account.

Breve descrizione

È possibile creare oggetti del catalogo dati AWS Glue chiamati trigger. I trigger possono avviare manualmente o automaticamente uno o più crawler o processi ETL, ma questa funzionalità può essere utilizzata solo all'interno di un account AWS. Non puoi utilizzare questi trigger per avviare crawler o processi ETL che risiedono in un altro account AWS. Per attivare un processo AWS Glue in un account AWS in base allo stato di un processo in un altro account, utilizza Amazon EventBridge e AWS Lambda.

Risoluzione

L'esempio seguente fornisce una panoramica di come si può utilizzare EventBridge e una funzione Lambda per realizzare il proprio caso d'uso. Supponiamo di avere abbia due processi AWS Glue, dove il Processo 1 viene eseguito nell'account AWS A, mentre il Processo 2 nell'account AWS B. Il Processo 2 dipende dal Processo 1.

  1. Crea un router di eventi personalizzato nell'account AWS B e una regola EventBridge nell'account AWS A. La regola EventBridge nell'account A verifica che il Processo 1 AWS Glue sia in stato SUCCEEDED. La destinazione è quindi il router di eventi creato nell'account AWS B.
  2. Crea una funzione Lambda nell'account AWS B che attivi il Processo 2 ETL AWS Glue.
  3. Crea una regola EventBridge nell'account B con il router di eventi personalizzato che hai creato nel passaggio 1. Aggiungi una regola che controlli il Processo 1 AWS Glue in stato SUCCEEDED e la funzione Lambda creata in precedenza come destinazione. La destinazione attiva il Processo ETL 2 AWS Glue quando l'evento arriva, utilizzando le chiamate API AWS Glue.

Per ulteriori informazioni, consulta l'elenco degli Eventi Amazon CloudWatch generati da AWS Glue che possono essere utilizzati nelle regole EventBridge.

Crea un router di eventi personalizzato nell'account B

1.    Nell'account B, apri EventBridge. Seleziona Event buses (Router di eventi), quindi seleziona Create event bus (Crea router di eventi). Aggiungi questa policy basata sulle risorse:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "allow_account_to_put_events",
      "Effect": "Allow",
      "Principal": {
        "AWS": "<Account-A ID>"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:<Account-B Region>:<Account-B ID>:event-bus/<Account-B CustomEventBus Name>"
    }
  ]
}

Nota: assicurati di sostituire gli esempi in <> con i tuoi dati. Ad esempio, sostituisci <Account-B CustomEventBus Name>con il nome del router di eventi creato nell'account B.

2.    Dopo aver creato il router di eventi, annota il suo ARN.

3.    Seleziona il router di eventi personalizzato che hai creato, quindi scegli Actions (Operazioni).

4.    Acegli Start Discovery (Avvia individuazione).

Crea la regola dell'evento nell'account A per il Processo 1

1.    Nell'account A, apri la console EventBridge.

2.    Seleziona Rules (Regole), quindi per Event bus (Router di eventi) seleziona default (impostazione predefinita).

3.    Seleziona Create rule (Crea regola). Aggiungi un Name (Nome), quindi per Rule type (Tipo di regola) seleziona Rule with an event pattern (Regola con un pattern di eventi).

4.    Nella pagina Build event pattern (Crea pattern di eventi), in Creation method (Metodo di creazione), seleziona Rule with an event pattern (Regola con un pattern di eventi). Aggiungi questo JSON:

{
  "source": ["aws.glue"],
  "detail-type": ["Glue Job State Change"],
  "detail": {
    "jobName": ["<Job 1 name>"],
    "severity": ["INFO"],
    "state": ["SUCCEEDED"]
    }
}

Nota: assicurati di sostituire <Job 1 name> con il nome del processo AWS Glue che stai utilizzando.

5.    Per Target types (Tipi di destinazione), seleziona EventBridge event bus (Router di eventi EventBridge), quindi scegli Event bus in another AWS account or Region (Router di eventi in un altro account o regione AWS).

6.    Inserisci l'ARN del router di eventi creato in precedenza nell'account B. Questo ARN viene utilizzato come destinazione.

7.    Per Execution role (Ruolo di esecuzione), seleziona Create a new role for this specific resource (Crea un nuovo ruolo per questa risorsa specifica). Se scegli invece Use existing role (Usa ruolo esistente), assicurati che la tua policy di AWS Identity and Access Management (IAM) abbia le seguenti autorizzazioni:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "events:PutEvents"
      ],
      "Resource": [
        "arn:aws:events:<Account-B Region>:<Account-B ID>:event-bus/<Account-B CustomEventBus Name>"
      ]
    }
  ]
}

Nota: assicurati di sostituire <Account-B CustomEventBus Name> in questo esempio con il nome del router di eventi creato nell'account B.

8.    Scegli Next (Avanti), rivedi le impostazioni e seleziona Create (Crea).

Crea una funzione Lambda nell'account B con una destinazione che avvia il Processo 2 AWS Glue

1.    Apri la console Lambda.

2.    Scegli Functions (Funzioni), quindi seleziona Create function (Crea funzione).

3.    Inserisci un nome per la funzione; per Runtime scegli la versione Python 3.x.

4.    In Change default execution role (Cambia ruolo di esecuzione predefinito), seleziona Create a new role with basic Lambda permissions (Crea un nuovo ruolo con autorizzazioni Lambda di base).

5.    Se stai utilizzando un ruolo esistente, assicurati che abbia le autorizzazioni necessarie. In caso contrario, aggiungi queste autorizzazioni utilizzando la console IAM. Per cominciare, aggiungi AWSGlueServiceRole (policy di gestione AWS). Quindi, assegna a Lambda le autorizzazioni IAM per l'esecuzione in base agli eventi:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "logs:CreateLogGroup",
      "Resource": "arn:aws:logs:<Account-B Region>:<Account-B ID>:*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:<Account-B Region>:<Account-B ID>:log-group:/aws/lambda/<Lambda Function Name>:*"
      ]
    }
  ]
}

Nota: assicurati di sostituire gli esempi in <> con i tuoi dati. Ad esempio, sostituisci <Account-B ID> con l'ID dell'account B

6.    Scegli Create function (Crea funzione).

7.    Aggiungi questo codice nella sezione codice della funzione che hai creato:

# Set up logging
import json
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# Import Boto 3 for AWS Glue
import boto3
client = boto3.client('glue')

# Variables for the job: 
glueJobName = "<Job 2 Name>"

# Define Lambda function
def lambda_handler(event, context):
    logger.info('## INITIATED BY EVENT: ')
    response = client.start_job_run(JobName = glueJobName)
    logger.info('## STARTED GLUE JOB: ' + glueJobName)
    logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
    return response.

Nota: assicurati di sostituire <Job 2 Name> con il nome del processo AWS Glue che stai utilizzando nell'account A.

8.    Scegli Deploy (Implementa). Ora puoi testare la funzione per verificare che attivi il Processo 2 nell'account B.

Crea una regola di evento nell'account B per il Processo 1

1.    Nell'account B, apri la console EventBridge.

2.    Scegli Rules (Regole), quindi seleziona il router di eventi creato in precedenza.

3.    Crea una nuova regola nel router di eventi. Inserisci un Rule name (Nome regola) e per Rule type (Tipo di regola), scegli Rule with an event pattern (Regola con un pattern di eventi).

4.    Nella pagina Build event pattern (Crea pattern di eventi), al metodo di creazione, scegli Custom pattern (Modello personalizzato), quindi aggiungi questo JSON:

{
  "source": ["aws.glue"],
  "detail-type": ["Glue Job State Change"],
  "detail": {
    "jobName": ["<Job 1 name>"],
    "severity": ["INFO"],
    "state": ["SUCCEEDED"]
  }
}

Nota: assicurati di sostituire <Job 1 name> con il nome del processo AWS Glue che stai utilizzando nell'account B.

5.    Nella pagina Select Targets (Seleziona destinazioni), per i Target types (Tipi di destinazione) seleziona AWS service (Servizio AWS).

6.    In Select target (Seleziona destinazione), scegli o digita Lambda function (Funzione Lambda), quindi seleziona la funzione che hai creato in precedenza dall'elenco a tendina.

7.    Scegli Next (Avanti), rivedi le impostazioni e seleziona Create (Crea).

Testa il trigger del processo AWS Glue su account incrociati

1.    Esegui il Processo 1 nell'account A. Al termine del processo, viene inviato uno stato SUCCEEDED al router di eventi nell'account A.

2.    L'account A invia le informazioni sull'evento al router di eventi nell'account B.

3.    Il router di eventi nell'account B esegue la regola degli eventi. Questa regola di evento attiva la funzione Lambda nell'account B. Per controllare i log Lambda, apri la console Amazon CloudWatch, scegli Log groups (Gruppi di log) quindi seleziona il tuo gruppo di funzioni Lambda. Il gruppo di funzioni è nel formato /aws/lambda/<LambdaFunctionName>.

4.    La funzione Lambda attiva il Processo 2 nell'account B.


Informazioni correlate

Sending and receiving Amazon EventBridge events between AWS accounts (Invio e ricezione di eventi Amazon EventBridge tra account AWS)

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa