'Creates a new cluster. To create the cluster in virtual
private cloud (VPC), you must provide cluster subnet group
name. If you don\'t provide a cluster subnet group name or the
cluster security group parameter, Amazon Redshift creates a
non-VPC cluster, it associates the default cluster security
group with the cluster. For more information about managing
clusters, go to `Amazon Redshift Clusters`_ in the Amazon
Redshift Management Guide .
:type db_name: string
:param db_name:
The name of the first database to be created when the cluster is
created.
To create additional databases after the cluster is created, connect to
the cluster with a SQL client and use SQL commands to create a
database. For more information, go to `Create a Database`_ in the
Amazon Redshift Database Developer Guide.
Default: `dev`
Constraints:
+ Must contain 1 to 64 alphanumeric characters.
+ Must contain only lowercase letters.
+ Cannot be a word that is reserved by the service. A list of reserved
words can be found in `Reserved Words`_ in the Amazon Redshift
Database Developer Guide.
:type cluster_identifier: string
:param cluster_identifier: A unique identifier for the cluster. You use
this identifier to refer to the cluster for any subsequent cluster
operations such as deleting or modifying. The identifier also
appears in the Amazon Redshift console.
Constraints:
+ Must contain from 1 to 63 alphanumeric characters or hyphens.
+ Alphabetic characters must be lowercase.
+ First character must be a letter.
+ Cannot end with a hyphen or contain two consecutive hyphens.
+ Must be unique for all clusters within an AWS account.
Example: `myexamplecluster`
:type cluster_type: string
:param cluster_type: The type of the cluster. When cluster type is
specified as
+ `single-node`, the **NumberOfNodes** parameter is not required.
+ `multi-node`, the **NumberOfNodes** parameter is required.
Valid Values: `multi-node` | `single-node`
Default: `multi-node`
:type node_type: string
:param node_type: The node type to be provisioned for the cluster. For
information about node types, go to ` Working with Clusters`_ in
the Amazon Redshift Management Guide .
Valid Values: `dw1.xlarge` | `dw1.8xlarge` | `dw2.large` |
`dw2.8xlarge`.
:type master_username: string
:param master_username:
The user name associated with the master user account for the cluster
that is being created.
Constraints:
+ Must be 1 - 128 alphanumeric characters.
+ First character must be a letter.
+ Cannot be a reserved word. A list of reserved words can be found in
`Reserved Words`_ in the Amazon Redshift Database Developer Guide.
:type master_user_password: string
:param master_user_password:
The password associated with the master user account for the cluster
that is being created.
Constraints:
+ Must be between 8 and 64 characters in length.
+ Must contain at least one uppercase letter.
+ Must contain at least one lowercase letter.
+ Must contain one number.
+ Can be any printable ASCII character (ASCII code 33 to 126) except \'
(single quote), " (double quote), \, /, @, or space.
:type cluster_security_groups: list
:param cluster_security_groups: A list of security groups to be
associated with this cluster.
Default: The default cluster security group for Amazon Redshift.
:type vpc_security_group_ids: list
:param vpc_security_group_ids: A list of Virtual Private Cloud (VPC)
security groups to be associated with the cluster.
Default: The default VPC security group is associated with the cluster.
:type cluster_subnet_group_name: string
:param cluster_subnet_group_name: The name of a cluster subnet group to
be associated with this cluster.
If this parameter is not provided the resulting cluster will be
deployed outside virtual private cloud (VPC).
:type availability_zone: string
:param availability_zone: The EC2 Availability Zone (AZ) in which you
want Amazon Redshift to provision the cluster. For example, if you
have several EC2 instances running in a specific Availability Zone,
then you might want the cluster to be provisioned in the same zone
in order to decrease network latency.
Default: A random, system-chosen Availability Zone in the region that
is specified by the endpoint.
Example: `us-east-1d`
Constraint: The specified Availability Zone must be in the same region
as the current endpoint.
:type preferred_maintenance_window: string
:param preferred_maintenance_window: The weekly time range (in UTC)
during which automated cluster maintenance can occur.
Format: `ddd:hh24:mi-ddd:hh24:mi`
Default: A 30-minute window selected at random from an 8-hour block of
time per region, occurring on a random day of the week. The
following list shows the time blocks for each region from which the
default maintenance windows are assigned.
+ **US-East (Northern Virginia) Region:** 03:00-11:00 UTC
+ **US-West (Oregon) Region** 06:00-14:00 UTC
+ **EU (Ireland) Region** 22:00-06:00 UTC
+ **Asia Pacific (Singapore) Region** 14:00-22:00 UTC
+ **Asia Pacific (Sydney) Region** 12:00-20:00 UTC
+ **Asia Pacific (Tokyo) Region** 17:00-03:00 UTC
Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun
Constraints: Minimum 30-minute window.
:type cluster_parameter_group_name: string
:param cluster_parameter_group_name:
The name of the parameter group to be associated with this cluster.
Default: The default Amazon Redshift cluster parameter group. For
information about the default parameter group, go to `Working with
Amazon Redshift Parameter Groups`_
Constraints:
+ Must be 1 to 255 alphanumeric characters or hyphens.
+ First character must be a letter.
+ Cannot end with a hyphen or contain two consecutive hyphens.
:type automated_snapshot_retention_period: integer
:param automated_snapshot_retention_period: The number of days that
automated snapshots are retained. If the value is 0, automated
snapshots are disabled. Even if automated snapshots are disabled,
you can still create manual snapshots when you want with
CreateClusterSnapshot.
Default: `1`
Constraints: Must be a value from 0 to 35.
:type port: integer
:param port: The port number on which the cluster accepts incoming
connections.
The cluster is accessible only via the JDBC and ODBC connection
strings. Part of the connection string requires the port on which
the cluster will listen for incoming connections.
Default: `5439`
Valid Values: `1150-65535`
:type cluster_version: string
:param cluster_version: The version of the Amazon Redshift engine
software that you want to deploy on the cluster.
The version selected runs on all the nodes in the cluster.
Constraints: Only version 1.0 is currently available.
Example: `1.0`
:type allow_version_upgrade: boolean
:param allow_version_upgrade: If `True`, upgrades can be applied during
the maintenance window to the Amazon Redshift engine that is
running on the cluster.
When a new version of the Amazon Redshift engine is released, you can
request that the service automatically apply upgrades during the
maintenance window to the Amazon Redshift engine that is running on
your cluster.
Default: `True`
:type number_of_nodes: integer
:param number_of_nodes: The number of compute nodes in the cluster.
This parameter is required when the **ClusterType** parameter is
specified as `multi-node`.
For information about determining how many nodes you need, go to `
Working with Clusters`_ in the Amazon Redshift Management Guide .
If you don\'t specify this parameter, you get a single-node cluster.
When requesting a multi-node cluster, you must specify the number
of nodes that you want in the cluster.
Default: `1`
Constraints: Value must be at least 1 and no more than 100.
:type publicly_accessible: boolean
:param publicly_accessible: If `True`, the cluster can be accessed from
a public network.
:type encrypted: boolean
:param encrypted: If `True`, the data in the cluster is encrypted at
rest.
Default: false
:type hsm_client_certificate_identifier: string
:param hsm_client_certificate_identifier: Specifies the name of the HSM
client certificate the Amazon Redshift cluster uses to retrieve the
data encryption keys stored in an HSM.
:type hsm_configuration_identifier: string
:param hsm_configuration_identifier: Specifies the name of the HSM
configuration that contains the information the Amazon Redshift
cluster can use to retrieve and store keys in an HSM.
:type elastic_ip: string
:param elastic_ip: The Elastic IP (EIP) address for the cluster.
Constraints: The cluster must be provisioned in EC2-VPC and publicly-
accessible through an Internet gateway. For more information about
provisioning clusters in EC2-VPC, go to `Supported Platforms to
Launch Your Cluster`_ in the Amazon Redshift Management Guide.'

def create_cluster(self, cluster_identifier, node_type, master_username, master_user_password, db_name=None, cluster_type=None, cluster_security_groups=None, vpc_security_group_ids=None, cluster_subnet_group_name=None, availability_zone=None, preferred_maintenance_window=None, cluster_parameter_group_name=None, automated_snapshot_retention_period=None, port=None, cluster_version=None, allow_version_upgrade=None, number_of_nodes=None, publicly_accessible=None, encrypted=None, hsm_client_certificate_identifier=None, hsm_configuration_identifier=None, elastic_ip=None):

    params = {'ClusterIdentifier': cluster_identifier, 'NodeType': node_type, 'MasterUsername': master_username, 'MasterUserPassword': master_user_password}
    if (db_name is not None):
        params['DBName'] = db_name
    if (cluster_type is not None):
        params['ClusterType'] = cluster_type
    if (cluster_security_groups is not None):
        self.build_list_params(params, cluster_security_groups, 'ClusterSecurityGroups.member')
    if (vpc_security_group_ids is not None):
        self.build_list_params(params, vpc_security_group_ids, 'VpcSecurityGroupIds.member')
    if (cluster_subnet_group_name is not None):
        params['ClusterSubnetGroupName'] = cluster_subnet_group_name
    if (availability_zone is not None):
        params['AvailabilityZone'] = availability_zone
    if (preferred_maintenance_window is not None):
        params['PreferredMaintenanceWindow'] = preferred_maintenance_window
    if (cluster_parameter_group_name is not None):
        params['ClusterParameterGroupName'] = cluster_parameter_group_name
    if (automated_snapshot_retention_period is not None):
        params['AutomatedSnapshotRetentionPeriod'] = automated_snapshot_retention_period
    if (port is not None):
        params['Port'] = port
    if (cluster_version is not None):
        params['ClusterVersion'] = cluster_version
    if (allow_version_upgrade is not None):
        params['AllowVersionUpgrade'] = str(allow_version_upgrade).lower()
    if (number_of_nodes is not None):
        params['NumberOfNodes'] = number_of_nodes
    if (publicly_accessible is not None):
        params['PubliclyAccessible'] = str(publicly_accessible).lower()
    if (encrypted is not None):
        params['Encrypted'] = str(encrypted).lower()
    if (hsm_client_certificate_identifier is not None):
        params['HsmClientCertificateIdentifier'] = hsm_client_certificate_identifier
    if (hsm_configuration_identifier is not None):
        params['HsmConfigurationIdentifier'] = hsm_configuration_identifier
    if (elastic_ip is not None):
        params['ElasticIp'] = elastic_ip
    return self._make_request(action='CreateCluster', verb='POST', path='/', params=params)
