handlers/fulfilment-date-calculator/cfn.yaml (135 lines of code) (raw):
AWSTemplateFormatVersion: "2010-09-09"
Description: Generate files in S3 bucket containing relevant fulfilment-related dates, for example, acquisitionsStartDate, holidayStopFirstAvailableDate, etc.
Parameters:
Stage:
Description: Stage name
Type: String
AllowedValues:
- CODE
- PROD
Default: CODE
Conditions:
IsProd: !Equals [!Ref "Stage", "PROD"]
Mappings:
StageMap:
CODE:
bucketName: "fulfilment-date-calculator-code"
PROD:
bucketName: "fulfilment-date-calculator-prod"
Resources:
FulfilmentDateCalculatorBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !FindInMap [StageMap, !Ref Stage, bucketName]
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
LifecycleConfiguration:
Rules:
- ExpirationInDays: 30
Status: Enabled
VersioningConfiguration:
Status: Enabled
FulfilmentDateCalculatorLambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: /
Policies:
- PolicyName: LambdaPolicy
PolicyDocument:
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
- lambda:InvokeFunction
Resource: !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/fulfilment-date-calculator-${Stage}:log-stream:*
- PolicyName: ReadPrivateCredentials
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: FulfilmentDatesCalculatorBucket
PolicyDocument:
Statement:
- Effect: Allow
Action:
- s3:PutObject
- s3:PutObjectAcl
- s3:GetObject
Resource:
- arn:aws:s3:::fulfilment-date-calculator-*
FulfilmentDateCalculatorLambda:
Type: AWS::Lambda::Function
Properties:
Description: Generate files in S3 bucket containing relevant fulfilment-related dates, for example, acquisitionsStartDate, holidayStopFirstAvailableDate, etc.
FunctionName:
!Sub fulfilment-date-calculator-${Stage}
Code:
S3Bucket: support-service-lambdas-dist
S3Key: !Sub membership/${Stage}/fulfilment-date-calculator/fulfilment-date-calculator.jar
Handler: com.gu.supporter.fulfilment.Handler::handle
Environment:
Variables:
Stage: !Ref Stage
Role: !GetAtt FulfilmentDateCalculatorLambdaRole.Arn
MemorySize: 1536
Runtime: java21
Timeout: 900
Architectures:
- arm64
DependsOn:
- FulfilmentDateCalculatorLambdaRole
FulfilmentDateCalculatorLambdaTriggerRule:
Type: AWS::Events::Rule
Properties:
Description: Trigger fulfilment-date-calculator lambda every day at 00:30 AM UTC
ScheduleExpression: cron(30 0 * * ? *)
State: ENABLED
Targets:
- Arn: !Sub ${FulfilmentDateCalculatorLambda.Arn}
Id: TriggerLambda
Input: |
null
FulfilmentDateCalculatorLambdaTriggerPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName: !Sub ${FulfilmentDateCalculatorLambda.Arn}
Principal: events.amazonaws.com
SourceArn: !Sub ${FulfilmentDateCalculatorLambdaTriggerRule.Arn}
FailedFulfilmentDateCalculatorAlarm:
Type: AWS::CloudWatch::Alarm
Condition: IsProd
Properties:
AlarmName: fulfilment-date-calculator
AlarmDescription: Failed to generate fulfilment-dates files in fulfilment-date-calculator S3 bucket for today
AlarmActions:
- !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:alarms-handler-topic-PROD
ComparisonOperator: GreaterThanOrEqualToThreshold
Dimensions:
- Name: FunctionName
Value: !Ref FulfilmentDateCalculatorLambda
EvaluationPeriods: 1
MetricName: Errors
Namespace: AWS/Lambda
Period: 300
Statistic: Sum
Threshold: 1
TreatMissingData: notBreaching