lambda/cfn.yaml (378 lines of code) (raw):

AWSTemplateFormatVersion: "2010-09-09" Description: Lambda used to implement the various task need in the process of increasing the price of subscriptions Parameters: Stage: Description: Stage name Type: String AllowedValues: - PROD - CODE - DEV Default: CODE Mappings: StageMap: DEV: SecretsVersion: "NArGcZ" BucketName: price-migration-engine-dev SQSQueueName: direct-mail-CODE ExportBucketName: price-migration-engine-dev CODE: SecretsVersion: "CoDz8f" BucketName: price-migration-engine-code SQSQueueName: direct-mail-CODE ExportBucketName: price-migration-engine-code PROD: SecretsVersion: "TTMSyJ" BucketName: price-migration-engine-prod SQSQueueName: direct-mail-PROD ExportBucketName: ophan-clean-price-migration-engine-cohort-items Resources: ReadFromSecretsManager: Type: AWS::IAM::Policy Properties: PolicyName: ReadFromSecretsManager PolicyDocument: Statement: - Effect: Allow Action: - secretsmanager:DescribeSecret - secretsmanager:GetSecretValue Resource: !Sub - "arn:aws:secretsmanager:eu-west-1:865473395570:secret:price-migration-engine-lambda-${Stage}-${SecretsVersion}" - SecretsVersion: !FindInMap [StageMap, !Ref Stage, SecretsVersion] Roles: - Ref: PriceMigrationEngineTableCreateLambdaRole - Ref: PriceMigrationEngineSubscriptionIdUploadLambdaRole - Ref: PriceMigrationEngineEstimationLambdaRole - Ref: PriceMigrationEngineSalesforcePriceCreationLambdaRole - Ref: PriceMigrationEngineAmendmentLambdaRole - Ref: PriceMigrationEngineNotificationLambdaRole - Ref: PriceMigrationEngineSalesforceNotificationDateUpdateLambdaRole - Ref: PriceMigrationEngineSalesforceAmendmentUpdateLambdaRole - Ref: PriceMigrationEngineCohortTableDatalakeExportLambdaRole ReadFromDistBucketPolicy: Type: AWS::IAM::Policy Properties: PolicyName: ReadFromDistBucketPolicy PolicyDocument: Statement: - Effect: Allow Action: s3:GetObject Resource: - arn:aws:s3::*:membership-dist/* Roles: - Ref: PriceMigrationEngineTableCreateLambdaRole - Ref: PriceMigrationEngineSubscriptionIdUploadLambdaRole - Ref: PriceMigrationEngineEstimationLambdaRole - Ref: PriceMigrationEngineSalesforcePriceCreationLambdaRole - Ref: PriceMigrationEngineAmendmentLambdaRole - Ref: PriceMigrationEngineNotificationLambdaRole - Ref: PriceMigrationEngineSalesforceNotificationDateUpdateLambdaRole - Ref: PriceMigrationEngineSalesforceAmendmentUpdateLambdaRole - Ref: PriceMigrationEngineCohortTableDatalakeExportLambdaRole CohortTableAccessPolicy: Type: AWS::IAM::Policy Properties: PolicyName: CohortTableAccessPolicy PolicyDocument: Statement: - Effect: Allow Action: - dynamodb:Query - dynamodb:Scan - dynamodb:UpdateItem - dynamodb:PutItem Resource: - !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/PriceMigrationEngine${Stage}" - !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/PriceMigrationEngine${Stage}/*" - !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/PriceMigration-${Stage}-*" - !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/PriceMigration-${Stage}-*/*" Roles: - Ref: PriceMigrationEngineEstimationLambdaRole - Ref: PriceMigrationEngineSalesforcePriceCreationLambdaRole - Ref: PriceMigrationEngineAmendmentLambdaRole - Ref: PriceMigrationEngineNotificationLambdaRole - Ref: PriceMigrationEngineSalesforceNotificationDateUpdateLambdaRole - Ref: PriceMigrationEngineSalesforceAmendmentUpdateLambdaRole - Ref: PriceMigrationEngineCohortTableDatalakeExportLambdaRole - Ref: PriceMigrationEngineSubscriptionIdUploadLambdaRole PriceMigrationEngineTableCreateLambdaRole: 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/price-migration-engine-table-create-lambda-${Stage}:log-stream:*" - PolicyName: CohortTablePolicy PolicyDocument: Statement: - Effect: Allow Action: - dynamodb:DescribeTable - dynamodb:CreateTable - dynamodb:UpdateContinuousBackups Resource: - !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/PriceMigration*" - !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/PriceMigration*/*" PriceMigrationEngineEstimationLambdaRole: 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/price-migration-engine-estimation-lambda-${Stage}:log-stream:*" PriceMigrationEngineSalesforcePriceCreationLambdaRole: 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/price-migration-engine-salesforce-price-rise-lambda-${Stage}:log-stream:*" PriceMigrationEngineAmendmentLambdaRole: 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/price-migration-engine-amendment-lambda-${Stage}:log-stream:*" PriceMigrationEngineSubscriptionIdUploadLambdaRole: 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/price-migration-engine-subscription-id-upload-lambda-${Stage}:log-stream:*" - PolicyName: S3BucketPolicy PolicyDocument: Statement: - Effect: Allow Action: - s3:ListBucket - s3:GetObject - s3:DeleteObject Resource: - !Sub - "arn:aws:s3:::${BucketName}" - {BucketName: !FindInMap [StageMap, !Ref Stage, BucketName]} - !Sub - "arn:aws:s3:::${BucketName}/*" - {BucketName: !FindInMap [StageMap, !Ref Stage, BucketName]} DependsOn: - S3Bucket PriceMigrationEngineNotificationLambdaRole: 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/price-migration-engine-notification-lambda-${Stage}:log-stream:*" - PolicyName: SendNotificationRequestSQSMessage PolicyDocument: Statement: - Effect: Allow Action: - sqs:GetQueueUrl - sqs:SendMessage Resource: !Sub - "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${QueueName}" - { QueueName: !FindInMap [ StageMap, !Ref Stage, SQSQueueName ] } PriceMigrationEngineSalesforceNotificationDateUpdateLambdaRole: 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/price-migration-engine-salesforce-notification-date-lambda-${Stage}:log-stream:*" PriceMigrationEngineSalesforceAmendmentUpdateLambdaRole: 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/price-migration-engine-salesforce-amendment-update-lambda-${Stage}:log-stream:*" PriceMigrationEngineCohortTableDatalakeExportLambdaRole: 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/price-migration-engine-cohort-table-datalake-export-lambda-${Stage}:log-stream:*" - PolicyName: S3BucketPolicy PolicyDocument: Statement: - Effect: Allow Action: - s3:PutObject - s3:PutObjectAcl Resource: - !Sub - "arn:aws:s3:::${ExportBucketName}/*" - {ExportBucketName: !FindInMap [StageMap, !Ref Stage, ExportBucketName]} DependsOn: - S3Bucket S3Bucket: Type: AWS::S3::Bucket Properties: BucketName: !FindInMap [StageMap, !Ref Stage, BucketName] PublicAccessBlockConfiguration: BlockPublicAcls: true IgnorePublicAcls: true BlockPublicPolicy: true RestrictPublicBuckets: true PriceMigrationEngineTableCreateLambda: Type: AWS::Lambda::Function Properties: Description: Creates cohort table, if it doesn't already exist. FunctionName: !Sub price-migration-engine-table-create-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.CohortTableCreationHandler::handleRequest Environment: Variables: stage: !Ref Stage Role: Fn::GetAtt: - PriceMigrationEngineTableCreateLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineTableCreateLambdaRole PriceMigrationEngineSubscriptionIdUploadLambda: Type: AWS::Lambda::Function Properties: Description: Uploads subscription id CSV files into price migration engine. FunctionName: !Sub price-migration-engine-subscription-id-upload-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.SubscriptionIdUploadHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 Role: Fn::GetAtt: - PriceMigrationEngineSubscriptionIdUploadLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineSubscriptionIdUploadLambdaRole - S3Bucket PriceMigrationEngineEstimationLambda: Type: AWS::Lambda::Function Properties: Description: Lambda used to create estimated price, start date and other details of a price rise. FunctionName: !Sub price-migration-engine-estimation-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.EstimationHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 Role: Fn::GetAtt: - PriceMigrationEngineEstimationLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineEstimationLambdaRole PriceMigrationEngineSalesforcePriceCreationLambda: Type: AWS::Lambda::Function Properties: Description: Lambda used to create Price_Rise__c objects in salesforce relating to the price rise. FunctionName: !Sub price-migration-engine-salesforce-price-rise-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.SalesforcePriceRiseCreationHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 Role: Fn::GetAtt: - PriceMigrationEngineSalesforcePriceCreationLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineSalesforcePriceCreationLambdaRole PriceMigrationEngineAmendmentLambda: Type: AWS::Lambda::Function Properties: Description: Adds price-rise amendments to subscriptions. FunctionName: !Sub price-migration-engine-amendment-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.AmendmentHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 Role: Fn::GetAtt: - PriceMigrationEngineAmendmentLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineAmendmentLambdaRole PriceMigrationEngineNotificationLambda: Type: AWS::Lambda::Function Properties: Description: Sends notification mails to users telling them about the price rise FunctionName: !Sub price-migration-engine-notification-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.NotificationHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 sqsEmailQueueName: !FindInMap [ StageMap, !Ref Stage, SQSQueueName ] Role: Fn::GetAtt: - PriceMigrationEngineNotificationLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineNotificationLambdaRole PriceMigrationEngineSalesforceNotificationDateUpdateLambda: Type: AWS::Lambda::Function Properties: Description: Lambda used to update Price_Rise__c objects in salesforce with the notification sent date. FunctionName: !Sub price-migration-engine-salesforce-notification-date-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.SalesforceNotificationDateUpdateHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 Role: Fn::GetAtt: - PriceMigrationEngineSalesforceNotificationDateUpdateLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineSalesforceNotificationDateUpdateLambdaRole PriceMigrationEngineSalesforceAmendmentUpdateLambda: Type: AWS::Lambda::Function DependsOn: - PriceMigrationEngineSalesforceAmendmentUpdateLambdaRole Properties: Description: Updates Salesforce with evidence of the price-rise amendment that was applied in Zuora. FunctionName: !Sub price-migration-engine-salesforce-amendment-update-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.SalesforceAmendmentUpdateHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 Role: Fn::GetAtt: - PriceMigrationEngineSalesforceAmendmentUpdateLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 PriceMigrationEngineCohortTableDatalakeExportLambda: Type: AWS::Lambda::Function Properties: Description: Exports the cohort table to s3 for so it is available for import into the datalake. FunctionName: !Sub price-migration-engine-cohort-table-datalake-export-lambda-${Stage} Code: S3Bucket: membership-dist S3Key: !Sub membership/${Stage}/price-migration-engine-lambda/price-migration-engine-lambda.jar Handler: pricemigrationengine.handlers.CohortTableDatalakeExportHandler::handleRequest Environment: Variables: stage: !Ref Stage batchSize: 100 exportBucketName: !FindInMap [StageMap, !Ref Stage, ExportBucketName] Role: Fn::GetAtt: - PriceMigrationEngineCohortTableDatalakeExportLambdaRole - Arn MemorySize: 1536 Runtime: java11 Timeout: 900 DependsOn: - PriceMigrationEngineCohortTableDatalakeExportLambdaRole - S3Bucket Outputs: PriceMigrationEngineTableCreateLambdaOutput: Value: !GetAtt PriceMigrationEngineTableCreateLambda.Arn Export: Name: !Sub "${AWS::StackName}-CreatingCohortTableLambda" PriceMigrationEngineSubscriptionIdUploadLambdaOutput: Value: !GetAtt PriceMigrationEngineSubscriptionIdUploadLambda.Arn Export: Name: !Sub "${AWS::StackName}-ImportingLambda" PriceMigrationEngineEstimationLambdaOutput: Value: !GetAtt PriceMigrationEngineEstimationLambda.Arn Export: Name: !Sub "${AWS::StackName}-EstimatingLambda" PriceMigrationEngineSalesforcePriceCreationLambdaOutput: Value: !GetAtt PriceMigrationEngineSalesforcePriceCreationLambda.Arn Export: Name: !Sub "${AWS::StackName}-CreatingSalesforceRecordsLambda" PriceMigrationEngineNotificationLambdaOutput: Value: !GetAtt PriceMigrationEngineNotificationLambda.Arn Export: Name: !Sub "${AWS::StackName}-NotifyingSubscribersLambda" PriceMigrationEngineSalesforceNotificationDateUpdateLambdaOutput: Value: !GetAtt PriceMigrationEngineSalesforceNotificationDateUpdateLambda.Arn Export: Name: !Sub "${AWS::StackName}-UpdatingSalesforceWithNotificationsLambda" PriceMigrationEngineAmendmentLambdaOutput: Value: !GetAtt PriceMigrationEngineAmendmentLambda.Arn Export: Name: !Sub "${AWS::StackName}-AmendingLambda" PriceMigrationEngineSalesforceAmendmentUpdateLambdaOutput: Value: !GetAtt PriceMigrationEngineSalesforceAmendmentUpdateLambda.Arn Export: Name: !Sub "${AWS::StackName}-UpdatingSalesforceWithAmendsLambda" PriceMigrationEngineCohortTableDatalakeExportLambdaOutput: Value: !GetAtt PriceMigrationEngineCohortTableDatalakeExportLambda.Arn Export: Name: !Sub "${AWS::StackName}-ExportingCohortTableToDatalakeLambda"