{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS CloudFormation Sample Template: Redshift cluster in a VPC", "Parameters": { "DatabaseName": { "Description": "The name of the first database to be created when the redshift cluster is created", "Type": "String", "Default": "defaultdb", "AllowedPattern": "([a-z]|[0-9])+" }, "ClusterType": { "Description": "The type of the cluster", "Type": "String", "Default": "single-node", "AllowedValues": [ "single-node", "multi-node" ] }, "NumberOfNodes": { "Description": "The number of compute nodes in the redshift cluster. When cluster type is specified as: 1) single-node, the NumberOfNodes parameter should be specified as 1, 2) multi-node, the NumberOfNodes parameter should be greater than 1", "Type": "Number", "Default": "1" }, "NodeType": { "Description": "The node type to be provisioned for the redshift cluster", "Type": "String", "Default": "dw2.large" }, "MasterUsername": { "Description": "The user name associated with the master user account for the redshift cluster that is being created", "Type": "String", "Default": "defaultuser", "AllowedPattern": "([a-z])([a-z]|[0-9])*", "NoEcho": "true" }, "MasterUserPassword": { "Description": "The password associated with the master user account for the redshift cluster that is being created. ", "Type": "String", "NoEcho": "true" } }, "Conditions": { "IsMultiNodeCluster": { "Fn::Equals": [ { "Ref": "ClusterType" }, "multi-node" ] } }, "Resources": { "RedshiftCluster": { "Type": "AWS::Redshift::Cluster", "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" } } }, "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": "Subnet" } ] } }, "VPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16" } }, "Subnet": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.0.0/24", "VpcId": { "Ref": "VPC" } } }, "InternetGateway" : { "Type" : "AWS::EC2::InternetGateway" }, "GatewayAttachment" : { "Type" : "AWS::EC2::VPCGatewayAttachment", "Properties" : { "VpcId" : { "Ref" : "VPC" }, "InternetGatewayId" : { "Ref" : "InternetGateway" } } }, "SecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Security group", "SecurityGroupIngress": [ { "CidrIp": "10.0.0.0/16", "FromPort": "80", "ToPort": "80", "IpProtocol": "tcp" } ], "VpcId": { "Ref": "VPC" } } } }, "Outputs": { "ClusterEndpoint": { "Value": { "Fn::Join": [ ":", [ { "Fn::GetAtt": [ "RedshiftCluster", "Endpoint.Address" ] }, { "Fn::GetAtt": [ "RedshiftCluster", "Endpoint.Port" ] } ] ] } } } }