AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: A Lambda function triggered by an AWS API Gateway HTTP APIs call through an Amazon SQS Queue for buffering # Comment each resource section to explain usage Resources: ########################################################################## # SQS Queue # ########################################################################## # Define the SQS queue MySqsQueue: Type: AWS::SQS::Queue Properties: QueueName: MySqsQueue ########################################################################## # HTTP API # ########################################################################## MyHttpApi: Type: AWS::Serverless::HttpApi Properties: AccessLogSettings: DestinationArn: !GetAtt MyHttpApiAccessLogs.Arn Format: '{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength" }' DefinitionBody: 'Fn::Transform': Name: 'AWS::Include' Parameters: Location: 'api.yaml' ########################################################################## # Lambda Function # ########################################################################## MyLambdaFunction: Type: AWS::Serverless::Function Properties: FunctionName: MyLambdaFunction Description: Lambda to be invoked by the SQS Queue CodeUri: src/ Handler: app.handler Runtime: nodejs14.x Timeout: 3 MemorySize: 128 Events: MySQSEvent: Type: SQS Properties: Queue: !GetAtt MySqsQueue.Arn BatchSize: 10 ########################################################################## # Roles # ########################################################################## MyHttpApiRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - apigateway.amazonaws.com Action: - 'sts:AssumeRole' Policies: - PolicyName: AllowSqsIntegration PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'sqs:SendMessage' - 'sqs:GetQueueUrl' - 'sqs:SendMessageBatch' Resource: !GetAtt MySqsQueue.Arn - Effect: Allow Action: - 'logs:CreateLogGroup' - 'logs:CreateLogStream' - 'logs:DescribeLogGroups' - 'logs:DescribeLogStreams' - 'logs:PutLogEvents' - 'logs:GetLogEvents' - 'logs:FilterLogEvents' Resource: !GetAtt MyHttpApiAccessLogs.Arn ########################################################################## # Cloudwatch Logs # ########################################################################## MyHttpApiAccessLogs: Type: AWS::Logs::LogGroup Properties: LogGroupName: MyHttpApi-Access-Logs RetentionInDays: 1 ########################################################################## # Outputs # ########################################################################## Outputs: MyHttpApiEndpoint: Description: "HTTP API endpoint" Value: !Sub "https://${MyHttpApi}.execute-api.${AWS::Region}.amazonaws.com" MyLambdaFunction: Description: MyLambdaFunction function name Value: !Ref MyLambdaFunction MySqsQueueARN: Description: SQS queue ARN Value: !GetAtt MySqsQueue.Arn MySqsQueueURL: Description: SQS queue URL Value: !Ref MySqsQueue