この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、岩城です。
本日、DocumentDB でクラスターの停止と起動をサポートするアップデートがありましたので紹介します。
なにが嬉しいの?
これまでは DocumentDB を停止できず、全く利用していないけど削除はしたくないので起動し続けるといったケースで余分なコストが発生していました。 停止できるようになり、停止中はコストが発生しませんので嬉しいアップデートというわけです。 ただし、RDS と同様にメンテナンスの観点から 7 日後に自動的に起動されるので注意してください。
やってみた
本エントリの付録に DocumentDB のクラスター停止・起動を確認できる程度の CloudFormation テンプレートを載せました。 実際に動作確認してみたい方は参考にしてみてください。 ただし、利用料が発生しますのでご利用は計画的にお願いします。
マネジメントコンソール
クラスターを選択してアクション
からStop
を選択します。
最大 7 日間クラスターを停止でき、7 日経っても手動でクラスター起動しない場合は、自動的に起動されます。
Stop Cluster
を選択します。
インスタンスの停止に時間が掛かしますが、しばらくすると停止できました。
ちなみに、同様の手順で起動できます。こちらも起動までに時間が掛かりますが停止よりも短い印象です。
起動できました。
CLI
CLIも用意されています。
筆者の環境は以下のとおりです。
$ aws --version
aws-cli/1.16.192 Python/3.7.3 Darwin/17.7.0 botocore/1.12.182
停止の場合
$ aws docdb stop-db-cluster --db-cluster-identifier sample-docdb-cluster
起動の場合
$ aws docdb start-db-cluster --db-cluster-identifier sample-docdb-cluster
おわりに
本エントリがどなたかのお役に立てれば幸いです。
付録
---
AWSTemplateFormatVersion: '2010-09-09'
Description: DocumentDB Template
Parameters:
NameTagPrefix:
Type: String
Default: sample
Description: Prefix of Name tags.
VPCCIDR:
Description: First and Second Octet of VPC, For example xxx.xxx (192.168 / 172.16-31 / 10.0-255)
Type: String
Default: '192.168'
Mappings:
StackConfig:
SmapleVPC:
CIDR: .0.0/16
SampleSubnet1:
CIDR: .0.0/24
SampleSubnet2:
CIDR: .1.0/24
SampleSubnet3:
CIDR: .2.0/24
Resources:
# VPC
SmapleVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Sub ['${VPCCIDR}${Param1}', {Param1: !FindInMap [ StackConfig, SmapleVPC, CIDR ]}]
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
InstanceTenancy: default
Tags:
- Key: Name
Value: !Sub ${NameTagPrefix}-subnet-1a
# Subnet
SampleSubnet1:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: 'ap-northeast-1a'
CidrBlock: !Sub ['${VPCCIDR}${Param1}', {Param1: !FindInMap [ StackConfig, SampleSubnet1, CIDR ]}]
Tags:
- Key: Name
Value: ${NameTagPrefix}-subnet-1
VpcId: !Ref SmapleVPC
SampleSubnet2:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: 'ap-northeast-1c'
CidrBlock: !Sub ['${VPCCIDR}${Param1}', {Param1: !FindInMap [ StackConfig, SampleSubnet2, CIDR ]}]
Tags:
- Key: Name
Value: ${NameTagPrefix}-subnet-2
VpcId: !Ref SmapleVPC
SampleSubnet3:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: 'ap-northeast-1d'
CidrBlock: !Sub ['${VPCCIDR}${Param1}', {Param1: !FindInMap [ StackConfig, SampleSubnet3, CIDR ]}]
Tags:
- Key: Name
Value: ${NameTagPrefix}-subnet-3
VpcId: !Ref SmapleVPC
# DocumentDB
DocDBSubnetGroup:
Type: "AWS::DocDB::DBSubnetGroup"
Properties:
DBSubnetGroupDescription : !Sub ${NameTagPrefix}-subgrp
DBSubnetGroupName : !Sub ${NameTagPrefix}-subgrp
SubnetIds:
- !Ref SampleSubnet1
- !Ref SampleSubnet2
- !Ref SampleSubnet3
Tags:
- Key: Name
Value: !Sub ${NameTagPrefix}-subgrp
DocDBCluster:
Type: "AWS::DocDB::DBCluster"
DependsOn:
- DocDBSubnetGroup
Properties:
DBClusterIdentifier : !Sub ${NameTagPrefix}-cluster
DBSubnetGroupName : !Ref DocDBSubnetGroup
MasterUsername : "samplemaster"
MasterUserPassword : "samplepassword"
Port : "27017"
Tags:
- Key: "Name"
Value: !Sub ${NameTagPrefix}-docdb-cluster
DocDBInstance1:
Type: "AWS::DocDB::DBInstance"
DependsOn:
- DocDBCluster
Properties:
DBClusterIdentifier : !Ref DocDBCluster
DBInstanceIdentifier : !Sub ${NameTagPrefix}-instance1
DBInstanceClass: "db.r5.large"
DocDBInstance2:
Type: "AWS::DocDB::DBInstance"
DependsOn:
- DocDBCluster
Properties:
DBClusterIdentifier : !Ref DocDBCluster
DBInstanceIdentifier : !Sub ${NameTagPrefix}-instance2
DBInstanceClass: "db.r5.large"