AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Image resizing service through SQS Parameters: SourceBucketName: Type: String QueueName: Type: String DestinationBucketName: Type: String Resources: ## S3 bucket SourceBucket: Type: AWS::S3::Bucket DependsOn: - ResizerQueueQueuePolicy Properties: BucketName: !Ref SourceBucketName NotificationConfiguration: QueueConfigurations: - Event: "s3:ObjectCreated:*" Queue: !GetAtt ResizerQueue.Arn Filter: S3Key: Rules: - Name: suffix Value: '.jpg' DestinationBucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref DestinationBucketName ## SQS Queue ResizerQueue: Type: "AWS::SQS::Queue" Properties: QueueName: !Ref QueueName ## Policies ResizerQueueQueuePolicy: Type: "AWS::SQS::QueuePolicy" Properties: PolicyDocument: Version: "2012-10-17" Id: QueuePolicy Statement: - Sid: Allow-SendMessage-To-Queue-From-S3-Event-Notification Effect: Allow Principal: Service: "s3.amazonaws.com" Action: - "sqs:SendMessage" Resource: !GetAtt ResizerQueue.Arn Condition: ArnLike: aws:SourceArn: !Join ["",['arn:aws:s3:::',!Ref SourceBucketName]] StringEquals: aws:SourceAccount: !Ref AWS::AccountId Queues: - Ref: ResizerQueue ## Lambda function ResizerFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: nodejs12.x MemorySize: 2048 Layers: - !Sub 'arn:aws:lambda:${AWS::Region}:175033217214:layer:graphicsmagick:2' Policies: - S3ReadPolicy: BucketName: !Ref SourceBucketName - S3CrudPolicy: BucketName: !Ref DestinationBucketName Environment: Variables: DESTINATION_BUCKETNAME: !Ref DestinationBucketName Events: MySQSEvent: Type: SQS Properties: Queue: !GetAtt ResizerQueue.Arn Outputs: SourceBucketName: Value: !Ref SourceBucketName Description: S3 Bucket for object storage DestinationBucketName: Value: !Ref DestinationBucketName Description: S3 destination Bucket for object storage QueueName: Value: !Ref QueueName Description: SQS Queue for queuing the s3 events FunctionArn: Value: !Ref ResizerFunction Description: ResizerFunction function Arn