cloudformation/memsub-promotions-lambdas-cf.yaml (183 lines of code) (raw):

AWSTemplateFormatVersion: '2010-09-09' Description: Membership/Subscription promotions tool lambda functions Parameters: CODEPromotionsTableStreamARN: Description: ARN of the MembershipSub-Promotions-CODE DynamoDB stream to trigger the lambda function which updates the MembershipSub-PromoCode-View-CODE table Type: String Default: '' PRODPromotionsTableStreamARN: Description: ARN of the MembershipSub-Promotions-PROD DynamoDB stream to trigger the lambda function which updates the MembershipSub-PromoCode-View-PROD table Type: String Default: '' Resources: MembershipSubPromoCodeViewLambdaRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: MembershipSub-Promo-Code-View-Lambda-Policy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:*:*:log-group:/aws/lambda/MembershipSub-Promotions-to-PromoCode-View-* - Effect: Allow Action: - dynamodb:GetRecords - dynamodb:GetShardIterator - dynamodb:DescribeStream - dynamodb:ListStreams - dynamodb:Scan Resource: - arn:aws:dynamodb:*:*:table/MembershipSub-Promotions-* - arn:aws:dynamodb:*:*:table/MembershipSub-Campaigns-* - Effect: Allow Action: - dynamodb:BatchWriteItem - dynamodb:PutItem Resource: - arn:aws:dynamodb:*:*:table/MembershipSub-PromoCode-View-PROD - arn:aws:dynamodb:*:*:table/MembershipSub-PromoCode-View-CODE MembershipSubPromoCodeViewETLRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: MembershipSub-Promotions-Data-Policy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:*:*:log-group:/aws/lambda/MembershipSub-PromoCode-View-Dynamo-to-Salesforce-* - Effect: Allow Action: - dynamodb:GetRecords - dynamodb:Scan Resource: - arn:aws:dynamodb:*:*:table/MembershipSub-PromoCode-View-PROD - arn:aws:dynamodb:*:*:table/MembershipSub-PromoCode-View-CODE - Effect: Allow Action: - s3:PutObject - s3:PutObjectAcl Resource: - arn:aws:s3:::ophan-raw-membership-promo-code-view/* - Effect: Allow Action: - secretsmanager:GetSecretValue Resource: - arn:aws:secretsmanager:eu-west-1:865473395570:secret:CODE/Salesforce/User/PromoCodeLambda* - arn:aws:secretsmanager:eu-west-1:865473395570:secret:PROD/Salesforce/User/PromoCodeLambda* PromoCodeViewLambdaFunctionCODE: Type: AWS::Lambda::Function Properties: Code: S3Bucket: gu-promotions-tool-dist S3Key: membership/PROD/MembershipSub-Promotions-PromoCode-View/MembershipSub-Promotions-PromoCode-View.zip Description: An Amazon DynamoDB trigger that creates a view of data associated with a particular promo code for the data pipeline to collect. FunctionName: MembershipSub-Promotions-to-PromoCode-View-CODE Handler: MembershipSub-Promotions-to-PromoCode-View-Lambda.handler MemorySize: 128 Role: !GetAtt [MembershipSubPromoCodeViewLambdaRole, Arn] Runtime: nodejs18.x Timeout: 60 PromoCodeViewLambdaFunctionPROD: Type: AWS::Lambda::Function Properties: Code: S3Bucket: gu-promotions-tool-dist S3Key: membership/PROD/MembershipSub-Promotions-PromoCode-View/MembershipSub-Promotions-PromoCode-View.zip Description: An Amazon DynamoDB trigger that creates a view of data associated with a particular promo code for the data pipeline to collect. FunctionName: MembershipSub-Promotions-to-PromoCode-View-PROD Handler: MembershipSub-Promotions-to-PromoCode-View-Lambda.handler MemorySize: 128 Role: !GetAtt [MembershipSubPromoCodeViewLambdaRole, Arn] Runtime: nodejs18.x Timeout: 60 PromoCodeViewLambdaEventSourceCODE: Type: AWS::Lambda::EventSourceMapping Properties: BatchSize: 1 Enabled: true EventSourceArn: !Ref 'CODEPromotionsTableStreamARN' FunctionName: !Ref 'PromoCodeViewLambdaFunctionCODE' StartingPosition: TRIM_HORIZON PromoCodeViewLambdaEventSourcePROD: Type: AWS::Lambda::EventSourceMapping Properties: BatchSize: 1 Enabled: true EventSourceArn: !Ref 'PRODPromotionsTableStreamARN' FunctionName: !Ref 'PromoCodeViewLambdaFunctionPROD' StartingPosition: TRIM_HORIZON PromoCodeViewSalesforceLambdaFunctionCODE: Type: AWS::Lambda::Function Properties: Code: S3Bucket: gu-promotions-tool-dist S3Key: membership/PROD/MembershipSub-Promotions-PromoCode-View/MembershipSub-Promotions-PromoCode-View.zip Description: A Lambda function to replicate the MembershipSub-PromoCode-View-CODE Dynamo table to Salesforce FunctionName: MembershipSub-PromoCode-View-Dynamo-to-Salesforce-CODE Handler: MembershipSub-PromoCode-View-Dynamo-to-Salesforce.handler MemorySize: 128 Role: !GetAtt [MembershipSubPromoCodeViewETLRole, Arn] Runtime: nodejs18.x Timeout: 60 PromoCodeViewSalesforceLambdaFunctionPROD: Type: AWS::Lambda::Function Properties: Code: S3Bucket: gu-promotions-tool-dist S3Key: membership/PROD/MembershipSub-Promotions-PromoCode-View/MembershipSub-Promotions-PromoCode-View.zip Description: A Lambda function to replicate the MembershipSub-PromoCode-View-PROD Dynamo table to Salesforce FunctionName: MembershipSub-PromoCode-View-Dynamo-to-Salesforce-PROD Handler: MembershipSub-PromoCode-View-Dynamo-to-Salesforce.handler MemorySize: 128 Role: !GetAtt [MembershipSubPromoCodeViewETLRole, Arn] Runtime: nodejs18.x Timeout: 60 ETLSchedule: Type: AWS::Events::Rule Properties: ScheduleExpression: cron(0 8 * * ? *) State: ENABLED Targets: - Id: ETLPromoCodeViewSalesforceLambdaFunctionPRODSchedule Arn: !GetAtt [PromoCodeViewSalesforceLambdaFunctionPROD, Arn] ETLInvokeLambdaPermissionSF: Type: AWS::Lambda::Permission Properties: FunctionName: !GetAtt [PromoCodeViewSalesforceLambdaFunctionPROD, Arn] Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt [ETLSchedule, Arn]