[アップデート] DocumentDB がクラスターの停止と起動をサポートするようになりました!

こんにちは、岩城です。

本日、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"