Created
October 3, 2018 14:45
-
-
Save mikeapted/114d6c59cda856de59ea2a91ad3bc74e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"AWSTemplateFormatVersion":"2010-09-09", | |
"Description":"Creates resources necessary to replicate SQLServer database using AWS Database Migration Service to S3 Data lake.", | |
"Parameters":{ | |
"KeyName":{ | |
"Description":"", | |
"Type":"AWS::EC2::KeyPair::KeyName" | |
} | |
}, | |
"Mappings" : { | |
"RegionMap" : { | |
"us-east-1" : { "32" : "ami-c100bebb"}, | |
"us-east-2" : { "32" : "ami-548ea131"}, | |
"us-west-2" : { "32" : "ami-9e4493e6"}, | |
"eu-west-1" : { "32" : "ami-8575dafc"}, | |
"ap-southeast-2" : { "32" : "ami-0bb85069"} | |
}, | |
"QuickSightIPRange" : { | |
"us-east-1" : { "range" : "52.23.63.224/27"}, | |
"us-east-2" : { "range" : "52.15.247.160/27"}, | |
"us-west-2" : { "range" : "54.70.204.128/27"}, | |
"eu-west-1" : { "range" : "52.210.255.224/27"}, | |
"ap-southeast-2" : { "range" : "54.153.249.96/27"} | |
} | |
}, | |
"Resources":{ | |
"DmsVpc":{ | |
"Type":"AWS::EC2::VPC", | |
"Properties":{ | |
"CidrBlock":"172.31.0.0/16", | |
"EnableDnsSupport":"true", | |
"EnableDnsHostnames":"true", | |
"InstanceTenancy":"default", | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DmsVpc" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DMSInternetGateway":{ | |
"Type":"AWS::EC2::InternetGateway", | |
"Properties":{ | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DMSInternetGateway" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DMSAttachGateway":{ | |
"Type":"AWS::EC2::VPCGatewayAttachment", | |
"Properties":{ | |
"VpcId":{ | |
"Ref":"DmsVpc" | |
}, | |
"InternetGatewayId":{ | |
"Ref":"DMSInternetGateway" | |
} | |
} | |
}, | |
"DmsSubnet1":{ | |
"Type":"AWS::EC2::Subnet", | |
"Properties":{ | |
"VpcId":{ | |
"Ref":"DmsVpc" | |
}, | |
"MapPublicIpOnLaunch":"true", | |
"CidrBlock":"172.31.0.0/24", | |
"AvailabilityZone":{ | |
"Fn::Select" : [ "0", { "Fn::GetAZs" : "" } ] | |
}, | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DmsSubnet1" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DmsSubnet2":{ | |
"Type":"AWS::EC2::Subnet", | |
"Properties":{ | |
"VpcId":{ | |
"Ref":"DmsVpc" | |
}, | |
"MapPublicIpOnLaunch":"true", | |
"CidrBlock":"172.31.8.0/24", | |
"AvailabilityZone":{ | |
"Fn::Select" : [ "1", { "Fn::GetAZs" : "" } ] | |
}, | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DmsSubnet2" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DmsSubnet3":{ | |
"Type":"AWS::EC2::Subnet", | |
"Properties":{ | |
"VpcId":{ | |
"Ref":"DmsVpc" | |
}, | |
"MapPublicIpOnLaunch":"true", | |
"CidrBlock":"172.31.16.0/24", | |
"AvailabilityZone":{ | |
"Fn::Select" : [ "2", { "Fn::GetAZs" : "" } ] | |
}, | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DmsSubnet3" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DmsDbSubnetGroup":{ | |
"Type":"AWS::RDS::DBSubnetGroup", | |
"Properties":{ | |
"DBSubnetGroupDescription":"DMS DB Subnet Group", | |
"SubnetIds":[ | |
{ | |
"Ref":"DmsSubnet1" | |
}, | |
{ | |
"Ref":"DmsSubnet2" | |
}, | |
{ | |
"Ref":"DmsSubnet3" | |
} | |
], | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DmsDbSubnetGroup" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DmsPublicRouteTable":{ | |
"Type":"AWS::EC2::RouteTable", | |
"Properties":{ | |
"VpcId":{ | |
"Ref":"DmsVpc" | |
}, | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"DmsPublicRouteTable" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
"DmsPublicRoute":{ | |
"Type":"AWS::EC2::Route", | |
"Properties":{ | |
"RouteTableId":{ | |
"Ref":"DmsPublicRouteTable" | |
}, | |
"DestinationCidrBlock":"0.0.0.0/0", | |
"GatewayId":{ | |
"Ref":"DMSInternetGateway" | |
} | |
} | |
}, | |
"DmsSubnet1RouteTableAssociationA":{ | |
"Type":"AWS::EC2::SubnetRouteTableAssociation", | |
"Properties":{ | |
"SubnetId":{ | |
"Ref":"DmsSubnet1" | |
}, | |
"RouteTableId":{ | |
"Ref":"DmsPublicRouteTable" | |
} | |
} | |
}, | |
"DmsSubnet2RouteTableAssociationA":{ | |
"Type":"AWS::EC2::SubnetRouteTableAssociation", | |
"Properties":{ | |
"SubnetId":{ | |
"Ref":"DmsSubnet2" | |
}, | |
"RouteTableId":{ | |
"Ref":"DmsPublicRouteTable" | |
} | |
} | |
}, | |
"InstanceSecurityGroup":{ | |
"Type":"AWS::EC2::SecurityGroup", | |
"Properties":{ | |
"VpcId":{ | |
"Ref":"DmsVpc" | |
}, | |
"GroupDescription":"Enable RDP and SQL Server access", | |
"SecurityGroupIngress":[ | |
{ | |
"IpProtocol":"tcp", | |
"FromPort":"3389", | |
"ToPort":"3389", | |
"CidrIp":"0.0.0.0/0" | |
}, | |
{ | |
"IpProtocol":"tcp", | |
"FromPort":"1433", | |
"ToPort":"1433", | |
"CidrIp":"172.31.0.0/16" | |
} | |
] | |
} | |
}, | |
"DMSRole": { | |
"Type": "AWS::IAM::Role", | |
"Properties": { | |
"RoleName": { | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"dms-s3-role" | |
] | |
] | |
}, | |
"AssumeRolePolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [{ | |
"Effect": "Allow", | |
"Principal": {"Service": "dms.amazonaws.com"}, | |
"Action": ["sts:AssumeRole"] | |
}] | |
}, | |
"Policies": [{ | |
"PolicyName": { | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"dms-s3-policy" | |
] | |
] | |
}, | |
"PolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"s3:PutObject", | |
"s3:DeleteObject" | |
], | |
"Resource": [ | |
{"Fn::Join": ["", ["arn:aws:s3:::", { "Ref" : "TargetS3Bucket" },"/*"]]} | |
] | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"s3:ListBucket" | |
], | |
"Resource":["*"] | |
} | |
] | |
} | |
} | |
] | |
} | |
}, | |
"EC2SourceDB":{ | |
"Type":"AWS::EC2::Instance", | |
"Properties":{ | |
"SubnetId":{ | |
"Ref":"DmsSubnet1" | |
}, | |
"InstanceType":"m4.large", | |
"SecurityGroupIds":[ | |
{ | |
"Ref":"InstanceSecurityGroup" | |
} | |
], | |
"KeyName":{ | |
"Ref":"KeyName" | |
}, | |
"Tags":[ | |
{ | |
"Key":"Name", | |
"Value":{ | |
"Fn::Join":[ | |
"-", | |
[ | |
{ | |
"Ref":"AWS::StackName" | |
}, | |
"EC2SourceDB" | |
] | |
] | |
} | |
} | |
], | |
"BlockDeviceMappings":[ | |
{ | |
"DeviceName":"/dev/sda1", | |
"Ebs":{ | |
"DeleteOnTermination":"true", | |
"Iops":"7500", | |
"VolumeSize":"150", | |
"VolumeType":"io1" | |
} | |
} | |
], | |
"ImageId": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "32"]} | |
}, | |
"DependsOn" : "DMSInternetGateway" | |
}, | |
"TargetS3Bucket":{ | |
"Type" : "AWS::S3::Bucket" | |
} | |
}, | |
"Outputs":{ | |
"SourceEC2EndpointDns":{ | |
"Description":"Public DNSName of the newly created EC2 instance", | |
"Value":{ | |
"Fn::GetAtt":[ | |
"EC2SourceDB", | |
"PublicDnsName" | |
] | |
} | |
}, | |
"SourceEC2PrivateDns":{ | |
"Description":"Private DNSName of the newly created EC2 instance", | |
"Value":{ | |
"Fn::GetAtt":[ | |
"EC2SourceDB", | |
"PrivateDnsName" | |
] | |
} | |
}, | |
"VpcId":{ | |
"Description":"VPC Identifier", | |
"Value":{ | |
"Ref":"DmsVpc" | |
} | |
}, | |
"S3BucketName":{ | |
"Description":"Target S3 Bucket", | |
"Value":{ | |
"Ref":"TargetS3Bucket" | |
} | |
}, | |
"S3DMSRole":{ | |
"Description":"DMS Role to access S3 Bucket", | |
"Value":{ | |
"Fn::GetAtt":[ | |
"DMSRole", | |
"Arn" | |
] | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment