AWS CloudFormationでAuroraを作成時、ResourcesのDBInstance側で設定してはならないプロパティをまとめてみた

CloudFormationでAuroraを作成する際に、スタックを作成しましたが、エラーになりました。原因は、ResourcesのDBInstance内に設定してはいけないプロパティが存在していたためです。そのため、設定してはならないプロパティをまとめました。
2023.03.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

CloudFormationでAuroraを作成する際に、ResourcesAWS::RDS::DBInstance内に設定してはいけないプロパティが複数ありますので、まとめました。

私がCloudFormationでAuroraを作成する際に、former2で出力されるCloudFormationのテンプレートを参考にし、スタックを作成しましたが、エラーになりました。

原因は、AWS::RDS::DBInstance内に設定してはいけないプロパティが複数設定されていたためです。

そのとき、エラー対応が大変だった経験があり、設定してはいけないプロパティをまとめました。

former2で出力されるテンプレートに対しても、スタック作成時にエラーにならないよう参考になるかと思います。

former2については、以下の記事を一読下さい

former2で出力されたテンプレート

下記は、作成済みのAuroraをformer2で出力したテンプレートです。(一部マスクしてます)

既存のAuroraを削除し、このテンプレートでスタックを作成すると、エラーになります。

原因は、ResourcesAWS::RDS::DBInstance内に設定してはならないプロパティがあるためです。

例えば、KmsKeyIdは、AWS::RDS::DBCluster側でしか設定してはいけません。

AWSTemplateFormatVersion: "2010-09-09"
Metadata:
    Generator: "former2"
Description: ""
Resources:
    RDSDBCluster:
        Type: "AWS::RDS::DBCluster"
        Properties:
            AvailabilityZones: 
              - !Sub "${AWS::Region}c"
              - !Sub "${AWS::Region}a"
              - !Sub "${AWS::Region}d"
            BackupRetentionPeriod: 7
            DBClusterIdentifier: "database-1"
            DBClusterParameterGroupName: "default.aurora-postgresql14"
            DBSubnetGroupName: "default-vpc-xxxxxx"
            Engine: "aurora-postgresql"
            Port: !GetAtt RDSDBInstance.Endpoint.Port
            MasterUsername: "postgres"
            MasterUserPassword: "REPLACEME"
            PreferredBackupWindow: "17:20-17:50"
            PreferredMaintenanceWindow: "thu:15:30-thu:16:00"
            VpcSecurityGroupIds: 
              - "sg-xxxxxx"
            StorageEncrypted: true
            KmsKeyId: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:key/xxxxxx"
            EngineVersion: "14.6"
            EnableIAMDatabaseAuthentication: false
            EngineMode: "provisioned"
            DeletionProtection: false
            EnableHttpEndpoint: false

    RDSDBInstance:
        Type: "AWS::RDS::DBInstance"
        Properties:
            DBInstanceIdentifier: "database-1-instance-1"
            DBInstanceClass: "db.t3.medium"
            Engine: "aurora-postgresql"
            PreferredBackupWindow: "17:20-17:50"
            AvailabilityZone: !Sub "${AWS::Region}c"
            PreferredMaintenanceWindow: "thu:18:06-thu:18:36"
            MultiAZ: false
            EngineVersion: "14.6"
            AutoMinorVersionUpgrade: false
            LicenseModel: "postgresql-license"
            PubliclyAccessible: false
            StorageType: "aurora"
            Port: 5432
            DBClusterIdentifier: "database-1"
            KmsKeyId: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:key/xxxxxx"
            MonitoringInterval: 0
            PromotionTier: 1
            EnablePerformanceInsights: false
            DBSubnetGroupName: "default-vpc-xxxxxx"
            VPCSecurityGroups: 
              - "sg-xxxxxx"
            DBParameterGroupName: "default.aurora-postgresql14"
            OptionGroupName: "default:aurora-postgresql-14"
            CACertificateIdentifier: "rds-ca-2019"

DBインスタンス側で設定する必要がないプロパティ一覧

DBインスタンス側で設定する必要がないプロパティに関して、ドキュメントに記載があります。

例えば、KmsKeyIdには、Amazon Aurora  Not applicable.(適用できない)と記載があります。

これらをふまえて、以下の通り、DBインスタンスで設定する必要がないプロパティを一覧にしてみました。

プロパティ名 説明 備考
AllocatedStorage DBに最初に割り当てられるストレージ量 Auroraの場合、ストレージ量はユーザー側で設定しません
AssociatedRoles 関連づけるIAMロール クラスター側で設定
BackupRetentionPeriod 自動バックアップを保持する日数 クラスター側で設定
CharacterSetName 文字セット名 クラスター側で設定
CopyTagsToSnapshot スナップショットを復元時、タグをコピーするかどうか クラスター側で設定
DBName データベース名 クラスター側で設定
DBSnapshotIdentifier スナップショット名 クラスター側で設定
DBSubnetGroupName 関連付ける DB サブネットグループ クラスター側で設定
DeleteAutomatedBackups DB インスタンスが削除された直後に自動バックアップを削除するかどうか クラスターを削除すると、自動バックアップは必ず削除されます
DeletionProtection 削除保護の有無 クラスター側で設定
DomainIAMRoleName APIを呼ぶときに使用するIAMロール名 クラスター側で設定
EnableCloudwatchLogsExports ログ出力の有無 クラスター側で設定
EnableIAMDatabaseAuthentication IAM DB認証の有無 クラスター側で設定
EngineVersion エンジンのバージョン クラスター側で設定
KmsKeyId 使用するKMSキー クラスター側で設定
MasterUsername マスターユーザー名 クラスター側で設定
MasterUserPassword マスターユーザーのパスワード クラスター側で設定
MaxAllocatedStorage DBのストレージを自動的にスケーリングできる上限 クラスター側で設定
MultiAZ マルチAZにするかどうか AuroraはすべてのAZに複製されているため、設定不要
Port 受け入れるポート クラスター側で設定
PreferredBackupWindow バックアップの時間帯 クラスター側で設定
ProcessorFeatures CPUコア数とコアあたりのスレッド数 Auroraの場合設定できません
StorageEncrypted 暗号化するかどうか クラスター側で設定
StorageType ストレージ タイプ クラスター側で設定
VPCSecurityGroups 割り当てるセキュリティグループ クラスター側で設定

例外あり

StorageTypeMultiAZなど一部のプロパティは、ドキュメントに適用できないと記載してありますが、下記の場合、DBインスタンス側で設定できました。

  DBInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      StorageType: aurora
      MultiAZ: false

ただし、記載しないでも問題なく、コード量を増やすメリットはないため、削除しましょう。

CloudFormationでAuroraを作成する際の参考になれば幸いです。

参考記事