--- AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Description: An Lambda function with a monitoring alarm, DLQ & PreTraffic Test Metadata: License: magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later cfn-lint: config: ignore_checks: - W3011 # UpdatePolicy generated by SAM Parameters: NotificationEmail: Type: String TestData: Type: String TestExpected: Type: String Resources: Function: Type: AWS::Serverless::Function Properties: Handler: lambda_function.handler Runtime: python3.7 CodeUri: src/lambda_function.py DeadLetterQueue: TargetArn: !GetAtt DeadLetterQueue.Arn Type: SQS AutoPublishAlias: live DeploymentPreference: Type: CodeDeployDefault.LambdaAllAtOnce Alarms: - !Ref Alarm Hooks: PreTraffic: !Ref TestFunction Alarm: Type: AWS::CloudWatch::Alarm Properties: ActionsEnabled: true AlarmActions: - !Ref NotificationTopic AlarmDescription: Notify on failures of cloud-interest-rate-calculator function AlarmName: !Sub ${AWS::StackName}-errors MetricName: Errors Namespace: AWS/Lambda Statistic: Sum Dimensions: - Name: FunctionName Value: !Select [6, !Split [':', !GetAtt Function.Arn]] - Name: Resource Value: !Select [6, !Split [':', !GetAtt Function.Arn]] Period: 300 EvaluationPeriods: 1 DatapointsToAlarm: 1 Threshold: 0 ComparisonOperator: GreaterThanThreshold NotificationTopic: Type: AWS::SNS::Topic Properties: DisplayName: !Sub ${AWS::StackName}-errors Subscription: - Endpoint: !Ref NotificationEmail Protocol: email Tags: - Key: Type Value: Monitoring DeadLetterQueue: Type: AWS::SQS::Queue Properties: Tags: - Key: Type Value: DeadLetterQueue TestFunction: Type: AWS::Serverless::Function Properties: FunctionName: !Sub CodeDeployHook_PreHook_${AWS::StackName} Handler: lambda_verification.handler Runtime: python3.7 CodeUri: src/lambda_verification.py Environment: Variables: CurrentVersion: !Ref Function.Version TestData: !Ref TestData TestExpected: !Ref TestExpected Policies: - Version: 2012-10-17 Statement: - Effect: Allow Action: codedeploy:PutLifecycleEventHookExecutionStatus Resource: "*" - Effect: Allow Action: lambda:InvokeFunction Resource: !Sub "${Function.Arn}:*" Outputs: LambdaArn: Value: !GetAtt Function.Arn