CloudFormationを使用してAurora Serverless v2作成

CloudFormationを使用してAurora Serverless v2作成

CloudFormationを使用してAurora Serverless v2作成

以下のページで、CloudFormationを使用して、Aurora Serverless v1を作成する方法をご紹介しました。

あわせて読みたい
CFNでAurora Serverless v1作成 【CloudFormationでAurora Serverless v1作成】 Aurora ServerlessはAWSが提供するマネージデータベースサービスです。 Amazon Aurora Serverless は、Amazon Aurora の...

2022/10/05にAurora Serverless v2もCloudFormationに対応することが発表されました。

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/amazon-aurora-serverless-v2-supports-aws-cloudformation/

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

構築する環境

Diagram of Aurora Serverless v2 creation using CloudFormation.

基本的な構成は、冒頭でご紹介したページと同様です。

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を使用して、指定可能なバージョンを確認します。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html#aurora-serverless-v2-Availability

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インスタンスの初期化処理に関する詳細は、以下のページもご確認ください。

あわせて読みたい
Linuxインスタンスの初期化方法4選 【Linuxインスタンスを初期化する4つの方法】 EC2インスタンスの起動時に初期化処理を実行する方法を考えます。 EC2インスタンスを構築時に初期化する以下の4つの手法を...

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【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クラスターを確認します。

Detail of Aurora 1.

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

Detail of Aurora 2.

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の詳細につきましては、以下のページをご確認ください。

あわせて読みたい
LinuxインスタンスにSSM Session Manager経由でアクセスする 【LinuxインスタンスにSSM Session Manager経由でアクセスする】 EC2インスタンスにSSM Session Manager経由でアクセスする構成を確認します。 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を作成しました。