Avvio di un flusso di lavoro AWS Glue con un evento Amazon EventBridge - AWS Aderenza

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Avvio di un flusso di lavoro AWS Glue con un evento Amazon EventBridge

Amazon EventBridge, conosciuto anche come CloudWatch Events, ti consente di automatizzare i servizi AWS e rispondere automaticamente a eventi di sistema, come i problemi relativi alla disponibilità delle applicazioni o le modifiche delle risorse. Gli eventi dei servizi AWS vengono recapitati a EventBridge quasi in tempo reale. Puoi compilare regole semplici che indichino quali eventi sono considerati di interesse per te e quali azioni automatizzate intraprendere quando un evento corrisponde a una regola.

Con il supporto EventBridge, AWS Glue può servire come produttore e consumer di eventi in un'architettura basata sugli eventi. Per i flussi di lavoro, AWS Glue supporta qualsiasi tipo di evento EventBridge come consumer. Il caso d'uso più comune è l'arrivo di un nuovo oggetto in un bucket Amazon S3. Se si dispone di dati che arrivano a intervalli irregolari o non definiti, è possibile elaborare questi dati il più vicino possibile al loro arrivo.

Nota

AWS Glue non fornisce la consegna garantita dei messaggi EventBridge. AWS Glue non esegue la deduplicazione se EventBridge fornisce messaggi duplicati. È necessario gestire l'idempotenza in base al proprio caso d'uso.

Assicurati di configurare correttamente le regole EventBridge per evitare l'invio di eventi indesiderati.

Prima di iniziare

Se desideri avviare un flusso di lavoro con gli eventi di dati Amazon S3, devi assicurarti che gli eventi per il bucket S3 di interesse siano registrati su AWS CloudTrail ed EventBridge. A questo scopo, devi creare un persorso CloudTrail. Per ulteriori informazioni, consulta Creazione di un percorso per il tuo accountAWS.

Per avviare un flusso di lavoro con un evento EventBridge
Nota

Nei comandi seguenti, sostituisci:

  • <workflow-name> con il nome da assegnare al flusso di lavoro.

  • <trigger-name> con il nome da assegnare al trigger.

  • <bucket-name> con il nome del bucket Amazon S3.

  • <account-id> con un ID dell'account AWS valido.

  • <region> con il nome della regione (ad esempio us-east-1).

  • <rule-name> con il nome da assegnare alla regola EventBridge.

  1. Assicurati di disporre delle autorizzazioni AWS Identity and Access Management (IAM) per creare e visualizzare le regole e le destinazioni EventBridge. Di seguito è riportato una policy di esempio che è possibile allegare. Potresti ridurre il suo ambito per applicare restrizioni alle operazioni e alle risorse.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:DisableRule", "events:DeleteRule", "events:PutTargets", "events:RemoveTargets", "events:EnableRule", "events:List*", "events:Describe*" ], "Resource": "*" } ] }
  2. Crea un ruolo IAM che il servizio EventBridge può assumere nel passaggio di un evento a AWS Glue.

    1. Nella pagina Create role (Crea ruolo) della console IAM, seleziona Service AWS (Servizio AWS). Quindi scegli il servizio CloudWatch Events.

    2. Completa la procedura guidata Create role (Crea ruolo). La procedura guidata allega automaticamente il CloudWatchEventsBuiltInTargetExecutionAccess e le policy CloudWatchEventsInvocationAccess.

    3. Allega la seguente policy inline al ruolo. Questa policy consente al servizio EventBridge di indirizzare gli eventi ad AWS Glue.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:notifyEvent" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>" ] } ] }
  3. Inserisci il seguente comando per creare il flusso di lavoro.

    Per ulteriori informazioni sui parametri della riga di comando aggiuntivi, consulta create-workflow nel Riferimento ai comandi AWS CLI.

    aws glue create-workflow --name <workflow-name>
  4. Inserisci il comando seguente per creare un trigger di evento EventBridge per il flusso di lavoro. Questo sarà il trigger di avvio per il flusso di lavoro. Sostituisci <actions> con le azioni da eseguire (i processi e i crawler da avviare).

    Consulta create-trigger nel Riferimento ai comandi AWS CLI per informazioni su come codificare l'argomento actions.

    aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --actions <actions>

    Se svuoi che il flusso di lavoro venga attivato da un batch di eventi anziché da un singolo evento EventBridge, inserisci il comando seguente.

    aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --event-batching-condition BatchSize=<number-of-events>,BatchWindow=<seconds> --actions <actions>

    Per l'argomento event-batching-condition, BatchSize è obbligatorio e BatchWindow è facoltativo. Se BatchWindow viene omesso, il valore predefinito della finestra è 900 secondi, ovvero la dimensione massima della finestra.

    Nell'esempio seguente viene creato un trigger che avvia il flusso di lavoro eventtest dopo l'arrivo di tre eventi EventBridge o cinque minuti dopo l'arrivo del primo evento, a seconda di quale evento si verifica per primo.

    aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1
  5. Crea una regola in Amazon EventBridge.

    1. Crea l'oggetto JSON per i dettagli della regola nell'editor di testo che preferisci.

      Nell'esempio seguente viene specificato Amazon S3 come origine evento, PutObjectcome nome dell'evento e il nome del bucket come parametro di richiesta. Questa regola avvia un flusso di lavoro quando un nuovo oggetto arriva nel bucket.

      { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject" ], "requestParameters": { "bucketName": [ "<bucket-name>" ] } } }

      Per avviare il flusso di lavoro quando un nuovo oggetto arriva in una cartella all'interno del bucket, è possibile sostituire il codice seguente con requestParameters.

      "requestParameters": { "bucketName": [ "<bucket-name>" ] "key" : [{ "prefix" : "<folder1>/<folder2>/*"}}] }
    2. Utilizza lo strumento che preferisci per convertire l'oggetto JSON regola in una stringa di escape.

      {\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>\"\n ]\n }\n }\n}
    3. Esegui il comando seguente per creare un modello di parametro JSON che puoi modificare per specificare i parametri di input in un comando put-rulesuccessivo. Salva l'output in un file. Per questo esempio, il file è denominato ruleCommand.

      aws events put-rule --name <rule-name> --generate-cli-skeleton >ruleCommand

      Per ulteriori informazioni sul parametro --generate-cli-skeleton, consulta Generazione di parametri di input e skeleton AWS CLI da un file di input JSON o YAML nella Guida per l'utente di AWS.

      Il file di output deve essere simile al seguente.

      { "Name": "", "ScheduleExpression": "", "EventPattern": "", "State": "ENABLED", "Description": "", "RoleArn": "", "Tags": [ { "Key": "", "Value": "" } ], "EventBusName": "" }
    4. Modifica il file per rimuovere facoltativamente i parametri e specificare come minimo i parametri Name, EventPattern, eState. Per il parametro EventPattern, specifica la stringa di escape per i dettagli della regola creati in un passaggio precedente.

      { "Name": "<rule-name>", "EventPattern": "{\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>\"\n ]\n }\n }\n}", "State": "DISABLED", "Description": "Start an AWS Glue workflow upon new file arrival in an Amazon S3 bucket" }
      Nota

      È consigliabile lasciare disabilitata la regola fino a quando non si completa la creazione del flusso di lavoro.

    5. Immetti la seguente comando put-rule, che legge i parametri di input dal file ruleCommand.

      aws events put-rule --name <rule-name> --cli-input-json file://ruleCommand

      Il seguente output indica il successo.

      {
          "RuleArn": "<rule-arn>"
      }
      
  6. Immetti il seguente comando per collegare la regola alla destinazione. La destinazione è il flusso di lavoro in AWS Glue. Sostituisci <role-name> con il ruolo creato all'inizio di questa procedura.

    aws events put-targets --rule <rule-name> --targets "Id"="1","Arn"="arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>","RoleArn"="arn:aws:iam::<account-id>:role/<role-name>" --region <region>

    Il seguente output indica il successo.

    {
        "FailedEntryCount": 0,
        "FailedEntries": []
    }
  7. Conferma la corretta connessione della regola e della destinazione inserendo il comando seguente.

    aws events list-rule-names-by-target --target-arn arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>

    Il seguente output indica il successo, nel quale <rule-name> è il nome della regola creata.

    {
        "RuleNames": [
            "<rule-name>"
        ]
    }
    
  8. Accedi alla AWS Management Console, quindi apri la console AWS Glue all'indirizzo https://console.aws.amazon.com/glue/.

  9. Seleziona il flusso di lavoro e verifica che il trigger di avvio e le relative azioni, ovvero i processi o i crawler che avvia, vengano visualizzati nel grafico del flusso di lavoro. Poi, continua con la procedura in Fase 3: aggiunta di più trigger. In alternativa, aggiungi altri componenti al flusso di lavoro utilizzando l'API AWS Glue oAWS Command Line Interface.

  10. Quando il flusso di lavoro è specificato completamente, abilita la regola.

    aws events enable-rule --name <rule-name>

    Ora il flusso di lavoro è pronto per essere avviato da un evento EventBridge o un batch di eventi.