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"}, }, }, }