CloudFormationがAurora Serveless v2をサポートしました

Aurora Serverless v2 をサポートした CloudFormationを試してみました。
2022.10.08

2022年10月5日、AWS CloudFormation が Amazon Aurora Serverless v2 をサポートする待望のアップデートがありました。

早速、CloudFormationを利用した Aurora Serveless v2 環境の作成を試す機会がありましたので、紹介させていただきます。

Amazon Aurora Serverless v2 now supports AWS CloudFormation

CloudFormation

CloudFormation の RDS設定に以下が追加されました。

DBCluster

Aurora Serveless V2のDB性能の設定項目ServerlessV2ScalingConfiguration が追加され、最大、最小ACUの指定が可能になりました。

Type: AWS::RDS::DBCluster
Properties:
  ServerlessV2ScalingConfiguration: 
    MaxCapacity: 16
    MinCapacity: 0.5

DBInstance

DBインスタンスクラスとして db.serverless の指定が可能になりました。

Type: AWS::RDS::DBInstance
Properties:
  DBInstanceClass: db.serverless

インスタンスクラスとして db.serverless を指定する場合、ServerlessV2ScalingConfigurationの指定が必須です。

テンプレート

以下設定のAmazon Aurora Serverless v2 クラスタを起動する、CloudFormationテンプレートを作成してみました。

  • DBエンジン: aurora.3.02.0 (MySQL8互換)
  • ACU: 最小0.5、最大16
  • 文字コード: UTF8
  • パフォーマンスインサイト: 有効
  • マルチAZ: 2つのAZを利用
AWSTemplateFormatVersion: '2010-09-09'
Description: Aurora Serverless v2 (Aurora3) 
Parameters:
  VpcId:
    Description: VPC ID
    Type: AWS::EC2::VPC::Id
  VpcRdsSubnetIds:
    Description: RDS VPC subnets list
    Type: List<AWS::EC2::Subnet::Id>
  DbClientCidr:
    Description: DB Client CIDR Block
    Type: String
    Default: 172.31.0.0/16
  RdsDBClusterIdentifier:
    Description: DBClusterIdentifier
    Type: String
    Default: aurora-sl-v2
  MasterUsername:
    Description: MasterUsername
    Type: String
    Default: admin
  MasterUserPassword:
    Description: MasterUserPassword
    Type: String
    Default: password
    NoEcho: true
  DatabaseName:
    Description: DatabaseName
    Type: String
    Default: testdb

Resources:
  DBSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: !Sub '${AWS::StackName}-DBSubnetGroup'
      SubnetIds: !Ref 'VpcRdsSubnetIds'

  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref 'VpcId'
      GroupDescription: !Sub '${AWS::StackName}-Allow MySQL-(tcp3306)'
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          CidrIp: !Ref 'DbClientCidr'

  DBClusterParameterGroup:
    Type: AWS::RDS::DBClusterParameterGroup
    Properties:
      Description: !Sub '${AWS::StackName}-DBClusterParameterGroup'
      Family: aurora-mysql8.0
      Parameters:
        character_set_server: utf8
        character_set_client: utf8
        character_set_connection: utf8
        character_set_results: utf8
        character_set_database: utf8
        performance_schema: 1

  DBParameterGroup:
    Type: AWS::RDS::DBParameterGroup
    Properties:
      Description: !Sub '${AWS::StackName}-DBParameterGroup'
      Family: aurora-mysql8.0
      Parameters:
        general_log: 0
        slow_query_log: 1
        long_query_time: 5000
        log_output: FILE

  DBCluster:
    Type: AWS::RDS::DBCluster
    DeletionPolicy: Snapshot
    Properties:
      DBSubnetGroupName: !Ref 'DBSubnetGroup'
      Engine: aurora-mysql
      EngineVersion: 8.0.mysql_aurora.3.02.0
      VpcSecurityGroupIds:
        - !Ref 'SecurityGroup'
      DBClusterParameterGroupName: !Ref 'DBClusterParameterGroup'
      PreferredMaintenanceWindow: Thu:18:35-Thu:19:05
      PreferredBackupWindow: 18:05-18:35
      BackupRetentionPeriod: 7
      DatabaseName: !Ref 'DatabaseName'
      MasterUsername: !Ref 'MasterUsername'
      MasterUserPassword: !Ref 'MasterUserPassword'
      ServerlessV2ScalingConfiguration: 
        MaxCapacity: 16
        MinCapacity: 0.5

  DBInstance1:
    Type: AWS::RDS::DBInstance
    Properties:
      DBClusterIdentifier: !Ref 'DBCluster'
      DBInstanceClass: db.serverless
      DBParameterGroupName: !Ref 'DBParameterGroup'
      Engine: aurora-mysql
      EnablePerformanceInsights: true
      PreferredMaintenanceWindow: Thu:19:05-Thu:19:35
      PromotionTier: 0
      AvailabilityZone: !Select
        - 0
        - !GetAZs
          Ref: AWS::Region

  DBInstance2:
    Type: AWS::RDS::DBInstance
    Properties:
      DBClusterIdentifier: !Ref 'DBCluster'
      DBInstanceClass: db.serverless
      DBParameterGroupName: !Ref 'DBParameterGroup'
      Engine: aurora-mysql
      EnablePerformanceInsights: true
      PreferredMaintenanceWindow: Thu:19:05-Thu:19:35
      PromotionTier: 1
      AvailabilityZone: !Select
        - 1
        - !GetAZs
          Ref: AWS::Region

実行例

CloudFormationを利用した Aurora Serveless V2クラスタを設置できました。

所要時間は20分強でした。

まとめ

これまでCloudFormationを利用して Aurora Serveless v2 環境を構築する場合、 一旦通常の Aurora (プロビジョン) の環境を構築した後、 GUI、CLI などを利用して、DBインスタンスのエンジンをサーバレスに変更する必要がありました。

今回のアップデートにより、CloudFormation の IaC管理外となる ドリフトを発生させることなく、 Aurora Serveless v2環境の作成が可能となりました。 CDK の Aurora Serveless v2 のサポートについても期待したいと思います。

CloudFormationを利用した Aurora Serveless v1 の作成は、今回紹介したv2とは異なる設定が必要です。以下記事をご覧ください。