はじめに
CloudFormationでAuroraを作成する際に、Resources
のAWS::RDS::DBInstance
内に設定してはいけないプロパティが複数ありますので、まとめました。
私がCloudFormationでAuroraを作成する際に、former2で出力されるCloudFormationのテンプレートを参考にし、スタックを作成しましたが、エラーになりました。
原因は、AWS::RDS::DBInstance
内に設定してはいけないプロパティが複数設定されていたためです。
そのとき、エラー対応が大変だった経験があり、設定してはいけないプロパティをまとめました。
former2で出力されるテンプレートに対しても、スタック作成時にエラーにならないよう参考になるかと思います。
former2については、以下の記事を一読下さい
former2で出力されたテンプレート
下記は、作成済みのAuroraをformer2で出力したテンプレートです。(一部マスクしてます)
既存のAuroraを削除し、このテンプレートでスタックを作成すると、エラーになります。
原因は、Resources
のAWS::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 | 割り当てるセキュリティグループ | クラスター側で設定 |
例外あり
StorageType
やMultiAZ
など一部のプロパティは、ドキュメントに適用できないと記載してありますが、下記の場合、DBインスタンス側で設定できました。
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
StorageType: aurora
MultiAZ: false
ただし、記載しないでも問題なく、コード量を増やすメリットはないため、削除しましょう。
CloudFormationでAuroraを作成する際の参考になれば幸いです。