Pubblicato il 03/08/2022 da alnao nella categoria AWS

Il servizio EventBridge è studiato anche per essere configurato con CloudFormation: i trigger tipicamente sono costruiti tramite template che creano il servizio scatenante e anche la destinazione dell’evento, per esempio un trigger su un bucket S3 può essere descritto con una semplice regola dove si definisce la sorgente (source) e la destinazione (target):

  TriggerOnFilePutEventRule:
Type: AWS::Events::Rule
Properties:
EventBusName: default
EventPattern:
source:
- "aws.s3"
detail-type:
- "Object Created"
detail:
bucket:
name:
- !Ref SourceBucket
object:
key:
- prefix: !Ref SourcePath
Targets:
- Id: id1
Arn: !GetAtt LambdaTarget.Arn

Se usata questa modalità di “EventPattern” si deve controllare se il bucket sorgente è abilitato a generare eventi in CloudBridge, senza questa abilitazione gli eventi non vengono generati dai bucket quindi i trigger non viene avviato.

Mentre un evento schedulato può essere definito con un semplice template

  CloudBridgeSchedule:
Type: AWS::Events::Rule
Properties:
State: "ENABLED"
ScheduleExpression: cron(5 0 * * ? *)
Targets:
- Id: id1
Arn: !GetAtt CustomLambda.Arn

Da notare che il ? è obbligatorio perchè si riferisce al giorno della settimana previsto dalla configurazione CRON di AWS e bisogna sempre ricordare che gli orari sono impostati sul fuso orario inglese (GMT) e non quello italiano (CEST). Maggiori dettagli si possono trovare nella pagina ufficiale della documentazione di riferimento per gli eventi schedulati nel sito AWS. In caso di eventi definiti con CloudFormation che hanno destinazione in funzioni lambda bisogna ricordarsi di aggiungere nel template la definizione del “permission”, senza questo dettaglio ulteriore l’evento non sarà autorizzato ad eseguire la funzione e si genererà un errore in fase di esecuzione dell’evento stesso, la definizione è molto semplice e va a legale i due ARN di evento e lambda:

  SchedulePermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName: !GetAtt CustomLambda.Arn
Principal: events.amazonaws.com
SourceArn: !GetAtt CloudBridgeSchedule.Arn

In alcune documentazioni e in molti articolo si può trovare una vecchie versione dei template che usava CloudTrail per generare gli eventi in CloudBridge, questa modalità è da considerare obsoleta e non conviene usarla in quanto legata al CloudTrail mentre la nuova modalità usa solo il servizio CloudBridge più efficente. La vecchia versione dell’oggetto EventPattern era del tipo:

      EventPattern:
source:
- "aws.s3"
detail:
eventSource:
- 's3.amazonaws.com'
eventName:
- 'CopyObject'
- 'PutObject'
requestParameters:
bucketName:
- !Ref SourceBucket
key:
- prefix: !Ref SourcePath