3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CFnで AuroraServerless v2 が利用可能になったので構築してみた

Last updated at Posted at 2022-10-06

概要

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テンプレート

aurora-serverless-v2.yaml
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のままとなりハマってました。

example-serverless-v2.yaml
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

※上記テンプレートの場合クラスターしか作成されません。
image.png

色々試してみると、 リソースに 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 の指定が必要でした。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?