Description: This template deploys the infrastructure for the re:Invent ENT312 session. This template creates Lambda Functions required for later execution of the DMS Cloudformation Implimentation Parameters: S3Bucket: Description: "This will be the bucket name which contains the source code for the Lambda Function" Type: String S3KeyName: Description: "Location of AWS Lambda function Source Code" Type: String ModuleName: Description: "The name of the NodeJS Module" Type: String DestinationPrivateSubnets: Type: String Description: The Private Subnets DestinationPublicSubnets: Type: String Description: Destination Public Subnets SourcePublicSubnets: Type: String Description: Source Public Subnets DMSReplciationInstanceClass: Type: String Description: Replication Instance Type Default: dms.t2.medium DBSourceEngine: Type: String Description: A Resource That needs to be defined DBSourceServerName: Type: String Description: A Resource That needs to be defined DBSourcePort: Type: String Description: A Resource That needs to be defined DBSourceUsername: Type: String Description: A Resource That needs to be defined DBSourcePassword: Type: String Description: A Resource That needs to be defined DBTargetEngine: Type: String Description: A Resource That needs to be defined DBTargetServerName: Type: String Description: A Resource That needs to be defined DBTargetPort: Type: String Description: A Resource That needs to be defined DBTargetUsername: Type: String Description: A Resource That needs to be defined DBTargetPassword: Type: String Description: A Resource That needs to be defined MigrationTable: Type: String Description: A Resource That needs to be defined Resources: DMSExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: "/" Policies: - PolicyName: root PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - dms:* - logs:* Resource: "*" DMScreateReplicationTaskFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.createReplicationTask" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn DMSCreateReplicationSubnetGroupFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.createReplicationSubnetGroup" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn DMScreateEndpointFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.createEndpoint" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn DMScreateReplicationInstanceFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.createReplicationInstance" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn DMSMigrationTaskStartFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.startReplicationTask" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn DMSreplicationInstanceWatcherFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.replicationInstanceWatcher" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn DMSreplicationTaskWatcherFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref S3Bucket S3Key: !Sub "${S3KeyName}/scripts/dms-lambda.zip" Handler: !Sub "${ModuleName}.taskWatcher" Runtime: nodejs4.3 Timeout: 30 Role: !GetAtt DMSExecutionRole.Arn YFunctionStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Sub "https://s3-us-west-2.amazonaws.com/${S3Bucket}/${S3KeyName}/templates/reinvent-ent312-lambda-dms-invoke.yml" Parameters: DestinationPrivateSubnets: !Ref DestinationPrivateSubnets DestinationPublicSubnets: !Ref DestinationPublicSubnets SourcePublicSubnets: !Ref SourcePublicSubnets DMSCreateReplicationSubnetGroupFunctionARN: !GetAtt DMSCreateReplicationSubnetGroupFunction.Arn DMSreplicationInstanceWatcherFunctionARN: !GetAtt DMSreplicationInstanceWatcherFunction.Arn DMSReplciationInstanceClass: !Ref DMSReplciationInstanceClass DMScreateReplicationInstanceFunctionARN: !GetAtt DMScreateReplicationInstanceFunction.Arn DMScreateEndpointFunctionARN: !GetAtt DMScreateEndpointFunction.Arn DMScreateReplicationTaskFunctionARN: !GetAtt DMScreateReplicationTaskFunction.Arn DMSMigrationTaskStartFunctionARN: !GetAtt DMSMigrationTaskStartFunction.Arn DMSreplicationTaskWatcherFunctionARN: !GetAtt DMSreplicationTaskWatcherFunction.Arn DBSourceEngine: !Ref DBSourceEngine DBSourceServerName: !Ref DBSourceServerName DBSourcePort: !Ref DBSourcePort DBSourceUsername: !Ref DBSourceUsername DBSourcePassword: !Ref DBSourcePassword DBTargetEngine: !Ref DBTargetEngine DBTargetServerName: !Ref DBTargetServerName DBTargetPort: !Ref DBTargetPort DBTargetUsername: !Ref DBTargetUsername DBTargetPassword: !Ref DBTargetPassword MigrationTable: !Ref MigrationTable Outputs: DMSreplicationInstanceWatcherFunctionARN: Description: DMSreplicationInstanceWatcherFunction Amazon Resource Name Value: !GetAtt DMSreplicationInstanceWatcherFunction.Arn DMSCreateReplicationSubnetGroupFunctionARN: Description: DMSCreateReplicationSubnetGroupFunction Amazon Resource Name Value: !GetAtt DMSCreateReplicationSubnetGroupFunction.Arn DMScreateReplicationTaskFunctionARN: Description: DMScreateReplicationTaskFunction Amazon Resource Name Value: !GetAtt DMScreateReplicationTaskFunction.Arn DMScreateEndpointFunctionARN: Description: DMScreateEndpointFunction Amazon Resource Name Value: !GetAtt DMScreateEndpointFunction.Arn DMScreateReplicationInstanceFunctionARN: Description: DMScreateReplicationInstanceFunction Amazon Resource Name Value: !GetAtt DMScreateReplicationInstanceFunction.Arn DMSMigrationTaskStartFunctionARN: Description: DMS Create Task Function Arn Value: !GetAtt DMSMigrationTaskStartFunction.Arn DMSreplicationInstanceWatcherFunctionARN: Description: DMSreplicationInstanceWatcherFunction Value: !GetAtt DMSreplicationInstanceWatcherFunction.Arn DMSreplicationTaskWatcherFunctionARN: Description: DMSreplicationTaskWatcherFunction Value: !GetAtt DMSreplicationTaskWatcherFunction.Arn