この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
2022年10月5日、AWS CloudFormation が Amazon Aurora Serverless v2 をサポートする待望のアップデートがありました。
早速、CloudFormationを利用した Aurora Serveless v2 環境の作成を試す機会がありましたので、紹介させていただきます。
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とは異なる設定が必要です。以下記事をご覧ください。