View a markdown version of this page

Guida introduttiva: crea una Amazon EventBridge pipe - Amazon EventBridge

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

Guida introduttiva: crea una Amazon EventBridge pipe

Per acquisire familiarità con le pipe e le loro funzionalità, utilizzeremo un CloudFormation modello per configurare una EventBridge pipe e i componenti associati. Quindi possiamo esplorare le varie caratteristiche delle pipe.

Suggerimento

Per un'esperienza di apprendimento più completa e pratica, provate il EventBridge Pipes Workshop. Questo workshop interattivo ti guida nella creazione e nella risoluzione dei problemi di una pipe che collega DynamoDB ad API Gateway con un arricchimento Lambda.

Il modello crea una EventBridge pipe che collega un flusso da una tabella DynamoDB a una coda Amazon SQS. Ogni volta che un record viene creato o modificato nella tabella del database, la pipe invia l'evento risultante alla coda.

La pipe distribuita è composta da:

  • Una tabella (e stream) DynamoDB che funge da sorgente della pipe e una coda Amazon SQS come destinazione.

  • Un ruolo di esecuzione che concede le autorizzazioni necessarie per accedere EventBridge alla tabella DynamoDB e alla coda Amazon SQS.

  • La pipe stessa, che contiene un filtro degli eventi che seleziona solo gli eventi generati quando un elemento della tabella viene creato (inserito) o modificato.

Per dettagli tecnici specifici del modello, consultaDettagli del modello.

Gli eventi del database vengono abbinati a un filtro e inviati a una coda se corrispondono.

Creazione della pipe utilizzando CloudFormation

Per creare la pipe e le risorse associate, creeremo un CloudFormation modello e lo useremo per creare uno stack contenente una pipe di esempio, completa di source e target.

Importante

Ti verranno addebitate le risorse Amazon utilizzate se crei uno stack a partire da questo modello.

Innanzitutto, crea il CloudFormation modello.

  1. Nella sezione Modello, fai clic sull’icona di copia nella scheda JSON o YAML per copiare i contenuti del modello.

  2. Copia i contenuti del modello in un nuovo file.

  3. Salva il file localmente.

Quindi, usa il modello che hai salvato per eseguire il provisioning di uno CloudFormation stack.

  1. Apri la CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation/.

  2. Nella pagina Stack, scegli Con nuove risorse (standard) nel menu Crea stack.

  3. Specifica il modello:

    1. In Prerequisito, seleziona Scegli un modello esistente.

    2. In Specifica modello, seleziona Carica un file di modello.

    3. Seleziona Scegli file, quindi passa al file del modello e selezionalo.

    4. Scegli Avanti.

  4. Specifica i dettagli dello stack:

    1. Inserisci un nome dello stack.

    2. Per i parametri, accettate i valori predefiniti o inserite i vostri.

    3. Scegli Avanti.

  5. Configura le opzioni dello stack:

    1. In Opzioni di errore dello stack, scegli Elimina tutte le nuove risorse create.

      Nota

      Scegliendo questa opzione si evita di ricevere addebiti per risorse la cui policy di eliminazione specifica che devono essere mantenute anche se la creazione dello stack non riesce. Per ulteriori informazioni, consulta la pagina relativa all’attributo DeletionPolicy nella Guida per l’utente di CloudFormation .

    2. Accetta tutti gli altri valori predefiniti.

    3. In Capacità, seleziona la casella per confermare che CloudFormation potrebbe creare risorse IAM nel tuo account.

    4. Scegli Avanti.

  6. Rivedi i dettagli dello stack e scegli Invia.

Crea lo stack usando CloudFormation (AWS CLI)

Puoi anche usare il AWS CLI per creare lo stack.

  • Utilizza il comando create-stack.

    • Accettate i valori predefiniti dei parametri del modello, specificando il nome dello stack. Utilizzate il template-body parametro per passare il contenuto del modello o template-url per specificare una posizione URL.

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ --template-body template-contents \ --capabilities CAPABILITY_IAM
    • Sostituisci i valori predefiniti di uno o più parametri del modello. Ad esempio:

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ --template-body template-contents \ --parameters \ ParameterKey=SourceTableName,ParameterValue=pipe-example-source \ ParameterKey=TargetQueueName,ParameterValue=pipe-example-target \ ParameterKey=PipeName,ParameterValue=pipe-with-filtering-example \ --capabilities CAPABILITY_IAM

CloudFormation crea lo stack. Una volta completata la creazione dello stack, le relative risorse sono pronte per l’uso. Puoi utilizzare la scheda Risorse nella pagina dei dettagli dello stack per visualizzare le risorse di cui hai effettuato il provisioning nel tuo account.

Esplorazione delle funzionalità di pipe

Una volta creata la tubazione, è possibile utilizzare la EventBridge console per osservarne il funzionamento e la consegna degli eventi di test.

  1. Aprire la EventBridge console all'indirizzo https://console.aws.amazon.com/events/home? #/tubi.

  2. Scegli la pipa che hai creato.

    Nella pagina dei dettagli della tubazione, la sezione Componenti della tubazione mostra le risorse che compongono la tubazione e contiene schede che forniscono maggiori dettagli su ciascun componente.

    La pagina dei dettagli della tubazione mostra graficamente i componenti di origine, filtro e destinazione della tubazione.

    Puoi trovare il ruolo di esecuzione che abbiamo creato per la pipe nella scheda Impostazioni, nella sezione Autorizzazioni.

Esame del filtro per tubi

Prima di testare il funzionamento della pipe, esaminiamo il filtro che abbiamo specificato per controllare quali eventi vengono inviati alla destinazione. La pipe invierà solo eventi che corrispondono ai criteri di filtro alla destinazione; tutti gli altri vengono scartati. In questo caso, vogliamo che solo gli eventi generati quando le voci della tabella vengono create o modificate vengano inviati alla coda Amazon SQS.

  • Nella pagina dei dettagli della tubazione, in Pipe Components, seleziona la scheda Filtraggio.

    Abbiamo incluso un filtro che seleziona solo gli eventi in cui eventName è impostato su o. INSERT MODIFY

    { "eventName": ["INSERT", "MODIFY"] }

Invio di eventi tramite la pipe

Successivamente, genereremo eventi nella sorgente della pipe per verificare che il filtraggio e la distribuzione delle pipe funzionino correttamente. Per fare ciò, creeremo e modificheremo un elemento nella tabella DynamoDB che abbiamo specificato come sorgente della pipe.

  1. Nella pagina dei dettagli della tubazione, in Pipe Components, scegli la scheda Source.

  2. In Source, scegli il nome dello stream DynamoDB.

    Si apre la console DynamoDB in una finestra separata, con i dettagli della tabella di origine visualizzati.

  3. Scegli Esplora elementi.

  4. Genera un INSERT evento creando un elemento nella tabella:

    1. Scegli Crea elemento.

    2. Aggiungi valori per gli attributi Album e Artista.

    3. Scegli Crea elemento.

  5. Genera un evento DELETE e un INSERT evento modificando l'elemento:

    1. Scegliete l'elemento dall'elenco e dal menu Azioni, scegliete Modifica elemento.

    2. Inserisci un nuovo valore per l'attributo Album o Artista.

    3. Seleziona la casella che conferma che stai modificando il valore delle chiavi degli elementi, quindi scegli Ricrea elemento.

      In questo modo l'elemento viene eliminato e quindi ricreato, generando un DELETE evento e quindi un nuovo evento. INSERT

  6. Genera un MODIFY evento aggiungendo un attributo all'elemento:

    1. Scegliete l'elemento dall'elenco e dal menu Azioni, scegliete Modifica elemento.

    2. Dal menu Aggiungi nuovo attributo, scegli Numero.

    3. Per il nome dell'attributo, inserite Anno, quindi immettete un valore per l'attributo. Selezionare Save and close (Salva e chiudi).

Conferma della consegna dell'evento tramite la pipe

Infine, confermeremo che la pipe ha filtrato e consegnato correttamente gli eventi che abbiamo generato creando e modificando l'elemento della tabella in DynamoDB.

  1. Nella pagina dei dettagli della tubazione, in Pipe Components, scegli la scheda Target.

  2. In Target, scegli il nome della coda Amazon SQS.

    Si apre la console Amazon SQS in una finestra separata, con i dettagli della coda di destinazione.

  3. Scegli Invia e ricevi messaggi.

  4. In Ricevi messaggi, scegli Sondaggio per i messaggi.

    Amazon SQS carica i messaggi ricevuti nella coda. Fai clic su un singolo messaggio per visualizzarne i dettagli.

    Dovrebbero esserci tre messaggi relativi agli eventi nella coda:

    • Due di tipoINSERT, uno generato quando hai creato per la prima volta l'elemento della tabella e l'altro generato quando hai ricreato l'elemento modificando un valore chiave.

    • Uno di tipoMODIFY, generato quando hai aggiunto un attributo all'elemento della tabella.

    Notate che DELETE nella coda non è presente un messaggio di evento di tipo, anche se ne è stato generato uno quando avete eliminato e ricreato l'elemento della tabella modificando un valore chiave. Il filtro pipe che abbiamo specificato seleziona solo on INSERT andMODIFY, quindi la pipe ha filtrato l'DELETEevento anziché inviarlo alla coda.

Pulizia: eliminazione delle risorse

Come passaggio finale, elimineremo lo stack e le risorse in esso contenute.

Importante

Ti verranno fatturate le risorse Amazon contenute nello stack per tutto il tempo in cui esisteranno.

  1. Apri la CloudFormation console all'indirizzo. https://console.aws.amazon.com/cloudformation/

  2. Nella pagina Stack, scegli lo stack creato dal modello, poi scegli Elimina, quindi conferma con Elimina.

    CloudFormation avvia l'eliminazione dello stack e di tutte le risorse che include.

CloudFormation dettagli del modello

Questo modello crea risorse e concede autorizzazioni nel tuo account.

Resources

Il CloudFormation modello per questo tutorial creerà le seguenti risorse nel tuo account:

Importante

Ti verranno addebitate le risorse Amazon utilizzate se crei uno stack con questo modello.

  • AWS::DynamoDB::Table: una tabella DynamoDB che funge da sorgente di eventi per la pipe.

  • AWS::SQS::Queue: una coda Amazon SQS che funge da destinazione per gli eventi che fluiscono attraverso la pipe.

  • AWS::IAM::Role: un ruolo di esecuzione IAM che concede le autorizzazioni al servizio Pipes nel tuo account EventBridge .

  • AWS::Pipes::Pipe: La pipe che collega la tabella DynamoDB alla coda Amazon SQS.

Permissions

Il modello include una AWS::IAM::Role risorsa che rappresenta un ruolo di esecuzione. Questo ruolo concede al servizio EventBridge Pipes (pipes.amazonaws.com) le seguenti autorizzazioni nel tuo account.

Le seguenti autorizzazioni sono limitate alla tabella DynamoDB e trasmettono in streaming il modello creato come origine dell'evento per la pipe:

  • dynamodb:DescribeStream

  • dynamodb:GetRecords

  • dynamodb:GetShardIterator

  • dynamodb:ListStreams

Le seguenti autorizzazioni sono limitate alla coda Amazon SQS creata dallo stack come destinazione della pipe:

  • sqs:SendMessage

CloudFormation modello

Salva il seguente codice JSON o YAML come file separato da utilizzare come CloudFormation modello per questo tutorial.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description" : "[AWSDocs] EventBridge: pipes-get-started", "Parameters" : { "SourceTableName" : { "Type" : "String", "Default" : "pipe-example-source", "Description" : "Specify the name of the table to provision as the pipe source, or accept the default." }, "TargetQueueName" : { "Type" : "String", "Default" : "pipe-example-target", "Description" : "Specify the name of the queue to provision as the pipe target, or accept the default." }, "PipeName" : { "Type" : "String", "Default" : "pipe-with-filtering-example", "Description" : "Specify the name of the table to provision as the pipe source, or accept the default." } }, "Resources": { "PipeSourceDynamoDBTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [{ "AttributeName": "Album", "AttributeType": "S" }, { "AttributeName": "Artist", "AttributeType": "S" } ], "KeySchema": [{ "AttributeName": "Album", "KeyType": "HASH" }, { "AttributeName": "Artist", "KeyType": "RANGE" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 10, "WriteCapacityUnits": 10 }, "StreamSpecification": { "StreamViewType": "NEW_AND_OLD_IMAGES" }, "TableName": { "Ref" : "SourceTableName" } } }, "PipeTargetQueue": { "Type": "AWS::SQS::Queue", "Properties": { "QueueName": { "Ref" : "TargetQueueName" } } }, "PipeTutorialPipeRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "pipes.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition" }, ":pipes:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":pipe/", { "Ref": "PipeName" } ] ] }, "aws:SourceAccount": { "Ref" : "AWS::AccountId" } } } }] }, "Description" : "EventBridge Pipe template example. Execution role that grants the pipe the permissions necessary to send events to the specified pipe.", "Path": "/", "Policies": [{ "PolicyName": "SourcePermissions", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListStreams" ], "Resource": [ { "Fn::GetAtt" : [ "PipeSourceDynamoDBTable", "StreamArn" ] } ] }] } }, { "PolicyName": "TargetPermissions", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": [ { "Fn::GetAtt" : [ "PipeTargetQueue", "Arn" ] } ] }] } } ] } }, "PipeWithFiltering": { "Type": "AWS::Pipes::Pipe", "Properties": { "Description" : "EventBridge Pipe template example. Pipe that receives events from a DynamoDB stream, applies a filter, and sends matching events on to an SQS Queue.", "Name": { "Ref" : "PipeName" }, "RoleArn": {"Fn::GetAtt" : ["PipeTutorialPipeRole", "Arn"] }, "Source": { "Fn::GetAtt" : [ "PipeSourceDynamoDBTable", "StreamArn" ] }, "SourceParameters": { "DynamoDBStreamParameters" : { "StartingPosition" : "LATEST" }, "FilterCriteria" : { "Filters" : [ { "Pattern" : "{ \"eventName\": [\"INSERT\", \"MODIFY\"] }" }] } }, "Target": { "Fn::GetAtt" : [ "PipeTargetQueue", "Arn" ] } } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] EventBridge: pipes-get-started' Parameters: SourceTableName: Type: String Default: pipe-example-source Description: Specify the name of the table to provision as the pipe source, or accept the default. TargetQueueName: Type: String Default: pipe-example-target Description: Specify the name of the queue to provision as the pipe target, or accept the default. PipeName: Type: String Default: pipe-with-filtering-example Description: Specify the name of the table to provision as the pipe source, or accept the default. Resources: PipeSourceDynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: Album AttributeType: S - AttributeName: Artist AttributeType: S KeySchema: - AttributeName: Album KeyType: HASH - AttributeName: Artist KeyType: RANGE ProvisionedThroughput: ReadCapacityUnits: 10 WriteCapacityUnits: 10 StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES TableName: !Ref SourceTableName PipeTargetQueue: Type: AWS::SQS::Queue Properties: QueueName: !Ref TargetQueueName PipeTutorialPipeRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: pipes.amazonaws.com Action: sts:AssumeRole Condition: StringLike: aws:SourceArn: !Join - '' - - 'arn:' - !Ref AWS::Partition - ':pipes:' - !Ref AWS::Region - ':' - !Ref AWS::AccountId - ':pipe/' - !Ref PipeName aws:SourceAccount: !Ref AWS::AccountId Description: EventBridge Pipe template example. Execution role that grants the pipe the permissions necessary to send events to the specified pipe. Path: / Policies: - PolicyName: SourcePermissions PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - dynamodb:DescribeStream - dynamodb:GetRecords - dynamodb:GetShardIterator - dynamodb:ListStreams Resource: - !GetAtt PipeSourceDynamoDBTable.StreamArn - PolicyName: TargetPermissions PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sqs:SendMessage Resource: - !GetAtt PipeTargetQueue.Arn PipeWithFiltering: Type: AWS::Pipes::Pipe Properties: Description: EventBridge Pipe template example. Pipe that receives events from a DynamoDB stream, applies a filter, and sends matching events on to an SQS Queue. Name: !Ref PipeName RoleArn: !GetAtt PipeTutorialPipeRole.Arn Source: !GetAtt PipeSourceDynamoDBTable.StreamArn SourceParameters: DynamoDBStreamParameters: StartingPosition: LATEST FilterCriteria: Filters: - Pattern: '{ "eventName": ["INSERT", "MODIFY"] }' Target: !GetAtt PipeTargetQueue.Arn