exports-cloudformation.yaml (359 lines of code) (raw):

AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Description: Exports mobile purchases data Parameters: Stack: Description: Stack name Type: String App: Description: Application name Type: String Stage: Description: Stage name Type: String AllowedValues: - CODE - PROD DeployBucket: Description: Bucket where RiffRaff uploads artifacts on deploy Type: String AlarmTopic: Type: String Description: The ARN of the SNS topic to send all the cloudwatch alarms to AccountId: Type: String Description: The account id of the mobile account SubscriptionExportBucket: Type: String Description: The name of the export subscription bucket SubscriptionExportBucketOwner: Type: String Description: The id of the owner of the export subscription bucket UserSubscriptionExportBucket: Type: String Description: The name of the export user subscription bucket SubscriptionEventsExportBucket: Type: String Description: The name of the export events bucket GoogleSubscriptionHistoryExportBucket: Type: String Description: The name of the export bucket containing the subscription history from Google AppleSubscriptionHistoryExportBucket: Type: String Description: The name of the export bucket containing the subscription history from Apple Resources: ExportLambdasRole: 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: "*" - PolicyName: dynamo PolicyDocument: Statement: Effect: Allow Action: - "dynamodb:Scan" - "dynamodb:Query" - "dynamodb:ExportTableToPointInTime" Resource: - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${App}-${Stage}-subscriptions - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${App}-${Stage}-user-subscriptions - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${App}-${Stage}-subscription-events-v2/* - PolicyName: s3 PolicyDocument: Statement: Action: - s3:PutObject - s3:PutObjectAcl Effect: Allow Resource: - !Sub arn:aws:s3:::${SubscriptionExportBucket}/* - !Sub arn:aws:s3:::${UserSubscriptionExportBucket}/* - !Sub arn:aws:s3:::${SubscriptionEventsExportBucket}/* - !Sub arn:aws:s3:::${GoogleSubscriptionHistoryExportBucket}/* - !Sub arn:aws:s3:::${AppleSubscriptionHistoryExportBucket}/* - PolicyName: sqs PolicyDocument: Statement: Action: sqs:* Effect: Allow Resource: - !GetAtt AppleHistoricalSubscriptionsQueue.Arn - !GetAtt GoogleHistoricalSubscriptionsQueue.Arn ExportSubscriptionTableLambda: Type: AWS::Serverless::Function Properties: Handler: export-subscription-tables.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-subscription-tables/export-subscription-tables.zip FunctionName: !Sub ${App}-export-subscription-table-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref SubscriptionExportBucket ClassName: Subscription Description: Export subscription table to the datalake MemorySize: 10240 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App ExportUserSubscriptionTableLambda: Type: AWS::Serverless::Function Properties: Handler: export-subscription-tables.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-subscription-tables/export-subscription-tables.zip FunctionName: !Sub ${App}-export-user-subscription-table-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref UserSubscriptionExportBucket ClassName: UserSubscription Description: Export the user subscription table to the datalake MemorySize: 512 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App ExportSubscriptionTableLambdaV2: Type: AWS::Serverless::Function Properties: Handler: export-subscription-table-v2.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-subscription-table-v2/export-subscription-table-v2.zip FunctionName: !Sub ${App}-export-subscription-table-v2-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref SubscriptionExportBucket BucketOwner: !Ref SubscriptionExportBucketOwner AccountId: !Ref AccountId ClassName: subscriptions Description: Export subscription table to the datalake MemorySize: 512 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App ExportUserSubscriptionTableLambdaV2: Type: AWS::Serverless::Function Properties: Handler: export-subscription-table-v2.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-subscription-table-v2/export-subscription-table-v2.zip FunctionName: !Sub ${App}-export-user-subscription-table-v2-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref UserSubscriptionExportBucket BucketOwner: !Ref SubscriptionExportBucketOwner AccountId: !Ref AccountId ClassName: user-subscriptions Description: Export the user subscription table to the datalake MemorySize: 512 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App ExportUserSubscriptionEventsTableLambda: Type: AWS::Serverless::Function Properties: Handler: export-subscription-events-table.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-subscription-events-table/export-subscription-events-table.zip FunctionName: !Sub ${App}-export-subscription-events-table-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref SubscriptionEventsExportBucket Description: Export the subscription event table to the datalake MemorySize: 512 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App GoogleHistoricalSubscriptionsQueue: Type: AWS::SQS::Queue Properties: QueueName: !Sub ${App}-${Stage}-google-historical-subscriptions RedrivePolicy: deadLetterTargetArn: !GetAtt GoogleHistoricalSubscriptionsDlq.Arn maxReceiveCount: 8 KmsMasterKeyId: alias/aws/sqs Tags: - Key: Stage Value: !Ref Stage - Key: Stack Value: !Ref Stack - Key: App Value: !Ref App GoogleHistoricalSubscriptionsDlq: Type: AWS::SQS::Queue Properties: QueueName: !Sub ${App}-${Stage}-google-historical-subscriptions-dlq KmsMasterKeyId: alias/aws/sqs Tags: - Key: Stage Value: !Ref Stage - Key: Stack Value: !Ref Stack - Key: App Value: !Ref App AppleHistoricalSubscriptionsQueue: Type: AWS::SQS::Queue Properties: QueueName: !Sub ${App}-${Stage}-apple-historical-subscriptions RedrivePolicy: deadLetterTargetArn: !GetAtt AppleHistoricalSubscriptionsDlq.Arn maxReceiveCount: 8 KmsMasterKeyId: alias/aws/sqs Tags: - Key: Stage Value: !Ref Stage - Key: Stack Value: !Ref Stack - Key: App Value: !Ref App AppleHistoricalSubscriptionsDlq: Type: AWS::SQS::Queue Properties: QueueName: !Sub ${App}-${Stage}-apple-historical-subscriptions-dlq KmsMasterKeyId: alias/aws/sqs Tags: - Key: Stage Value: !Ref Stage - Key: Stack Value: !Ref Stack - Key: App Value: !Ref App ExportAppleHistoricalSubscriptionsLambda: Type: AWS::Serverless::Function Properties: Handler: export-historical-data.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-historical-data/export-historical-data.zip FunctionName: !Sub ${App}-export-apple-historical-data-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref AppleSubscriptionHistoryExportBucket SqsUrl: !Ref AppleHistoricalSubscriptionsQueue Description: Export the historical Apple subscriptions to the data lake MemorySize: 3008 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App ExportGoogleHistoricalSubscriptionsLambda: Type: AWS::Serverless::Function Properties: Handler: export-historical-data.handler Runtime: nodejs14.x CodeUri: Bucket: !Ref DeployBucket Key: !Sub ${Stack}/${Stage}/${App}-export-historical-data/export-historical-data.zip FunctionName: !Sub ${App}-export-google-historical-data-${Stage} Role: !GetAtt ExportLambdasRole.Arn Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} ExportBucket: !Ref GoogleSubscriptionHistoryExportBucket SqsUrl: !Ref GoogleHistoricalSubscriptionsQueue Description: Export the historical Google subscriptions to the data lake MemorySize: 512 Timeout: 900 Events: Schedule: Type: Schedule Properties: Schedule: cron(3 0 1/1 * ? *) Tags: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App