CloudFormationを使用してAurora Serverless v2作成
以下のページで、CloudFormationを使用して、Aurora Serverless v1を作成する方法をご紹介しました。
2022/10/05にAurora Serverless v2もCloudFormationに対応することが発表されました。

本ページでは、CloudFormationを使用して、Aurora Serverless v2を作成します。
構築する環境

基本的な構成は、冒頭でご紹介したページと同様です。
Aurora Serverless v2を作成し、AZが異なる2つのサブネットと関連付けます。
DBエンジンには、MySQLタイプの最新のバージョンを指定します。
EC2インスタンスを作成します。
Aurora Serverlessに接続するクライアントとして使用します。
OSは最新版のAmazon Linux 2023とします。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
テンプレートファイルのポイント解説
Aurora Serverless v2
CloudFormationを使用してAurora Serverless v2を作成する場合、3つのリソースを作成します。
各リソースの多くのパラメータは、通常のAuroraを作成する場合と同様です。
今回はAurora Serverless v2特有のパラメータに注目します。
DBサブネットグループ
Resources:
DBSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupName: dbsubnetgroup
DBSubnetGroupDescription: test subnet group
SubnetIds:
- !Ref DBSubnet1
- !Ref DBSubnet2
Code language: YAML (yaml)
こちらは特別な設定は不要です。
後述のDBクラスターを配置するサブネットを2つ以上指定します。
ポイントは各サブネットを作成するAZです。
それぞれ異なったAZに作成する必要がありますのでご注意ください。
Auroraクラスター
Resources:
DBCluster:
Type: AWS::RDS::DBCluster
Properties:
DatabaseName: !Ref DBName
DBClusterIdentifier: !Sub "${Prefix}-dbcluster"
DBSubnetGroupName: !Ref DBSubnetGroup
Engine: !Ref DBEngine
EngineVersion: !Ref DBEngineVersion
MasterUsername: !Ref DBMasterUsername
MasterUserPassword: !Ref DBMasterUserPassword
ServerlessV2ScalingConfiguration:
MaxCapacity: 1.0
MinCapacity: 0.5
StorageEncrypted: true
VpcSecurityGroupIds:
- !Ref DBSecurityGroup
Code language: YAML (yaml)
ポイントは3点です。
1点目はEngineプロパティです。
Aurora Serverless v2では、DBエンジンとしてMySQLまたはPostgreSQLが選択できます。
MySQLタイプのAurora Serverless v2を作成しますから、本プロパティに「aurora-mysql」を指定します。
2点目はEngineVersionプロパティです。
本プロパティでDBエンジンのバージョンを指定できます。
以下のページを参考に、AWS CLIを使用して、指定可能なバージョンを確認します。
ap-northeast-1リージョンで選択可能なMySQLタイプのバージョンは、以下のコマンドで確認できます。
$ aws rds describe-orderable-db-instance-options \
--engine aurora-mysql \
--db-instance-class db.serverless \
--region ap-northeast-1 \
--query 'OrderableDBInstanceOptions[].[EngineVersion]' \
--output text
8.0.mysql_aurora.3.02.0
8.0.mysql_aurora.3.02.1
8.0.mysql_aurora.3.02.2
8.0.mysql_aurora.3.02.3
8.0.mysql_aurora.3.03.0
8.0.mysql_aurora.3.03.1
8.0.mysql_aurora.3.03.1
Code language: Bash (bash)
今回は2023年7月時点で最新バージョンである「8.0.mysql_aurora.3.03.1」を指定します。
3つ目はServerlessV2ScalingConfigurationプロパティです。
本プロパティは、クラスター内に作成するDBインスタンスの性能(ACU)の取り得る範囲を定めるものです。
Aurora Serverless v2 の単位は Aurora 容量単位 (ACU).です。
各 ACU では、約 2 ギビバイト (GiB) のメモリと、対応する CPU、ネットワークが組み合わせられています。この単位を使用して、データベース容量の範囲を指定します。
Aurora Serverless v2 の容量
ACU値は0.5から0.5刻みに128まで指定できます。
今回は検証ということで、ACUの取り得る最小値に0.5を、最大値に1.0を指定します(MinCapacityおよびMaxCapacityプロパティ)。
DBインスタンス
Resources:
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
DBClusterIdentifier: !Ref DBCluster
DBSubnetGroupName: !Ref DBSubnetGroup
DBInstanceIdentifier: !Sub "${Prefix}-dbinstance"
DBInstanceClass: !Ref DBInstanceClass
Engine: !Ref DBEngine
AvailabilityZone: !Sub "${AWS::Region}${AvailabilityZone}"
PubliclyAccessible: false
Code language: YAML (yaml)
DBInstanceClassプロパティがポイントです。
db.serverless — Aurora Serverless v2 によって使用される特別な DB インスタンスクラスタイプ。
DB インスタンスクラスタイプ
上記に従い、本プロパティには「db.serverless」を指定します。
セキュリティグループ
Resources:
DBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub "${Prefix}-DBSecurityGroup"
GroupDescription: DBSecurityGroup.
VpcId: !Ref VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: !Ref MySQLPort
ToPort: !Ref MySQLPort
SourceSecurityGroupId: !Ref InstanceSecurityGroup
Code language: YAML (yaml)
Auroraクラスターに適用するセキュリティグループです。
設定内容は通常のMySQLタイプのRDSインスタンス用のものと同様です。
MySQL通信用のポート(tcp/3306)へのインバウンド通信を許可します。
送信元には、後述のEC2インスタンスに適用するセキュリティグループを指定します。
(参考)EC2インスタンス
Resources:
Instance:
Type: AWS::EC2::Instance
Properties:
IamInstanceProfile: !Ref InstanceProfile
ImageId: !Ref ImageId
InstanceType: !Ref InstanceType
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref InstanceSubnet
GroupSet:
- !Ref InstanceSecurityGroup
UserData: !Base64 |
#!/bin/bash -xe
dnf update -y
dnf install -y mariadb105
Code language: YAML (yaml)
このインスタンスはAurora Serverless v2にアクセスするために使用します。
ですからユーザデータ機能を使って、mariadbをインストールします。
これでMySQL用クライアントを準備します。
EC2インスタンスの初期化処理に関する詳細は、以下のページもご確認ください。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- EC2インスタンス:i-0ea84706be1475b7f
- Auroraクラスター:fa-138-dbcluster
- Auroraクラスターエンドポイント:fa-138-dbcluster.cluster-cl50iikpthxs.ap-northeast-1.rds.amazonaws.com
AWS Management ConsoleからAuroraクラスターを確認します。

正常にAuroraクラスターが作成されています。
そしてクラスター内に1つのDBインスタンスが作成されています。

DBインスタンスのタイプを見ると、確かにAurora Serverless v2として作成されたことがわかります。
キャパシティの情報を見ると、ACUが0.5〜1.0に設定されていることがわかります。
動作確認
準備が整いましたので、EC2インスタンスにアクセスします。
インスタンスへのアクセスはSSM Session Managerを使用します。
% aws ssm start-session --target i-0ea84706be1475b7f
...
sh-5.2$
Code language: Bash (bash)
SSM Session Managerの詳細につきましては、以下のページをご確認ください。
次にMySQLクライアントのインストール状況を確認します。
sh-5.2$ dnf list installed | grep mariadb
mariadb-connector-c.aarch64 3.1.13-1.amzn2023.0.3 @amazonlinux
mariadb-connector-c-config.noarch 3.1.13-1.amzn2023.0.3 @amazonlinux
mariadb105.aarch64 3:10.5.18-1.amzn2023.0.1 @amazonlinux
mariadb105-common.aarch64 3:10.5.18-1.amzn2023.0.1 @amazonlinux
Code language: Bash (bash)
確かにMariaDBがインストールされていることがわかります。
バージョンを確認します。
sh-5.2$ mariadb -V
mariadb Ver 15.1 Distrib 10.5.18-MariaDB, for Linux (aarch64) using EditLine wrapper
Code language: Bash (bash)
最新版のクライアントがインストールされていることがわかります。
クライアントのインストールが確認できましたので、Aurora Serverless v2に接続します。
Auroraクラスターエンドポイントを指定した上で、ポート番号、ユーザー名、パスワードを引数として渡します。
sh-5.2$ mariadb -h fa-138-dbcluster.cluster-cl50iikpthxs.ap-northeast-1.rds.amazonaws.com -P 3306 -u testuser -p testdb
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 97
Server version: 8.0.26 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [testdb]>
Code language: Bash (bash)
正常に接続することができました。
Aurora Serverless v2が正常に作成されていることがわかりました。
まとめ
CloudFormationでAurora Serverless v2を作成しました。