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テンプレートを配置しています。
https://github.com/awstut-an-r/awstut-fa/tree/main/138
テンプレートファイルのポイント解説
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を作成しました。