この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
おはようございます、もきゅりんです。
みなさん、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 のテンプレートと似ているので少々の手間分くらいしかお役に立たないと思いますが、どこかのどなたかのお役に立てば幸いです。