Search code examples
aws-cloudformationamazon-rdsamazon-aurorababelfish

Create Aurora Cluster with Babelfish enables using Cloud Formation


Is there any way we can create an Aurora RDS Cluster Multi-AZ with Babelfish enabled using cloud formation. We can create it using [console or cli][1]. However, I want to create it using Cloudformation. I am not finding the options in the below available options.

DBCluster:
Type: AWS::RDS::DBCluster
Properties:
  AssociatedRoles:
    AssociatedRoles
  AvailabilityZones:
    AvailabilityZones
  BacktrackWindow: Number
  BackupRetentionPeriod: Number
  CopyTagsToSnapshot: false
  DBClusterIdentifier: "String"
  DBClusterParameterGroupName: "String"
  DBSubnetGroupName: "String"
  DatabaseName: "String"
  DeletionProtection: false
  EnableCloudwatchLogsExports:
    EnableCloudwatchLogsExports
  EnableHttpEndpoint: false
  EnableIAMDatabaseAuthentication: false
  Engine: "String" # Required
  EngineMode: "String"
  EngineVersion: "String"
  GlobalClusterIdentifier: "String"
  KmsKeyId: "String"
  MasterUserPassword: "String"
  MasterUsername: "String"
  Port: Number
  PreferredBackupWindow: "String"
  PreferredMaintenanceWindow: "String"
  ReplicationSourceIdentifier: "String"
  RestoreType: "String"
  ScalingConfiguration:
    AutoPause: false
    MaxCapacity: Number
    MinCapacity: Number
    SecondsUntilAutoPause: Number
  SnapshotIdentifier: "Number"
  SourceDBClusterIdentifier: "Number"
  SourceRegion: "Number"
  StorageEncrypted: false
  Tags:
    Tags
  UseLatestRestorableTime: false
  VpcSecurityGroupIds:
    VpcSecurityGroupIds

Not even at instance level

DBInstance:
Type: AWS::RDS::DBInstance
Properties:
  AllocatedStorage: "String"
  AllowMajorVersionUpgrade: false
  AssociatedRoles:
    AssociatedRoles
  AutoMinorVersionUpgrade: false
  AvailabilityZone: "String"
  BackupRetentionPeriod: Number
  CACertificateIdentifier: "String"
  CharacterSetName: "String"
  CopyTagsToSnapshot: false
  DBClusterIdentifier: "String"
  DBInstanceClass: "String" # Required
  DBInstanceIdentifier: "String"
  DBName: "String"
  DBParameterGroupName: "String"
  DBSecurityGroups:
    DBSecurityGroups
  DBSnapshotIdentifier: "String"
  DBSubnetGroupName: "String"
  DeleteAutomatedBackups: false
  DeletionProtection: false
  Domain: "String"
  DomainIAMRoleName: "String"
  EnableCloudwatchLogsExports:
    EnableCloudwatchLogsExports
  EnableIAMDatabaseAuthentication: false
  EnablePerformanceInsights: false
  Engine: "String"
  EngineVersion: "String"
  Iops: Number
  KmsKeyId: "String"
  LicenseModel: "String"
  MasterUserPassword: "String"
  MasterUsername: "String"
  MaxAllocatedStorage: Number
  MonitoringInterval: Number
  MonitoringRoleArn: "String"
  MultiAZ: false
  OptionGroupName: "String"
  PerformanceInsightsKMSKeyId: "String"
  PerformanceInsightsRetentionPeriod: Number
  Port: "String"
  PreferredBackupWindow: "String"
  PreferredMaintenanceWindow: "String"
  ProcessorFeatures:
    ProcessorFeatures
  PromotionTier: Number
  PubliclyAccessible: false
  SourceDBInstanceIdentifier: "String"
  SourceRegion: "String"
  StorageEncrypted: false
  StorageType: "String"
  Tags:
    Tags
  Timezone: "String"
  UseDefaultProcessorFeatures: false
  VPCSecurityGroups:
    VPCSecurityGroups

Thank you guys for your time and help. [1]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-create.html


Solution

  • Well, I got the answer to this question from somewhere else and it is the same as @SilentSteel mentioned in his comment. You have to create a new DB Cluster Parameter group with babel fish option 'on' and assign that parameter group to the cluster. However, babel fish is only supported in postgresql13 and later versions.

    RDSClusterParameterGroupforBF:
    Type: AWS::RDS::DBClusterParameterGroup
    Properties:
      Description: "Parameter Group for adding BableFish support in Aurora PostgreSQL" # Required
      Family: "aurora-postgresql13" # Required
      Parameters:
        rds.babelfish_status: 'on'
    

    Then in the cluster you will assign this using

    RDSCluster:
    Type: 'AWS::RDS::DBCluster'
    Properties:
      MasterUsername: !Join ['', ['{{resolve:secretsmanager:', !Ref MyRDSSecret, ':SecretString:username}}' ]]
      MasterUserPassword: !Join ['', ['{{resolve:secretsmanager:', !Ref MyRDSSecret, ':SecretString:password}}' ]]
      DBClusterIdentifier: aurora-postgresql-cluster
      Engine: aurora-postgresql
      EngineVersion: '13.6'
      EngineMode: provisioned
      **DBClusterParameterGroupName: !Ref RDSClusterParameterGroupforBF**
      DBSubnetGroupName: !Ref AuroraDBSubnetGroup1
      DatabaseName: Sample
      Port: '5432'
      VpcSecurityGroupIds:
        - Ref: DatabaseSecurityGroup
      EnableCloudwatchLogsExports:
        - postgresql
      Tags: 
        - Key: Name
          Value: !Sub ${EnvironmentName} Aurora DB Cluster1