CloudFormation で DocumentDB を作った
はじめに
おはようございます、もきゅりんです。
みなさん、DocumentDB 使ってますか?
わたしは DocumentDB は弊社菊池が好きだ、ということくらいしか認知していません。
[AWS] DocumentDB 詳細解説:MongoDB との違いを理解する | DevelopersIO
ということで、CloudFormation で DocumentDB を作る機会があったので展開しておきます。
利用機会があるときにご自由にカスタマイズしてお使い下さい。
前提
- ポート27017を許可するセキュリティグループおよびDBサブネットは事前に別のCFnで作成済みで、スタックのリソース出力を参照しています。よしなに状況に合わせて入力下さい。
- マスタユーザー名やパスワードをパラメータ化していますので、 Secrets manager を適宜ご利用下さい。
- 保存データの暗号化は AWSマネージドサービスカスタマーマスターキー(CMK)を使った有効化ですので任意に変更して下さい。
- 削除保護は無効にしています。よしなに変更して下さい。
- Auroraなどと同様、Amazon DocumentDBでは、デフォルトのクラスターパラメーターグループに直接変更を加えることはできないため、パラメータグループを作成して適用しています。
- パラメータグループでは、イベントの監査ログ、プロファイリングログの出力を有効としています。プロファイリングのパラメータはデフォルトです。CloudWatchLogsに対して標準料金がかかるため、必要、不要なDBパラメータは任意で変更、削除して下さい。
- エンジンバージョンは4.0.0です。
- 自動マイナーエンジンアップグレードは無効としています。
- プライマリ1, レプリカ1です。
参考
上記の参考情報になります。
- 保存されているAmazonDocumentDBデータの暗号化-AmazonDocumentDB
- AmazonDocumentDBイベントの監査-AmazonDocumentDB
- AmazonDocumentDBオペレーションのプロファイリング-AmazonDocumentDB
- Amazon DocumentDB Cluster Parameters Reference - Amazon DocumentDB
利用できるバージョンは事前に確認しておきましょう。
aws docdb describe-db-engine-versions \ --engine docdb
作成されるリソース
- DBサブネットグループ
- クラスターパラメータグループ
- プライマリインスタンス
- リードレプリカインスタンス
- 監視, プロファイリングログをCloudWatchLogsに出力
テンプレート
AWSTemplateFormatVersion: '2010-09-09' Description: DocumentDB template # ------------------------------------------------------------# # Parameters # ------------------------------------------------------------# Parameters: NameTagPrefix: Type: String Default: 'demo' Description: Prefix of Name tags. Env: Type: String Default: 'dev' Description: Prefix of Env tags. MasterUsername: NoEcho: 'true' Description: DB MasterUserName Type: 'String' MasterUserPassword: NoEcho: 'true' Description: DB MasterPassword Type: 'String' DocDBInstanceClass: Description: 'Instance class. Please refer to: https://docs.aws.amazon.com/documentdb/latest/developerguide/db-instance-classes.html#db-instance-classes-by-region' Type: 'String' Default: 'db.t3.medium' AllowedValues: - db.t3.medium - db.r5.large - db.r5.xlarge - db.r5.2xlarge - db.r5.4xlarge - db.r5.12xlarge - db.r5.24xlarge ConstraintDescription: 'Instance type must be of the ones supported for the region. Please refer to: https://docs.aws.amazon.com/documentdb/latest/developerguide/db-instance-classes.html#db-instance-classes-by-region' BackupRetentionPeriod: Description: BuckUp Generation(1-35) Type: String Default: '7' PreferredBackupWindow: Description: Enter BackupWindow Type: String Default: '17:00-17:30' PreferredMaintenanceWindow: Description: Enter MaintenanceWindow(UTC) Type: String Default: 'sun:17:30-sun:18:00' # ------------------------------------------------------------# # Resources # ------------------------------------------------------------# Resources: docDBSubnetGroup: Type: AWS::DocDB::DBSubnetGroup Properties: DBSubnetGroupDescription: Aurora Subnet Group DBSubnetGroupName: !Sub ${NameTagPrefix}-${Env}-docdb-subnetgroup SubnetIds: - Fn::ImportValue: !Sub ${NameTagPrefix}-${Env}-private-subnet-1a - Fn::ImportValue: !Sub ${NameTagPrefix}-${Env}-private-subnet-1c Tags: - Key: Name Value: !Sub ${NameTagPrefix}-${Env}-docdb-subnetgroup docDBClusterParameterGroup: Type: AWS::DocDB::DBClusterParameterGroup Properties: Description: 'docDB4.0.0ClusterParameterGroup' Family: docdb4.0 Name: !Sub ${NameTagPrefix}-${Env}-docDBCluster-ParameterGroup Parameters: audit_logs: 'enabled' profiler: 'enabled' profiler_sampling_rate: 1.0 profiler_threshold_ms: 100 Tags: - Key: Name Value: !Sub ${NameTagPrefix}-${Env}-docDBCluster-ParameterGroup docDBCluster: Type: AWS::DocDB::DBCluster Properties: BackupRetentionPeriod: !Ref BackupRetentionPeriod DBClusterIdentifier: !Sub '${NameTagPrefix}-${Env}-docdb-cluster' DBClusterParameterGroupName: !Ref docDBClusterParameterGroup DBSubnetGroupName: !Ref docDBSubnetGroup DeletionProtection: false EnableCloudwatchLogsExports: - audit - profiler EngineVersion: 4.0.0 MasterUsername: !Ref MasterUsername MasterUserPassword: !Ref MasterUserPassword Port: 27017 PreferredBackupWindow: !Ref PreferredBackupWindow PreferredMaintenanceWindow: !Ref PreferredMaintenanceWindow StorageEncrypted: true Tags: - Key: Name Value: docDB-Cluster VpcSecurityGroupIds: - Fn::ImportValue: !Sub ${NameTagPrefix}-${Env}-docdb-sg docDBInstance1a: Type: AWS::DocDB::DBInstance Properties: AutoMinorVersionUpgrade: false AvailabilityZone: !Select - 0 - !GetAZs Ref: 'AWS::Region' DBClusterIdentifier: !Ref docDBCluster DBInstanceIdentifier: !Sub '${NameTagPrefix}-${Env}-docdb1a' DBInstanceClass: !Ref DocDBInstanceClass Tags: - Key: Name Value: !Sub ${NameTagPrefix}-${Env}-docdb-instance1a docDBInstance1c: Type: AWS::DocDB::DBInstance Properties: AutoMinorVersionUpgrade: false AvailabilityZone: !Select - 1 - !GetAZs Ref: 'AWS::Region' DBClusterIdentifier: !Ref docDBCluster DBInstanceIdentifier: !Sub '${NameTagPrefix}-${Env}-docdb1c' DBInstanceClass: !Ref DocDBInstanceClass Tags: - Key: Name Value: !Sub ${NameTagPrefix}-${Env}-docdb-instance1c # ------------------------------------------------------------# # Outputs # ------------------------------------------------------------# Outputs: ClusterId: Value: !Ref docDBCluster ClusterEndpoint: Value: !GetAtt docDBCluster.Endpoint ClusterPort: Value: !GetAtt docDBCluster.Port EngineVersion: Value: '4.0.0'
最後に
まぁ Aurora のテンプレートと似ているので少々の手間分くらいしかお役に立たないと思いますが、どこかのどなたかのお役に立てば幸いです。