Last active
July 10, 2019 08:35
-
-
Save Glamdring/5139bc49037f3b5c1f8cd008ba046df0 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
| "PrivateSubnetA": { | |
| "Type": "AWS::EC2::Subnet", | |
| "Properties": { | |
| "AvailabilityZone": { | |
| "Fn::Select": [ | |
| 0, | |
| { | |
| "Fn::GetAZs": { | |
| "Ref": "AWS::Region" | |
| } | |
| } | |
| ] | |
| }, | |
| "VpcId": { | |
| "Ref": "VPC" | |
| }, | |
| "CidrBlock": { | |
| "Fn::Select": [ | |
| "0", | |
| { | |
| "Ref": "PrivateSubnetRanges" | |
| } | |
| ] | |
| }, | |
| "Tags": [ | |
| { | |
| "Key": "Name", | |
| "Value": { | |
| "Ref": "AWS::StackName" | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "PrivateSubnetB": { | |
| "Type": "AWS::EC2::Subnet", | |
| "Properties": { | |
| "AvailabilityZone": { | |
| "Fn::Select": [ | |
| 1, | |
| { | |
| "Fn::GetAZs": { | |
| "Ref": "AWS::Region" | |
| } | |
| } | |
| ] | |
| }, | |
| "VpcId": { | |
| "Ref": "VPC" | |
| }, | |
| "CidrBlock": { | |
| "Fn::Select": [ | |
| "1", | |
| { | |
| "Ref": "PrivateSubnetRanges" | |
| } | |
| ] | |
| }, | |
| "Tags": [ | |
| { | |
| "Key": "Name", | |
| "Value": { | |
| "Ref": "AWS::StackName" | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "PrivateSubnetC": { | |
| "Type": "AWS::EC2::Subnet", | |
| "Properties": { | |
| "AvailabilityZone": { | |
| "Fn::Select": [ | |
| 2, | |
| { | |
| "Fn::GetAZs": { | |
| "Ref": "AWS::Region" | |
| } | |
| } | |
| ] | |
| }, | |
| "VpcId": { | |
| "Ref": "VPC" | |
| }, | |
| "CidrBlock": { | |
| "Fn::Select": [ | |
| "2", | |
| { | |
| "Ref": "PrivateSubnetRanges" | |
| } | |
| ] | |
| }, | |
| "Tags": [ | |
| { | |
| "Key": "Name", | |
| "Value": { | |
| "Ref": "AWS::StackName" | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "PrivateSubnetARouteTableAssociation": { | |
| "Type": "AWS::EC2::SubnetRouteTableAssociation", | |
| "Properties": { | |
| "RouteTableId": { | |
| "Ref": "InternetFacingRouteTable" | |
| }, | |
| "SubnetId": { | |
| "Ref": "PrivateSubnetA" | |
| } | |
| } | |
| }, | |
| "PrivateSubnetBRouteTableAssociation": { | |
| "Type": "AWS::EC2::SubnetRouteTableAssociation", | |
| "Properties": { | |
| "RouteTableId": { | |
| "Ref": "InternetFacingRouteTable" | |
| }, | |
| "SubnetId": { | |
| "Ref": "PrivateSubnetB" | |
| } | |
| } | |
| }, | |
| "PrivateSubnetCRouteTableAssociation": { | |
| "Type": "AWS::EC2::SubnetRouteTableAssociation", | |
| "Properties": { | |
| "RouteTableId": { | |
| "Ref": "InternetFacingRouteTable" | |
| }, | |
| "SubnetId": { | |
| "Ref": "PrivateSubnetC" | |
| } | |
| } | |
| }, | |
| "DatabaseSecurityGroup": { | |
| "Type": "AWS::EC2::SecurityGroup", | |
| "Properties": { | |
| "GroupDescription": "Enable outbound HTTP(S) connections and inbound SSH and Cassandra TCP", | |
| "VpcId": { | |
| "Ref": "VPC" | |
| }, | |
| "SecurityGroupIngress": [ | |
| { | |
| "IpProtocol": "tcp", | |
| "FromPort": "9042", | |
| "ToPort": "9042", | |
| "CidrIp": { | |
| "Ref": "VpcCIDR" | |
| } | |
| }, | |
| { | |
| "IpProtocol": "tcp", | |
| "FromPort": "7000", | |
| "ToPort": "7000", | |
| "CidrIp": { | |
| "Ref": "VpcCIDR" | |
| } | |
| }, | |
| { | |
| "IpProtocol": "tcp", | |
| "FromPort": "7001", | |
| "ToPort": "7001", | |
| "CidrIp": { | |
| "Ref": "VpcCIDR" | |
| } | |
| }, | |
| { | |
| "IpProtocol": "tcp", | |
| "FromPort": "22", | |
| "ToPort": "22", | |
| "CidrIp": { | |
| "Ref": "VpcCIDR" | |
| } | |
| } | |
| ], | |
| "SecurityGroupEgress": [ | |
| { | |
| "CidrIp": "0.0.0.0/0", | |
| "FromPort": "80", | |
| "IpProtocol": "tcp", | |
| "ToPort": "80" | |
| }, | |
| { | |
| "CidrIp": "0.0.0.0/0", | |
| "FromPort": "443", | |
| "IpProtocol": "tcp", | |
| "ToPort": "443" | |
| }, | |
| { | |
| "IpProtocol": "tcp", | |
| "FromPort": "7000", | |
| "ToPort": "7000", | |
| "CidrIp": { | |
| "Ref": "VpcCIDR" | |
| } | |
| }, | |
| { | |
| "IpProtocol": "tcp", | |
| "FromPort": "7001", | |
| "ToPort": "7001", | |
| "CidrIp": { | |
| "Ref": "VpcCIDR" | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "DatabaseLoadBalancer": { | |
| "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", | |
| "Properties": { | |
| "Name": "DatabaseLoadBalancer", | |
| "Scheme": "internal", | |
| "Type": "network", | |
| "Subnets": [ | |
| { | |
| "Ref": "PrivateSubnetA" | |
| }, | |
| { | |
| "Ref": "PrivateSubnetB" | |
| }, | |
| { | |
| "Ref": "PrivateSubnetC" | |
| } | |
| ] | |
| } | |
| }, | |
| "DatabaseTargetGroup": { | |
| "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", | |
| "Properties": { | |
| "Name": "DatabaseTargetGroup", | |
| "Port": 9042, | |
| "Protocol": "TCP", | |
| "VpcId": { | |
| "Ref": "VPC" | |
| } | |
| } | |
| }, | |
| "DatabaseALBListenerTCP": { | |
| "Type": "AWS::ElasticLoadBalancingV2::Listener", | |
| "Properties": { | |
| "DefaultActions": [ | |
| { | |
| "Type": "forward", | |
| "TargetGroupArn": { | |
| "Ref": "DatabaseTargetGroup" | |
| } | |
| } | |
| ], | |
| "LoadBalancerArn": { | |
| "Ref": "DatabaseLoadBalancer" | |
| }, | |
| "Port": "9042", | |
| "Protocol": "TCP" | |
| } | |
| }, | |
| "DatabaseLaunchConfiguration": { | |
| "Type": "AWS::AutoScaling::LaunchConfiguration", | |
| "Properties": { | |
| "AssociatePublicIpAddress": true, | |
| "IamInstanceProfile": { | |
| "Ref": "InstanceRoleInstanceProfile" | |
| }, | |
| "ImageId": { | |
| "Fn::FindInMap": [ | |
| "RegionOS2AMI", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| "Linux" | |
| ] | |
| }, | |
| "InstanceType": { | |
| "Ref": "DatabaseInstanceType" | |
| }, | |
| "KeyName": { | |
| "Ref": "KeyPairName" | |
| }, | |
| "SecurityGroups": [ | |
| { | |
| "Ref": "DatabaseSecurityGroup" | |
| } | |
| ], | |
| "UserData": { | |
| "Fn::Base64": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "#!/bin/bash -x\n", | |
| "yum update -y aws-cfn-bootstrap\n", | |
| "yum install -y aws-cli\n", | |
| "#this runs the first stage of cfinit\n", | |
| { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "/opt/aws/bin/cfn-init -v --region ", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| " -s ", | |
| { | |
| "Ref": "AWS::StackName" | |
| }, | |
| " -r ", | |
| "DatabaseAutoScalingGroup" | |
| ] | |
| ] | |
| }, | |
| "\n", | |
| ". /tmp/install/setup-cassandra.sh ", | |
| { | |
| "Ref": "NodeSetupBucketName" | |
| }, | |
| "\n", | |
| "# All is well, so signal success.\n", | |
| "/opt/aws/bin/cfn-signal -e 0 -r \"Database group started.\" '", | |
| { | |
| "Ref": "DatabaseWaitHandle" | |
| }, | |
| "'\n" | |
| ] | |
| ] | |
| } | |
| } | |
| } | |
| }, | |
| "DatabaseAutoScalingGroup": { | |
| "Type": "AWS::AutoScaling::AutoScalingGroup", | |
| "Metadata": { | |
| "AWS::CloudFormation::Authentication": { | |
| "S3AccessCreds": { | |
| "buckets": [ | |
| { | |
| "Ref": "NodeSetupBucketName" | |
| } | |
| ], | |
| "roleName": { | |
| "Ref": "InstanceRole" | |
| }, | |
| "type": "S3" | |
| } | |
| }, | |
| "AWS::CloudFormation::Init": { | |
| "config": { | |
| "files": { | |
| "/tmp/install/setup-cassandra.sh": { | |
| "mode": "000755", | |
| "source": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "https://", | |
| { | |
| "Ref": "NodeSetupBucketName" | |
| }, | |
| ".s3-", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| ".amazonaws.com/setup-cassandra.sh" | |
| ] | |
| ] | |
| } | |
| }, | |
| "/tmp/install/update-cassandra-cluster-config.py": { | |
| "mode": "000755", | |
| "source": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "https://", | |
| { | |
| "Ref": "NodeSetupBucketName" | |
| }, | |
| ".s3-", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| ".amazonaws.com/update-cassandra-cluster-config.py" | |
| ] | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "Properties": { | |
| "AvailabilityZones": { | |
| "Fn::GetAZs": { | |
| "Ref": "AWS::Region" | |
| } | |
| }, | |
| "LaunchConfigurationName": { | |
| "Ref": "DatabaseLaunchConfiguration" | |
| }, | |
| "TargetGroupARNs": [ | |
| { | |
| "Ref": "DatabaseTargetGroup" | |
| } | |
| ], | |
| "MaxSize": { | |
| "Ref": "MaxDatabaseGroupSize" | |
| }, | |
| "MinSize": "1", | |
| "DesiredCapacity": { | |
| "Ref": "DatabaseGroupSize" | |
| }, | |
| "VPCZoneIdentifier": [ | |
| { | |
| "Ref": "PrivateSubnetA" | |
| }, | |
| { | |
| "Ref": "PrivateSubnetB" | |
| }, | |
| { | |
| "Ref": "PrivateSubnetC" | |
| } | |
| ], | |
| "Tags": [ | |
| { | |
| "Key": "Name", | |
| "PropagateAtLaunch": "true", | |
| "Value": "DatabaseNode" | |
| } | |
| ] | |
| } | |
| }, | |
| "InternetFacingRouteTable": { | |
| "Type": "AWS::EC2::RouteTable", | |
| "Properties": { | |
| "VpcId": { | |
| "Ref": "VPC" | |
| }, | |
| "Tags": [ | |
| { | |
| "Key": "Name", | |
| "Value": { | |
| "Ref": "AWS::StackName" | |
| } | |
| } | |
| ] | |
| } | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Added