AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Serverlesspresso Resources: MetricsQueueCloudwatch: Type: AWS::SQS::Queue Properties: QueueName: MetricsQueueCloudwatch ReceiveMessageWaitTimeSeconds: 5 VisibilityTimeout: 30 SqsManagedSseEnabled: true QueuePolicy: Type: AWS::SQS::QueuePolicy Properties: Queues: - !Ref MetricsQueueCloudwatch PolicyDocument: Statement: - Action: - SQS:SendMessage Effect: Allow Resource: !Ref MetricsQueueCloudwatch Principal: Service: "events.amazonaws.com" Condition: ArnEquals: aws:SourceArn: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/Serverlesspresso/OrderMetrics-Cloudwatch" PublishMetrics: Type: AWS::Serverless::Function Properties: CodeUri: code/ Handler: PublishMetrics.handler Description: Publish Event Metrics for Serverlesspresso Policies: - CloudWatchPutMetricPolicy: {} MemorySize: 512 Runtime: nodejs16.x ReservedConcurrentExecutions: 1 Timeout: 30 PublishMetricsQueueCloudwatchConnector: Type: AWS::Serverless::Connector Properties: Source: Id: MetricsQueueCloudwatch Destination: Id: PublishMetrics Permissions: - Write - Read LambdaFunctionEventSourceMapping: Type: AWS::Lambda::EventSourceMapping Properties: BatchSize: 10 MaximumBatchingWindowInSeconds: 30 Enabled: true EventSourceArn: !GetAtt MetricsQueueCloudwatch.Arn FunctionName: !GetAtt PublishMetrics.Arn EventsLoadTest: Type: AWS::Serverless::Function Properties: CodeUri: code/ Handler: EventsLoadTest.handler Description: Load test Events for Serverlesspresso MemorySize: 512 Runtime: nodejs16.x Timeout: 30 EventsLoadTestEventsConnector: Type: AWS::Serverless::Connector Properties: Source: Id: EventsLoadTest Destination: Arn: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:event-bus/Serverlesspresso" Type: AWS::Events::EventBus Permissions: - Write MetricsDashboard: Type: AWS::CloudWatch::Dashboard Properties: DashboardName: Serverlesspresso_Metrics DashboardBody: '{ "widgets": [ { "height": 6, "width": 8, "y": 0, "x": 0, "type": "metric", "properties": { "metrics": [ [ "Serverlesspresso", "Drink", "Drink", "Cappuccino" ], [ "...", "Espresso" ], [ "...", "Latte" ], [ "...", "Total Orders" ] ], "sparkline": false, "view": "singleValue", "region": "us-east-1", "stat": "Sum", "period": 300 } } ] }'