reportextractor/cfn.yaml (98 lines of code) (raw):

AWSTemplateFormatVersion: '2010-09-09' Description: Push Notifications reports extraction for the datalake Parameters: Stack: Description: Stack name Type: String App: Description: Application name Type: String Stage: Description: Stage name Type: String AllowedValues: - CODE - PROD OutputBucket: Description: The ARN of the bucket to put the data in Type: String DeployBucket: Description: Bucket where RiffRaff uploads artifacts on deploy Type: String Resources: Role: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: logs PolicyDocument: Statement: Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents - cloudwatch:putMetricData Resource: - !Sub arn:aws:logs:eu-west-1:${AWS::AccountId}:log-group:/aws/lambda/${Stack}-${App}-${Stage}:* - PolicyName: dynamo PolicyDocument: Statement: Effect: Allow Action: - dynamodb:GetItem - dynamodb:Query Resource: - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/mobile-notifications-reports-${Stage} - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/mobile-notifications-reports-${Stage}/index/sentTime-index - PolicyName: s3 PolicyDocument: Statement: Effect: Allow Action: - s3:PutObjectAcl - s3:PutObject Resource: - !Ref OutputBucket - !Sub ${OutputBucket}/* Function: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref DeployBucket S3Key: !Sub ${Stack}/${Stage}/${App}/${App}.jar Description: Export sent notifications to the datalake Environment: Variables: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App FunctionName: !Sub ${Stack}-${App}-${Stage} Handler: com.gu.notifications.extractor.Lambda MemorySize: 1024 ReservedConcurrentExecutions: 1 Role: !GetAtt Role.Arn Runtime: java11 Timeout: 60 EventRule: Type: AWS::Events::Rule Properties: ScheduleExpression: cron(0 1 1/1 * ? *) Targets: - Id: EventRuleTarget Arn: !GetAtt Function.Arn EventPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !GetAtt Function.Arn Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt EventRule.Arn