Search code examples
amazon-web-servicesaws-cloudformationamazon-rds

AWS CloudFormation RDS Instance fails to create - cannot find DBCluster


I am playing around with cloudformation and running into an issue with DBSubnetGroup that I cannot get around. My goal is to build a simple setup:

  • a VPC with two subnets
  • an RDS database subnet group on those subnets
  • an RDS database cluster in that db subnet
  • a single RDS instance in that cluster

In cloudformation, I keep getting an error:

Could not find DB Cluster: MyRDSClusterId (Service: AmazonRDS; Status Code: 
404; Error Code: DBClusterNotFoundFault; Request ID: ...)

Everything looks right to me, and cloudformation says my DBCluster was created correctly. What am I doing wrong here? Any insights into what I've done wrong would be greatly appreciated.

Here is my cloudformation template:

AWSTemplateFormatVersion: "2010-09-09"
Description: Stack with DBSubnetGroup, DBCluster, and one DBInstance
Resources:
  MyAppVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
  MyAppRDSSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: us-east-1a
      VpcId: !Ref MyAppVPC
      CidrBlock: 192.168.0.0/24
      MapPublicIpOnLaunch: true
  MyAppRDSSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: us-east-1b
      VpcId: !Ref MyAppVPC
      CidrBlock: 192.168.1.0/24
      MapPublicIpOnLaunch: true
  MyDBSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: My App DBSubnetGroup for RDS
      SubnetIds:
        - !Ref MyAppRDSSubnetA
        - !Ref MyAppRDSSubnetB
  MyRDSCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      BackupRetentionPeriod: 1
      DatabaseName: MyDB
      DBClusterIdentifier: MyRDSClusterId
      DBSubnetGroupName: !Ref MyDBSubnetGroup
      Engine: aurora
      MasterUsername: exampleUsername
      MasterUserPassword: examplePassword
  MyRDSInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBClusterIdentifier: !Ref MyRDSCluster
      DBInstanceClass: db.t2.small
      DBSubnetGroupName: !Ref MyDBSubnetGroup
      Engine: aurora      

Solution

  • Some charcter in your DBClusterIdentifier name is in uppercase. What cloudformation does is, it automatically convert all uppercase character to lowercase. Now when you try to attach DBInstances under the DBCluster it is not able to find with the DBClusterIdentifier you have mentioned as it contains some uppercase.

    MyRDSCluster:
        Type: AWS::RDS::DBCluster
        Properties:
          BackupRetentionPeriod: 1
          DatabaseName: MyDB
          DBClusterIdentifier: MyRDSClusterId <- here it converts all string to lowercase
          DBSubnetGroupName: !Ref MyDBSubnetGroup
          Engine: aurora
          MasterUsername: exampleUsername
          MasterUserPassword: examplePassword
      MyRDSInstance:
        Type: AWS::RDS::DBInstance
        Properties:
          DBClusterIdentifier: !Ref MyRDSCluster <- here it does not, so mismatch in name
          DBInstanceClass: db.t2.small
          DBSubnetGroupName: !Ref MyDBSubnetGroup
          Engine: aurora
    

    Solution is : give DBClusterIdentifier all in lowercase.

    I hope you got your Answer :)