180 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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"},
 | |
|         },
 | |
|     },
 | |
| }
 |