この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンバンハ、千葉(幸)です。
Amazon RDS のマルチ AZ DB クラスターを CloudFormation で作成できるようになりました。
従来からあるマルチ AZ DB インスタンス構成ではなく、 2 つの読み込み可能なリーダーインスタンスを備えたマルチ AZ DB クラスターのほうです。2022年 3 月に一般提供されましたね。
そして時を同じくしてマルチ AZ DB クラスターがサポートされたリージョンも増えました。大阪リージョンも含まれています。
盛り上がってきましたね!
CloudFormation でマルチ AZ DB クラスターを作成してみた
さっそく CloudFormation でマルチ AZ DB クラスターを作成します。
以下のリファレンスを参考にします。
ちなみに上記のリファレンスのリソースタイプは、RDS のマルチ AZ DB クラスターだけでなく Aurora の DB クラスターにも対応しています。プロパティの中にはどちらか一方にしか対応していないものもあるので、取り違えないようにしましょう。
ありがたいことにマルチ AZ DB クラスター用のテンプレート例が載っていますので、これをそのまま使います。
AWSTemplateFormatVersion: 2010-09-09
Description: AWS CloudFormation Sample Template for creating a Multi-AZ DB cluster.
Parameters:
DBUsername:
NoEcho: 'true'
Description: Username for database access
Type: String
MinLength: '1'
MaxLength: '16'
AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
ConstraintDescription: Must begin with a letter and contain only alphanumeric characters.
DBPassword:
NoEcho: 'true'
Description: Password for database access
Type: String
MinLength: '8'
MaxLength: '41'
AllowedPattern: '[a-zA-Z0-9]*'
ConstraintDescription: Must contain only alphanumeric characters.
DBClusterIdentifier:
Type: String
Engine:
Type: String
EngineVersion:
Type: String
AllocatedStorage:
Type: Number
Iops:
Type: Number
Resources:
MultiAZDBCluster:
Type: 'AWS::RDS::DBCluster'
Properties:
MasterUsername: !Ref DBUsername
MasterUserPassword: !Ref DBPassword
DBClusterIdentifier: !Ref DBClusterIdentifier
Engine: !Ref Engine
EngineVersion: !Ref EngineVersion
AllocatedStorage: !Ref AllocatedStorage
Iops: !Ref Iops
DBClusterInstanceClass: db.r6gd.xlarge
BackupRetentionPeriod: 1
StorageType: io1
事前準備:デフォルト VPC の作成
今回使用するテンプレートではサブネットグループの指定がないため、デフォルトのサブネットグループが使用されます。
デフォルトのサブネットグループはデフォルト VPC を指定して作成されますので、もしデフォルト VPC を削除していた場合は作成し直しておきましょう。
CloudFormation スタックの作成
CloudFormation のコンソールよりスタックの作成を行います。今回はローカルで作成したテンプレートファイルをコンソールからアップロードしました。
続いてのステップでスタック名、各種パラメータを入力します。
パラメータは以下が存在します。
パラメータ | 説明 |
---|---|
AllocatedStorage | 割り当てストレージ(GiB)。最小 100 |
DBClusterIdentifier | クラスター識別子 |
DBPassword | DBパスワード。8~41文字。大文字小文字数字のみ |
DBUsername | DBユーザー名。1~16文字。大文字小文字数字のみ |
Engine | エンジン |
EngineVersion | エンジンバージョン |
Iops | プロビジョンドIOPS。最小 1,000 |
今回は以下のように入力しました。
Engine に mysql って入れて大丈夫だった……
パラメータのEngine
で指定した値が CloudFormation テンプレートのプロパティEngine
に使用されるのですが、リファレンスを見ると aurora 関連のみが許可されているように見えます。
さすがにマルチ AZ DB クラスターを作成したいのに aurora と名前がつくものを指定するのは違うだろう、と思いmysql
を指定してみたところ問題ありませんでした。(後続の手順で最後まで作成が完了した。)
リファレンスの更新が間に合ってないこともある、ということですね。
なお、エンジンごとのマルチ AZ DB クラスターの対応状況は以下から確認できます。
続いてのステップでは特に何もいじらず次に進みます。
ステップ 4 で最終確認をし、問題なければ作成を実行します。
開始からおよそ 15 分ほどでマルチ AZ DB クラスターの作成が完了しました。
作成されたマルチ AZ DB クラスターを確認してみる
今回のテンプレートにより作成されたマルチ AZ DB クラスターは以下の通りです。ライターが 1 台、リーダーが 2 台からなるクラスターになっていますね。
クラスターの設定を覗くとこのような感じ。パラメータで指定したものはその通りに、それ以外の部分はよしなにやってくれています。
↑ちなみにクラスターでもインスタンスでも DB オプショングループの項目はありませんでした。クラスター構成でない DB インスタンスと考え方が違う部分はそこそこありそうです。
AWS CLI でも確認しておきます。たくさんのパラメータがあるなぁ、という気になりますね。
% aws rds describe-db-clusters --db-cluster-identifier test-cluster
{
"DBClusters": [
{
"AllocatedStorage": 100,
"AvailabilityZones": [
"ap-northeast-1a",
"ap-northeast-1c",
"ap-northeast-1d"
],
"BackupRetentionPeriod": 1,
"DBClusterIdentifier": "test-cluster",
"DBClusterParameterGroup": "default.mysql8.0",
"DBSubnetGroup": "default",
"Status": "available",
"EarliestRestorableTime": "2022-11-05T09:47:06.251000+00:00",
"Endpoint": "test-cluster.cluster-cluh7scr0und.ap-northeast-1.rds.amazonaws.com",
"ReaderEndpoint": "test-cluster.cluster-ro-cluh7scr0und.ap-northeast-1.rds.amazonaws.com",
"MultiAZ": true,
"Engine": "mysql",
"EngineVersion": "8.0.30",
"LatestRestorableTime": "2022-11-05T09:55:00+00:00",
"Port": 3306,
"MasterUsername": "testuser",
"PreferredBackupWindow": "19:03-19:33",
"PreferredMaintenanceWindow": "fri:17:35-fri:18:05",
"ReadReplicaIdentifiers": [],
"DBClusterMembers": [
{
"DBInstanceIdentifier": "test-cluster-instance-3",
"IsClusterWriter": false,
"DBClusterParameterGroupStatus": "in-sync",
"PromotionTier": 1
},
{
"DBInstanceIdentifier": "test-cluster-instance-2",
"IsClusterWriter": false,
"DBClusterParameterGroupStatus": "in-sync",
"PromotionTier": 1
},
{
"DBInstanceIdentifier": "test-cluster-instance-1",
"IsClusterWriter": true,
"DBClusterParameterGroupStatus": "in-sync",
"PromotionTier": 1
}
],
"VpcSecurityGroups": [
{
"VpcSecurityGroupId": "sg-0b5575f7c0c8057bc",
"Status": "active"
}
],
"HostedZoneId": "Z24O6O9L7SGTNB",
"StorageEncrypted": true,
"KmsKeyId": "arn:aws:kms:ap-northeast-1:012345678910:key/38d7c968-7aac-4393-a3c5-b92349094249",
"DbClusterResourceId": "cluster-QMFDFNRASQFYVDM2X4BE7DBDNI",
"DBClusterArn": "arn:aws:rds:ap-northeast-1:012345678910:cluster:test-cluster",
"AssociatedRoles": [],
"IAMDatabaseAuthenticationEnabled": false,
"ClusterCreateTime": "2022-11-05T09:38:18.780000+00:00",
"EngineMode": "provisioned",
"DeletionProtection": false,
"HttpEndpointEnabled": false,
"ActivityStreamStatus": "stopped",
"CopyTagsToSnapshot": false,
"CrossAccountClone": false,
"DomainMemberships": [],
"TagList": [
{
"Key": "aws:cloudformation:stack-id",
"Value": "arn:aws:cloudformation:ap-northeast-1:012345678910:stack/multi-az-db-cluster/6bb45ba0-5ced-
11ed-9e75-06e89c8f4bd3"
},
{
"Key": "aws:cloudformation:stack-name",
"Value": "multi-az-db-cluster"
},
{
"Key": "aws:cloudformation:logical-id",
"Value": "MultiAZDBCluster"
}
],
"DBClusterInstanceClass": "db.r6gd.xlarge",
"StorageType": "io1",
"Iops": 1000,
"PubliclyAccessible": true,
"AutoMinorVersionUpgrade": true,
"MonitoringInterval": 0,
"PerformanceInsightsEnabled": false,
"NetworkType": "IPV4"
}
]
}
忘れずにお片付けを
確認が終わったので、今回作成したリソースを忘れずに削除しましょう。db.r6gd.xlarge
のインスタンスが 3 台動いているので、消し忘れるとなかなかのお値段になりそうです。
CloudFormation スタックの削除を行うと、10分ほどで削除が完了しました。
CloudFormation スタック削除後も手動スナップショットが残っているので、必要なければ削除しましょう。
終わりに
CloudFormation が Amazon RDS のマルチ AZ DB クラスターをサポートした、というアップデートでした。
テンプレートのサンプルもドキュメントに載せてくれているのでサクッと試すことができ助かりました。
リソースタイプAWS::RDS::DBCluster
はマルチ AZ DB クラスター専用というわけではなく Aurora DB クラスターも同じものを用いるため、対応しているプロパティの違いなどに注意してご活用ください。
以上、 チバユキ (@batchicchi) がお送りしました。