0

Je veux utiliser CloudFormation pour créer un seau S3 qui déclenchera la fonction Lambda chaque fois qu'un événement S3 se produit comme la création de fichiers, la suppression de fichiers, etc.modèle CloudFormation pour déclencher Lambda sur l'événement S3

De mes recherches, je ont mon AWS::Lambda::Function et AWS::S3::Bucket configuration,

AWSTemplateFormatVersion: '2010-09-09' 
Resources: 
    HandleFileCreation: 
    Type: "AWS::Lambda::Function" 
    Properties: 
     ... 

    LambdaExecutionRole: 
    Type: AWS::IAM::Role 
    Properties: 
     ManagedPolicyArns: 
     - arn:aws:iam::aws:policy/AmazonS3FullAccess 
     - arn:aws:iam::aws:policy/AWSLambdaFullAccess 
     AssumeRolePolicyDocument: 
     ... 

    ReportsBucket: 
    Type: AWS::S3::Bucket 

    BucketPolicy: 
    Type: AWS::S3::BucketPolicy 
    Properties: 
     Bucket: !Ref ReportsBucket 
     PolicyDocument: 
     ... 

Je regardais la AWS::Events::Rule, mais l'exemple est seulement pour EC2 et je ne peux pas trouver des exemples pour S3

EventRule: 
    Type: "AWS::Events::Rule" 
    Properties: 
     Description: "EventRule" 
     EventPattern: 
     source: 
      - "aws.ec2" 
     detail-type: 
      - "EC2 Instance State-change Notification" 
     detail: 
      state: 
      - "stopping" 
     State: "ENABLED" 
     Targets: 
     - 
      Arn: 
      Fn::GetAtt: 
       - HandleFileCreation 
       - Arn 
      Id: TargetFunctionV1 
    PermissionForEventsToInvokeLambda: 
    Type: AWS::Lambda::Permission 
    Properties: 
     FunctionName: 
     Ref: HandleFileCreation 
     Action: "lambda:InvokeFunction" 
     Principal: "events.amazonaws.com" 
     SourceArn: 
     Fn::GetAtt: 
      - "EventRule" 
      - "Arn" 

Comment écrire le modèle à déclencher sur les événements S3?

Répondre

1

Voici un exemple couvert,

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html

EncryptionServiceBucket: 
    Type: "AWS::S3::Bucket" 
    Properties: 
    BucketName: !Sub ${User}-encryption-service 
    NotificationConfiguration: 
     LambdaConfigurations: 
     - 
      Function: !Ref LambdaDeploymentArn 
      Event: "s3:ObjectCreated:*" 
      Filter: 
      S3Key: 
       Rules: 
       - 
        Name: suffix 
        Value: zip 

Une question que j'ai remarqué, vous devez créer la fonction avant d'attribuer un déclencheur à elle. Si vous faites avec CF, assurez-vous de créer la fonction lambda avant de créer le déclencheur.

Espérons que ça aide.

+0

Je reçois une erreur 'AWS :: S3 :: Bucket \t ReportsBucket \t L'ARN n'est pas bien formé ID physique: quelque-prefix-us-ouest-2-test-43a8dcf' qui fait référence à mon nom de compartiment' BucketName: ! Rejoindre ['-', ['un-préfixe',! Ref Région,! Ref Stage]] ' –