AWS

CFNでAurora Serverless作成

スポンサーリンク
CFNでAurora Serverless作成 AWS
スポンサーリンク
スポンサーリンク

CloudFormationでAurora Serverless作成

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

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

Amazon Aurora Serverless

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

なおAurora Serverlessには2つのバージョンがありますが、今回はv1を対象とします。
これは以下に引用したCloudFormationの仕様によるものです。

The serverless engine mode only supports Aurora Serverless v1. Currently, AWS CloudFormation doesn’t support Aurora Serverless v2.

AWS::RDS::DBCluster

構築する環境

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テンプレートを配置しています。

awstut-fa/058 at main · awstut-an-r/awstut-fa
Contribute to awstut-an-r/awstut-fa development by creating an account on GitHub.

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

セキュリティグループ

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でサポートしているエンジンバージョンについては、以下のページをご確認ください。

AWS リージョン と Aurora DB エンジンにより Amazon Aurora でサポートされている機能 - Amazon Aurora
Amazon Aurora MySQL 互換エディション と Amazon Aurora PostgreSQL 互換エディション の各 AWS リージョン で使用できる機能について説明します。

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)をインストールします。

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

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

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

環境構築

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

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を作成する方法を確認しました。

タイトルとURLをコピーしました