3 votes

Configuration de la notification S3 de CloudFormation vers SQS

Je suis nouveau dans le domaine de CloudFormation et j'essaie actuellement d'envoyer une S3:ObjectCreated à un File d'attente SQS .

La configuration est dans le Serverless Framework avec des ressources définies dans CloudFormation. Le problème est le suivant NotificationConfiguration avec un QueueConfigurations qui ne cesse de donner erreur sur erreur.

La syntaxe ci-dessous semble être correcte lorsqu'on regarde le CloudFormation Designer en ligne :

  iamRoleStatements:
    - Effect: Allow
      Action:
        - s3:ListBucket
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: LabelBucket

    - Effect: Allow
      Action:
        - s3:GetObject
        - s3:PutObject
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: LabelBucket
            - "/*"

    - Effect: Allow
      Action:
        - SQS:SendMessage
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: LabelBucket

resources:
  Resources:
    LabelRequestQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: label-generate-request

    LabelResponseQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: label-generate-response

    LabelBucket:
      Type: AWS::S3::Bucket
      DependsOn:
          - LabelResponseQueue
      Properties:
        BucketName: generation-bucket
        NotificationConfiguration:
          QueueConfigurations:
            - Event: 's3:ObjectCreated:Put'
              Queue: 'arn:aws:sqs:eu-west-1:539106611526:label-generate-response'

L'erreur exacte pour cette ressource est :

An error occurred: CarrierLabelBucket - Unable to validate the following destination configurations (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: 12A3D93761EFFEAD; S3 Extended Request ID: Zfk2XKEKHhqtafaiFvrcpzyO8nHB6qOJs4gqJXpkOyhxSMgDTsUzZ0lQnYIrTEr2SVHhgMHw0ds=).

0voto

La dernière réponse de Nick est en fait la bonne.

Si - et quand - vous configurez vos ressources Bucket S3 + Queue SQS + Politique, cela fonctionnera.

Je l'ai fait comme ça :

resources:
  Resources:
    MyBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.settings.s3_bucket}
        NotificationConfiguration:
          QueueConfigurations:
            - Event: s3:ObjectCreated:Put
              Queue: "arn:aws:sqs:#{AWS::Region}:#{AWS::AccountId}:${self:custom.settings.transmit_queue}"
      DependsOn : SQSQueuePolicy

    TransmitQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: ${self:custom.settings.transmit_queue}

    SQSQueuePolicy:
      Type: AWS::SQS::QueuePolicy
      Properties:
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                AWS: "*"
              Action: SQS:SendMessage
              Resource: "*"
              Condition:
                ArnLike:
                  aws:SourceArn: "arn:aws:s3:::${self:custom.settings.s3_bucket}"
        Queues:
          - Ref: TransmitQueue

Trouver cette information peut vous prendre du temps. Demandez-moi comment je le sais.

-1voto

cementblocks Points 2391

-1voto

Driss Amri Points 1695

J'ai suivi les instructions de la documentation AWS pour créer le sujet SNS dans un autre déploiement. Vous pouvez trouver la configuration de mon application ici :

1. Déploiement de SNS

https://github.com/drissamri/serverless-architecture/blob/master/infrastructure/serverless.yml

2. Déploiement de l'application (notifications S3)

https://github.com/drissamri/serverless-architecture/blob/master/application/serverless.yml

Si vous utilisez Serverless Framework, vous pouvez également utiliser des plugins qui masquent toute la configuration nécessaire avec une configuration simplifiée telle que https://www.npmjs.com/package/@agiledigital/serverless-sns-sqs-lambda

-1voto

Nick Points 1

Vous devez ajouter une politique SQS à votre file d'attente avant de pouvoir ajouter l'événement S3 SQS.

Politique SQS de Cloudformation pour les événements S3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X