概要
2022/10/5 から AuroraServerless v2 が利用可能となりました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/10/amazon-aurora-serverless-v2-supports-aws-cloudformation/
ちょうど案件でAuroraServerless v2の構築依頼が来ていたのでタイミングがバッチリでした🙌
作成されるリソース
- セキュリティーグループ
- クラスターパラメータグループ (time_zone のみ 日本に変更 他デフォルト)
- DBパラメータグループ (デフォルト)
- サブネットグループ
- Aurora Serverless v2 クラスター
- Aurora Serverless インスタンス
- マスターユーザー
- キャパシティ (v2の場合 MinCapacityは0.5から選択可能)
CFnテンプレート
AWSTemplateFormatVersion: 2010-09-09
Parameters:
NamePrefix:
Type: String
VpcId:
Description: VPC ID
Type: AWS::EC2::VPC::Id
SgAllowIP:
Description: AP VPC subnet
Type: String
Default: 10.0.0.0/16
RdsDbMasterUsername:
Description: RdsDbMasterUsername
Type: String
RdsDbMasterUserPassword:
Description: RdsDbMasterUserPassword
Type: String
NoEcho: true
MinCapacity:
Type: String
MaxCapacity:
Type: String
Subnets:
Type: List<AWS::EC2::Subnet::Id>
Resources:
RdsDbSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupName: !Sub ${NamePrefix}-sub-gp
DBSubnetGroupDescription: !Sub ${NamePrefix}-sub-gp
SubnetIds: !Ref 'Subnets'
RdsSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub ${NamePrefix}-sg
GroupDescription: !Sub ${NamePrefix}-sg
VpcId: !Ref 'VpcId'
GroupDescription: Allow MySQL (TCP3306)
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
CidrIp: !Ref 'SgAllowIP'
RdsDbClusterParameterGroup:
Type: AWS::RDS::DBClusterParameterGroup
Properties:
Description: CloudFormation Aurora Cluster Parameter Group
Family: aurora-mysql8.0
Parameters:
time_zone: Asia/Tokyo
Tags:
- Key: Name
Value: !Sub ${NamePrefix}-pg
RdsDbClusterParameterGroup:
Type: AWS::RDS::DBClusterParameterGroup
Properties:
Description: CloudFormation Aurora Cluster Parameter Group
Family: aurora-mysql8.0
Parameters:
time_zone: Asia/Tokyo
Tags:
- Key: Name
Value: !Sub ${NamePrefix}-cl-pg
RdsDbParameterGroup:
Type: AWS::RDS::DBParameterGroup
Properties:
Description: CloudFormation Aurora Cluster Parameter Group
Family: aurora-mysql8.0
Tags:
- Key: Name
Value: !Sub ${NamePrefix}-pg
# Aurora Serverless v2 is supported by AWS CloudFormation starting 10/5/2022.
# https://aws.amazon.com/jp/about-aws/whats-new/2022/10/amazon-aurora-serverless-v2-supports-aws-cloudformation/
RdsDbCluster:
Type: AWS::RDS::DBCluster
Properties:
BackupRetentionPeriod: 7
DBClusterIdentifier: !Ref 'NamePrefix'
DBClusterParameterGroupName: !Ref 'RdsDbClusterParameterGroup'
DBSubnetGroupName: !Ref 'RdsDbSubnetGroup'
Engine: aurora-mysql
EngineVersion: 8.0.mysql_aurora.3.02.1
ServerlessV2ScalingConfiguration:
MinCapacity: !Ref MinCapacity
MaxCapacity: !Ref MaxCapacity
MasterUsername: !Ref 'RdsDbMasterUsername'
MasterUserPassword: !Ref 'RdsDbMasterUserPassword'
Port: 3306
PreferredBackupWindow: 21:00-21:30
PreferredMaintenanceWindow: Tue:20:00-Tue:20:30
StorageEncrypted: true
VpcSecurityGroupIds:
- !Ref 'RdsSecurityGroup'
DBInstance:
Type: 'AWS::RDS::DBInstance'
Properties:
DBClusterIdentifier:
Ref: RdsDbCluster
DBInstanceIdentifier: !Ref 'NamePrefix'
Engine: aurora-mysql
EngineVersion: 8.0.mysql_aurora.3.02.1
DBInstanceClass: db.serverless
DBParameterGroupName: !Ref RdsDbParameterGroup
ハマりポイント
AWSの記事 にも記載例があったので試してみるとクラスターしか構築されず、インスタンスが0のままとなりハマってました。
AWSTemplateFormatVersion: 2010-09-09
Description: ServerlessV2 Cluster
Parameters:
MasterUsername:
Type: String
MasterUserPassword:
Type: String
NoEcho: true
DBClusterIdentifier:
Type: String
MinCapacity:
Type: String
MaxCapacity:
Type: String
Resources:
RDSDBCluster:
Type: 'AWS::RDS::DBCluster'
DeletionPolicy: Delete
Properties:
Engine: aurora-mysql
MasterUsername: !Ref MasterUsername
MasterUserPassword: !Ref MasterUserPassword
ServerlessV2ScalingConfiguration:
MinCapacity: !Ref MinCapacity
MaxCapacity: !Ref MaxCapacity
色々試してみると、 リソースに Type: 'AWS::RDS::DBInstance'
が必要でした。
v1の時は AWS::RDS::DBInstance
は不要だったと思うのですが v2はAurora同様にDBInstanceのリソースが必要とでした。
※v2の詳細を理解できていないので宿題とします📝
DBInstanceのリソースには DBInstanceClass
の指定が必要で db.serverless
という特殊なインスタンスクラスを指定する必要があります。
レイヤーに 1 つ以上の Aurora Serverless v2 DB インスタンスを追加します。DB クラスターに Aurora レプリカを追加する の一般的な手順に従います。新しい DB インスタンスごとに、AWS Management Console では サーバーレス、AWS CLI では db.serverless という特別な DB インスタンスクラス名、または Amazon RDS API を指定します。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html
また AWS::RDS::DBCluster
のリソースで明示的に EngineVersion: 8.0.mysql_aurora.3.02.1
を指定しないとデフォルトでmysql5.7系となりエラーになってしまうので、DBClusterとDBInstanceのどちらも EngineVersion
の指定が必要でした。