handlers/zuora-datalake-export/cfn.yaml (118 lines of code) (raw):

AWSTemplateFormatVersion: "2010-09-09" Description: Zuora to Datalake export https://github.com/guardian/support-service-lambdas/tree/main/handlers/zuora-datalake-export Parameters: Stage: Description: Stage name Type: String AllowedValues: - CODE - PROD Default: CODE Conditions: IsProd: !Equals [!Ref "Stage", "PROD"] Resources: ExportLambdaRole: 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/zuora-datalake-export-${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: OphanTargetCsvBucket PolicyDocument: Statement: - Effect: Allow Action: - s3:PutObject - s3:PutObjectAcl Resource: - arn:aws:s3:::ophan-raw-zuora-increment-* ExportLambda: Type: AWS::Lambda::Function Properties: Description: Export Zuora to Datalake via AQuA Stateful API FunctionName: !Sub zuora-datalake-export-${Stage} Code: S3Bucket: support-service-lambdas-dist S3Key: !Sub membership/${Stage}/zuora-datalake-export/zuora-datalake-export.jar Handler: com.gu.zuora.datalake.export.ExportLambda::handle Environment: Variables: Stage: !Ref Stage Role: !GetAtt ExportLambdaRole.Arn MemorySize: 3008 Runtime: java21 Timeout: 900 Architectures: - arm64 DependsOn: - ExportLambdaRole ExportLambdaTriggerRule: Type: AWS::Events::Rule Condition: IsProd Properties: Description: Trigger Zuora-to-Datalake export every day at 00:30 AM UTC ScheduleExpression: cron(30 0 * * ? *) State: ENABLED Targets: - Arn: !Sub ${ExportLambda.Arn} Id: TriggerLambda Input: | {"exportFromDate": "afterLastIncrement"} TriggerStartExportJobPermission: Type: AWS::Lambda::Permission Condition: IsProd Properties: Action: lambda:InvokeFunction FunctionName: !Sub ${ExportLambda.Arn} Principal: events.amazonaws.com SourceArn: !Sub ${ExportLambdaTriggerRule.Arn} FailedExportAlarm: Type: AWS::CloudWatch::Alarm Condition: IsProd Properties: AlarmName: zuora-datalake-export AlarmDescription: Failed to export Zuora to Datalake. Corresponding Ophan clean tables, such as clean.zuora_account, will go out-of-date. Refer to https://github.com/guardian/support-service-lambdas/blob/main/handlers/sf-datalake-export/README.md on how to debug and retry. AlarmActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:alarms-handler-topic-${Stage} ComparisonOperator: GreaterThanOrEqualToThreshold Dimensions: - Name: FunctionName Value: !Ref ExportLambda EvaluationPeriods: 1 MetricName: Errors Namespace: AWS/Lambda Period: 300 Statistic: Sum Threshold: 1 TreatMissingData: notBreaching DisableAutomaticLambdaRetry: Type: AWS::Lambda::EventInvokeConfig Properties: FunctionName: !Sub zuora-datalake-export-${Stage} MaximumRetryAttempts: 0 Qualifier: '$LATEST' DependsOn: ExportLambda