AWSTemplateFormatVersion: 2010-09-09 Description: CloudFormation template for Aurora MySQL cluster. Parameters: DatabaseInstanceType: Default: db.r3.2xlarge AllowedValues: - db.r3.large - db.r3.xlarge - db.r3.2xlarge - db.r3.4xlarge - db.r3.8xlarge Description: The instance type to use for the Aurora database cluster. Type: String DatabasePassword: AllowedPattern: "^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)" ConstraintDescription: must contain only alphanumeric characters with at least one capital letter and one number. Description: The database admin account password. MaxLength: '41' MinLength: '8' NoEcho: 'true' Type: String DatabaseUsername: AllowedPattern: "[a-zA-Z0-9]+" ConstraintDescription: must contain only alphanumeric characters. Description: The database admin account user name. MaxLength: '16' MinLength: '1' Type: String DatabaseName: AllowedPattern: "[a-zA-Z0-9]+" ConstraintDescription: must contain only alphanumeric characters. Description: The default database name. MaxLength: '16' MinLength: '1' Type: String DatabaseBackupRetentionPeriod: Type: String Default: 7 AllowedValues: - 1 - 7 - 14 - 21 - 28 Description: The database backup retention period in days. DatabaseSubnets: Description: The subnets to place database instances in. Type: List DatabaseSecurityGroups: Type: List Description: Security groups to apply to the RDS cluster. Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: Aurora Database Configuration Parameters: - DatabaseInstanceType - DatabaseName - DatabaseUsername - DatabasePassword - DatabaseSubnets - DatabaseSecurityGroups - DatabaseBackupRetentionPeriod ParameterLabels: DatabaseInstanceType: default: Aurora Database Instance Type DatabasePassword: default: Database Password DatabaseUsername: default: Database Username DatabaseName: default: Database Name DatabaseBackupRetentionPeriod: default: Database Backup Retention Period DatabaseSubnets: default: Database Subnets DatabaseSecurityGroups: default: Database Security Groups Resources: DatabaseSubnetGroup: Type: AWS::RDS::DBSubnetGroup Properties: DBSubnetGroupDescription: CloudFormation managed DB subnet group. SubnetIds: Ref: DatabaseSubnets DatabaseCluster: Type: AWS::RDS::DBCluster Properties: Engine: aurora DatabaseName: Ref: DatabaseName DBClusterParameterGroupName: aurora-dbcluster-s3-access MasterUsername: Ref: DatabaseUsername MasterUserPassword: Ref: DatabasePassword BackupRetentionPeriod: Ref: DatabaseBackupRetentionPeriod PreferredBackupWindow: 02:00-03:00 PreferredMaintenanceWindow: mon:03:00-mon:04:00 DBSubnetGroupName: Ref: DatabaseSubnetGroup VpcSecurityGroupIds: Ref: DatabaseSecurityGroups DatabasePrimaryInstance: Type: AWS::RDS::DBInstance Properties: Engine: aurora PubliclyAccessible: 'true' DBClusterIdentifier: Ref: DatabaseCluster DBInstanceClass: Ref: DatabaseInstanceType DBSubnetGroupName: Ref: DatabaseSubnetGroup DatabaseReplicaInstance: Type: AWS::RDS::DBInstance Properties: Engine: aurora PubliclyAccessible: 'true' DBClusterIdentifier: Ref: DatabaseCluster DBInstanceClass: Ref: DatabaseInstanceType DBSubnetGroupName: Ref: DatabaseSubnetGroup Outputs: AuroraClusterEndpointPort: Description: Cluster endpoint and port Value: !Sub "${DatabaseCluster.Endpoint.Address}:${DatabaseCluster.Endpoint.Port}" AuroraClusterEndpoint: Description: Cluster endpoint only Value: !Sub "${DatabaseCluster.Endpoint.Address}" AuroraClusterPort: Description: Cluster port only Value: !Sub "${DatabaseCluster.Endpoint.Port}" AuroraClusterName: Description: Name of Aurora cluster Value: Ref: DatabaseCluster AuroraDatabaseName: Description: Name of the database for connections Value: Ref: DatabaseName