AWS

CFNでAurora Serverless v1作成

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

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

構築する環境

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

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をコピーしました