187 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			187 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from __future__ import unicode_literals
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template = {
							 | 
						||
| 
								 | 
							
								  "AWSTemplateFormatVersion": "2010-09-09",
							 | 
						||
| 
								 | 
							
								  "Parameters" : {
							 | 
						||
| 
								 | 
							
								    "DatabaseName" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "The name of the first database to be created when the cluster is created",
							 | 
						||
| 
								 | 
							
								      "Type" : "String",
							 | 
						||
| 
								 | 
							
								      "Default" : "dev",
							 | 
						||
| 
								 | 
							
								      "AllowedPattern" : "([a-z]|[0-9])+"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "ClusterType" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "The type of cluster",
							 | 
						||
| 
								 | 
							
								      "Type" : "String",
							 | 
						||
| 
								 | 
							
								      "Default" : "single-node",
							 | 
						||
| 
								 | 
							
								      "AllowedValues" : [ "single-node", "multi-node" ]
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "NumberOfNodes" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "The number of compute nodes in the cluster. For multi-node clusters, the NumberOfNodes parameter must be greater than 1",
							 | 
						||
| 
								 | 
							
								      "Type" : "Number",
							 | 
						||
| 
								 | 
							
								      "Default" : "1"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "NodeType" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "The type of node to be provisioned",
							 | 
						||
| 
								 | 
							
								      "Type" : "String",
							 | 
						||
| 
								 | 
							
								      "Default" : "dw1.xlarge",
							 | 
						||
| 
								 | 
							
								      "AllowedValues" : [ "dw1.xlarge", "dw1.8xlarge", "dw2.large", "dw2.8xlarge" ]
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "MasterUsername" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "The user name that is associated with the master user account for the cluster that is being created",
							 | 
						||
| 
								 | 
							
								      "Type" : "String",
							 | 
						||
| 
								 | 
							
								      "Default" : "defaultuser",
							 | 
						||
| 
								 | 
							
								      "AllowedPattern" : "([a-z])([a-z]|[0-9])*"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "MasterUserPassword" :  {
							 | 
						||
| 
								 | 
							
								      "Description" : "The password that is associated with the master user account for the cluster that is being created.",
							 | 
						||
| 
								 | 
							
								      "Type" : "String",
							 | 
						||
| 
								 | 
							
								      "NoEcho" : "true"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "InboundTraffic" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "Allow inbound traffic to the cluster from this CIDR range.",
							 | 
						||
| 
								 | 
							
								      "Type" : "String",
							 | 
						||
| 
								 | 
							
								      "MinLength": "9",
							 | 
						||
| 
								 | 
							
								      "MaxLength": "18",
							 | 
						||
| 
								 | 
							
								      "Default" : "0.0.0.0/0",
							 | 
						||
| 
								 | 
							
								      "AllowedPattern" : "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})",
							 | 
						||
| 
								 | 
							
								      "ConstraintDescription" : "must be a valid CIDR range of the form x.x.x.x/x."
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "PortNumber" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "The port number on which the cluster accepts incoming connections.",
							 | 
						||
| 
								 | 
							
								      "Type" : "Number",
							 | 
						||
| 
								 | 
							
								      "Default" : "5439"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  "Conditions" : {
							 | 
						||
| 
								 | 
							
								    "IsMultiNodeCluster" : {
							 | 
						||
| 
								 | 
							
								      "Fn::Equals" : [{ "Ref" : "ClusterType" }, "multi-node" ]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  "Resources" : {
							 | 
						||
| 
								 | 
							
								    "RedshiftCluster" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::Redshift::Cluster",
							 | 
						||
| 
								 | 
							
								      "DependsOn" : "AttachGateway",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "ClusterType" : { "Ref" : "ClusterType" },
							 | 
						||
| 
								 | 
							
								        "NumberOfNodes" : { "Fn::If" : [ "IsMultiNodeCluster",  { "Ref" : "NumberOfNodes" }, { "Ref" : "AWS::NoValue" }]},
							 | 
						||
| 
								 | 
							
								        "NodeType" : { "Ref" : "NodeType" },
							 | 
						||
| 
								 | 
							
								        "DBName" : { "Ref" : "DatabaseName" },
							 | 
						||
| 
								 | 
							
								        "MasterUsername" : { "Ref" : "MasterUsername" },
							 | 
						||
| 
								 | 
							
								        "MasterUserPassword" : { "Ref" : "MasterUserPassword" },
							 | 
						||
| 
								 | 
							
								        "ClusterParameterGroupName" : { "Ref" : "RedshiftClusterParameterGroup" },
							 | 
						||
| 
								 | 
							
								        "VpcSecurityGroupIds" : [ { "Ref" : "SecurityGroup" } ],
							 | 
						||
| 
								 | 
							
								        "ClusterSubnetGroupName" : { "Ref" : "RedshiftClusterSubnetGroup" },
							 | 
						||
| 
								 | 
							
								        "PubliclyAccessible" : "true",
							 | 
						||
| 
								 | 
							
								        "Port" : { "Ref" : "PortNumber" }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "RedshiftClusterParameterGroup" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::Redshift::ClusterParameterGroup",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "Description" : "Cluster parameter group",
							 | 
						||
| 
								 | 
							
								        "ParameterGroupFamily" : "redshift-1.0",
							 | 
						||
| 
								 | 
							
								        "Parameters" : [{
							 | 
						||
| 
								 | 
							
								          "ParameterName" : "enable_user_activity_logging",
							 | 
						||
| 
								 | 
							
								          "ParameterValue" : "true"
							 | 
						||
| 
								 | 
							
								        }]
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "RedshiftClusterSubnetGroup" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::Redshift::ClusterSubnetGroup",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "Description" : "Cluster subnet group",
							 | 
						||
| 
								 | 
							
								        "SubnetIds" : [ { "Ref" : "PublicSubnet" } ]
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "VPC" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::VPC",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "CidrBlock" : "10.0.0.0/16"
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "PublicSubnet" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::Subnet",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "CidrBlock" : "10.0.0.0/24",
							 | 
						||
| 
								 | 
							
								        "VpcId" : { "Ref" : "VPC" }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "SecurityGroup" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::SecurityGroup",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "GroupDescription" : "Security group",
							 | 
						||
| 
								 | 
							
								        "SecurityGroupIngress" : [ {
							 | 
						||
| 
								 | 
							
								          "CidrIp" : { "Ref": "InboundTraffic" },
							 | 
						||
| 
								 | 
							
								          "FromPort" : { "Ref" : "PortNumber" },
							 | 
						||
| 
								 | 
							
								          "ToPort" : { "Ref" : "PortNumber" },
							 | 
						||
| 
								 | 
							
								          "IpProtocol" : "tcp"
							 | 
						||
| 
								 | 
							
								        } ],
							 | 
						||
| 
								 | 
							
								        "VpcId" : { "Ref" : "VPC" }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "myInternetGateway" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::InternetGateway"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "AttachGateway" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::VPCGatewayAttachment",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "VpcId" : { "Ref" : "VPC" },
							 | 
						||
| 
								 | 
							
								        "InternetGatewayId" : { "Ref" : "myInternetGateway" }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "PublicRouteTable" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::RouteTable",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "VpcId" : {
							 | 
						||
| 
								 | 
							
								          "Ref" : "VPC"
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "PublicRoute" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::Route",
							 | 
						||
| 
								 | 
							
								      "DependsOn" : "AttachGateway",
							 | 
						||
| 
								 | 
							
								      "Properties"  : {
							 | 
						||
| 
								 | 
							
								        "RouteTableId" : {
							 | 
						||
| 
								 | 
							
								          "Ref" : "PublicRouteTable"
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        "DestinationCidrBlock" : "0.0.0.0/0",
							 | 
						||
| 
								 | 
							
								        "GatewayId" : {
							 | 
						||
| 
								 | 
							
								          "Ref" : "myInternetGateway"
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "PublicSubnetRouteTableAssociation" : {
							 | 
						||
| 
								 | 
							
								      "Type" : "AWS::EC2::SubnetRouteTableAssociation",
							 | 
						||
| 
								 | 
							
								      "Properties" : {
							 | 
						||
| 
								 | 
							
								        "SubnetId" : {
							 | 
						||
| 
								 | 
							
								          "Ref" : "PublicSubnet"
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        "RouteTableId" : {
							 | 
						||
| 
								 | 
							
								          "Ref" : "PublicRouteTable"
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  "Outputs" : {
							 | 
						||
| 
								 | 
							
								    "ClusterEndpoint" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "Cluster endpoint",
							 | 
						||
| 
								 | 
							
								      "Value" : { "Fn::Join" : [ ":", [ { "Fn::GetAtt" : [ "RedshiftCluster", "Endpoint.Address" ] }, { "Fn::GetAtt" : [ "RedshiftCluster", "Endpoint.Port" ] } ] ] }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "ClusterName" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "Name of cluster",
							 | 
						||
| 
								 | 
							
								      "Value" : { "Ref" : "RedshiftCluster" }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "ParameterGroupName" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "Name of parameter group",
							 | 
						||
| 
								 | 
							
								      "Value" : { "Ref" : "RedshiftClusterParameterGroup" }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "RedshiftClusterSubnetGroupName" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "Name of cluster subnet group",
							 | 
						||
| 
								 | 
							
								      "Value" : { "Ref" : "RedshiftClusterSubnetGroup" }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "RedshiftClusterSecurityGroupName" : {
							 | 
						||
| 
								 | 
							
								      "Description" : "Name of cluster security group",
							 | 
						||
| 
								 | 
							
								      "Value" : { "Ref" : "SecurityGroup" }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |