handlers/delivery-problem-credit-processor/cfn.yaml (134 lines of code) (raw):

AWSTemplateFormatVersion: "2010-09-09" Description: Applies a credit amendment to a subscription for a delivery problem. Parameters: Stage: Description: Stage name Type: String AllowedValues: - PROD - CODE Default: CODE Conditions: IsProd: !Equals [!Ref "Stage", "PROD"] Mappings: StageMap: PROD: ScheduleName: delivery-problem-credit-processor-schedule-prod CODE: ScheduleName: delivery-problem-credit-processor-schedule-code Resources: DeliveryProblemCreditProcessorRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: DeliveryProblemCreditProcessorPolicy PolicyDocument: Statement: - Effect: Allow Action: - lambda:InvokeFunction - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/delivery-problem-credit-processor-${Stage}:log-stream:* - PolicyName: ReadZuoraCredentials PolicyDocument: Statement: - Effect: Allow Action: s3:GetObject Resource: !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/zuoraRest-${Stage}*.json - PolicyName: ReadSalesforceCredentials PolicyDocument: Statement: - Effect: Allow Action: s3:GetObject Resource: !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/sfAuth-${Stage}*.json DeliveryProblemCreditProcessor: Type: AWS::Lambda::Function Properties: FunctionName: !Sub delivery-problem-credit-processor-${Stage} Description: Applies credit amendments for delivery problems. Source - https://github.com/guardian/support-service-lambdas/tree/main/handlers/delivery-problem-credit-processor Code: S3Bucket: support-service-lambdas-dist S3Key: !Sub membership/${Stage}/delivery-problem-credit-processor/delivery-problem-credit-processor.jar Handler: com.gu.deliveryproblemcreditprocessor.Handler::handle Environment: Variables: Stage: !Ref Stage Role: !GetAtt DeliveryProblemCreditProcessorRole.Arn MemorySize: 1024 Runtime: java21 Timeout: 900 Architectures: - arm64 DependsOn: - DeliveryProblemCreditProcessorRole DeliveryProblemCreditProcessorFailureAlarm: Type: AWS::CloudWatch::Alarm Condition: IsProd Properties: AlarmName: "URGENT 9-5 - PROD: Failed to process delivery-problem credits" AlarmDescription: > IMPACT: If this goes unaddressed at least one subscription that was supposed to be suspended will be fulfilled. Until we document how to deal with likely problems please alert the SX team. For general advice, see https://docs.google.com/document/d/1_3El3cly9d7u_jPgTcRjLxmdG2e919zCLvmcFCLOYAk AlarmActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:alarms-handler-topic-PROD ComparisonOperator: GreaterThanOrEqualToThreshold Dimensions: - Name: FunctionName Value: !Ref DeliveryProblemCreditProcessor EvaluationPeriods: 1 MetricName: Errors Namespace: AWS/Lambda Period: 3600 Statistic: Sum Threshold: 3 TreatMissingData: ignore DependsOn: - DeliveryProblemCreditProcessor DeliveryProblemCreditProcessorScheduleRule: Type: AWS::Events::Rule # No need to run on a schedule in Dev stage Condition: IsProd Properties: Description: Trigger processing of delivery-problem credits every 20 mins Name: !FindInMap [StageMap, !Ref Stage, ScheduleName] ScheduleExpression: "cron(0/20 * ? * * *)" State: ENABLED Targets: - Arn: !GetAtt DeliveryProblemCreditProcessor.Arn Id: !Ref DeliveryProblemCreditProcessor Input: "null" DependsOn: - DeliveryProblemCreditProcessor DeliveryProblemCreditProcessorLambdaInvokePermission: Type: AWS::Lambda::Permission Condition: IsProd Properties: Action: lambda:invokeFunction FunctionName: !Ref DeliveryProblemCreditProcessor Principal: events.amazonaws.com SourceArn: !GetAtt DeliveryProblemCreditProcessorScheduleRule.Arn DependsOn: - DeliveryProblemCreditProcessorScheduleRule # As processor runs every 20 mins anyway, there's no point in retrying on failure DeliveryProblemCreditProcessorLambdaInvokeConfig: Type: AWS::Lambda::EventInvokeConfig Properties: FunctionName: !Ref DeliveryProblemCreditProcessor MaximumRetryAttempts: 0 Qualifier: '$LATEST' DependsOn: - DeliveryProblemCreditProcessor