CFNでAurora Serverless v1作成

CFNでAurora Serverless作成

CloudFormationでAurora Serverless v1作成

Aurora ServerlessはAWSが提供するマネージデータベースサービスです。

Amazon Aurora Serverless は、Amazon Aurora のオンデマンドの Auto Scaling 設定です。アプリケーションニーズに応じて、自動的に起動、シャットダウン、および容量をスケールアップまたはスケールダウンします。 データベース容量を管理することなく、AWS でデータベースを実行できます。

Amazon Aurora Serverless

今回はCloudFormationでAurora Serverless v1を構築し、EC2インスタンスからアクセスすることを目標とします。

なおAurora Serverlessには2つのバージョンがありますが、今回はv1を対象とします。

Aurora Serverless v2に関しては、以下のページをご確認ください。

あわせて読みたい
CloudFormationを使用してAurora Serverless v2作成 【CloudFormationを使用してAurora Serverless v2作成】 以下のページで、CloudFormationを使用して、Aurora Serverless v1を作成する方法をご紹介しました。 https://a...

構築する環境

Diagram of Aurora Serverless

VPC内に3つのサブネットを作成します。
いずれもインターネットにアクセス不可なプライベートサブネットとします。

Aurora Serverlessを作成し、AZが異なる2つのサブネットと関連付けます。
MySQLタイプの最新のバージョンを指定します。

EC2インスタンスを作成します。
Aurora Serverlessに接続するクライアントとして使用します。
OSは最新版のAmazon Linux 2とします。

SSMエンドポイントを作成します。
SSM Session Managerを使用して、EC2インスタンスにリモートアクセスするためです。

S3エンドポイントも作成します。
S3バケット上に構築されるyumリポジトリにアクセスするために使用します。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

https://github.com/awstut-an-r/awstut-fa/tree/main/058

テンプレートファイルのポイント解説

セキュリティグループ

EC2インスタンスとAurora Serverless用のセキュリティグループを確認します。

Resources:
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: !Sub "${Prefix}-InstanceSecurityGroup"
      GroupDescription: Deny All.
      VpcId: !Ref VPC

  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 Serverless用です。
今回はMySQLタイプのAurora Serverlessを作成するため、MySQL通信用のポート(tcp/3306)を許可する内容です。
また送信元については、先述のインスタンス用セキュリティグループを設定します。

Aurora Serverless

Resources:
  DBSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupName: dbsubnetgroup
      DBSubnetGroupDescription: test subnet group
      SubnetIds:
        - !Ref PrivateSubnet2
        - !Ref PrivateSubnet3

  DBCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      DatabaseName: !Ref DBName
      DBClusterIdentifier: !Ref DBClusterIdentifier
      DBSubnetGroupName: !Ref DBSubnetGroup
      Engine: !Ref DBEngine
      EngineMode: serverless
      EngineVersion: !Ref DBEngineVersion
      MasterUsername: !Ref DBMasterUsername
      MasterUserPassword: !Ref DBMasterUserPassword
      StorageEncrypted: true
      VpcSecurityGroupIds:
        - !Ref DBSecurityGroup

  #DBInstance:
  #  Type: AWS::RDS::DBInstance
  #  Properties:
  #    ...
Code language: YAML (yaml)

Aurora Serverlessを作成するためには、少なくとも2つのリソースを定義する必要があります。

1つ目はDBサブネットグループです。
RDSに関連付けるサブネットには条件があります。

Aurora Serverless v1 DB クラスターで使用する DB サブネットグループでは、異なるアベイラビリティーゾーンごとにサブネットを作成します。

Aurora Serverless v1 での設定の要件

上記の条件を満たすように、2つのAZにそれぞれ作成したサブネットを指定します。

2つ目はDBクラスターです。
ポイントはEngineModeプロパティです。
のAurora Serverlessを作成するためには、「serverless」を指定します。

EngineプロパティおよびEngineVersionプロパティで作成するDBのエンジンおよびバージョンを指定します。
今回は2022年7月現在で最も新しいMySQLバージョンを指定しますので、前者に「aurora-mysql」を、後者に「5.7.mysql_aurora.2.07.1」を指定します。
なお5.6系のMySQLを選択する場合は、Engineプロパティに「aurora」を指定する必要がありますので、ご注意ください。

Aurora Serverless v1でサポートしているエンジンバージョンについては、以下のページをご確認ください。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless

Aurora Serverlessを作成する場合、DBクラスターを定義するだけで十分です。
Aurora Serverlessはマネージドサービスですから、内部に生成されるDBインスタンスは定義する必要はありません。

DB接続用インスタンス

Resources:
  Instance:
    Type: AWS::EC2::Instance
    Properties:
      IamInstanceProfile: !Ref InstanceProfile
      ImageId: !Ref ImageId
      InstanceType: !Ref InstanceType
      NetworkInterfaces:
        - DeviceIndex: 0
          SubnetId: !Ref PrivateSubnet
          GroupSet:
            - !Ref InstanceSecurityGroup
      UserData: !Base64 |
        #!/bin/bash -xe
        yum update -y
        yum install -y mariadb
Code language: YAML (yaml)

2インスタンスはAurora Serverlessへの接続を確認するために使用します。
ですからUserDataプロパティにおいて、インスタンスの初期化処理の一環として、yumによるパッケージインストールを指定します。
今回はMySQLタイプのAurora Serverlessを作成するため、mariadbパッケージをインストールすることで、MySQL用クライアント(mysql)をインストールします。

初期化処理に関する詳細は、以下のページをご確認ください。

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

Amazon Linux 2からRDSに接続する方法については、以下のページをご確認ください。

あわせて読みたい
AL2で全RDSに接続する方法まとめ 【Amazon Linux 2からRDSの全DBエンジンに接続する方法】 2022年現在、RDSは以下の7種類のDBエンジンを提供しています。 Aurora(PostgreSQL) Aurora(MySQL) PostgreSQL ...

プライベートサブネット内でyumを実行する方法については、以下のページをご確認ください。

あわせて読みたい
プライベートサブネットのインスタンスでyum/dnfを実行する 【プライベートサブネット内のインスタンスでyum/dnfを実行する構成】 プライベートサブネット内のインスタンスで、yum/dnfを実行する方法を確認します。 今回は以下の2...

環境構築

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

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

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

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • EC2インスタンス:i-096b962150f8473aa
  • Aurora ServerlessのDBクラスター:fa-058-dbcluster
  • Aurora Serverlessのエンドポイント:fa-058-dbcluster.cluster-cl50iikpthxs.ap-northeast-1.rds.amazonaws.com
  • Aurora Serverlessのマスターユーザーの名前:testuser
  • Aurora Serverlessのマスターユーザーのパスワード:Passw0rd
  • Aurora Serverlessに作成するデータベース名:testdb

AWS Management ConsoleからもAurora Serverlessの作成状況を確認します。

Detail of Aurora Serverless.

確かにDBクラスターがAurora Serverlessモードであり、エンジンタイプがMySQLタイプであることがわかります。
また先述のエンドポイントが作成され、通信用ポートが3306番であることもわかります。

動作確認

準備が整いましたので、EC2インスタンスにアクセスします。
インスタンスへのアクセスはSSM Session Managerを使用します。

% aws ssm start-session --target i-096b962150f8473aa

Starting session with SessionId: root-08ee1c5f1155eb7dd
sh-4.2$
Code language: Bash (bash)

SSM Session Managerの詳細につきましては、以下のページをご確認ください。

あわせて読みたい
LinuxインスタンスにSSM Session Manager経由でアクセスする 【LinuxインスタンスにSSM Session Manager経由でアクセスする】 EC2インスタンスにSSM Session Manager経由でアクセスする構成を確認します。 Session Manager は完全...

mariadbのインストール状況を確認します。

sh-4.2$ yum list installed | grep mariadb
mariadb.x86_64                        1:5.5.68-1.amzn2                 @amzn2-core
mariadb-libs.x86_64                   1:5.5.68-1.amzn2                 installed
Code language: Bash (bash)

正常にインストールされています。

次にmysqlクライアントを確認します。

sh-4.2$ mysql -V
mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
Code language: Bash (bash)

正常に動作します。

クライアントのインストールが確認できましたので、Aurora Serverlessに接続します。
Aurora Serverlessエンドポイントを指定した上で、ポート番号、ユーザー名、パスワードを引数として渡します。

$ mysql -h fa-058-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 6
Server version: 5.7.12 MySQL Community Server (GPL)

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が正常に作成されていることがわかりました。

まとめ

CloudFormationでAurora Serverlessを作成する方法を確認しました。