CloudformationでAurora(MySQL5.7互換)を作ってみる

こんばんわ、吉江です。

皆さんはCloudformationでAurora(5.7互換)を作成されたことがありますか?
私の場合、5.6互換はすんなり作成できたのですが5.7互換でいくつか躓いたところがあったのでご紹介させてもらいます。

そもそも何が行った?

事の発端はAuroraをCloudFormationで作成する際に5.6互換はエンジンバージョン等の具体的なバージョン変更のみで行けると対応出来ると考えてましたが、 改めてテンプレートを作成してみると失敗しまくりでした。

大まかな変更点

RDSインスタンスを作成する最低限のリソースで変更点を以下のようにまとめます。
具体的には以下のリソース作成で使うアクションです。

  • DBCluster関連リソース作成
    • ClusterParameterGroup
    • Cluster
  • DBInstance関連リソース作成
    • OptionGroup
    • InstanceParameterGroup
    • Instance
リソース名 エンティティ名 MySQL5.6互換 MySQL5.7互換
AWS::RDS::DBClusterParameterGroup Family aurora5.6 aurora-mysql5.7
AWS::RDS::DBCluster Engine aurora aurora-mysql
AWS::RDS::OptionGroup EngineName aurora aurora-mysql
AWS::RDS::OptionGroup MajorEngineVersion 5.6 5.7
AWS::RDS::DBParameterGroup Family aurora5.6 aurora-mysql5.7
AWS::RDS::DBInstance Engine aurora aurora-mysql

Aurora(5.7互換)を作成するテンプレです。

全テンプレートを貼り付けると長ったらしくなってしまうため、Resource部分だけ抜き出しました。
RefとなっているところはParamterを参照している部分となりますので、参考に留めていただければと思います。

Resources: 
  TestAurora57dbSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: Subnets available for the RDS DB Instance
      SubnetIds:
        Ref: DBSubnetsInVPC
  TestAurora57dbClusterParameterGroup:
    Type: AWS::RDS::DBClusterParameterGroup
    Properties:
      Family: "aurora-mysql5.7"
      Description: "Test-Aurora-57ClusterParameterGroup"
      Parameters:
        time_zone: "Asia/Tokyo"
  TestAurora57dbOptionGroup:
    Type: "AWS::RDS::OptionGroup"
    Properties:
      EngineName: "aurora-mysql"
      MajorEngineVersion: "5.7"
      OptionGroupDescription: "TestAurora57db_RDS_OptionGroup"
      Tags:
        - Key: Name
          Value: Test-Aurora-57db-OptionGroup
  TestAurora57dbInstanceParameterGroup:
    Type: AWS::RDS::DBParameterGroup
    Properties:
      Family: "aurora-mysql5.7"
      Description: "Test-Aurora-57InstanceParameterGroup"
  TestAurora57dbCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      BackupRetentionPeriod:
        Ref: DBBackupRetentionPeriod
      DatabaseName: TestAurora57db
      DBClusterIdentifier: Test-Aurora-57cluster
      DBClusterParameterGroupName:
        Ref: TestAurora57dbClusterParameterGroup
      DBSubnetGroupName:
        Ref: TestAurora57dbSubnetGroup
      Engine: aurora-mysql
      MasterUsername:
        Ref: DBMasterUser
      MasterUserPassword:
        Ref: DBMasterPassword
      Port: 3306
      PreferredBackupWindow:
        Ref: DBBackupWindow
      PreferredMaintenanceWindow:
        Ref: DBMaintenanceWindow
      StorageEncrypted: True
      VpcSecurityGroupIds:
        - Ref: DBSecurityGroupId
      Tags:
        - Key: Name
          Value: Test-Aurora-57db-Cluster
  TestAurora57dbInstance:
    Type: "AWS::RDS::DBInstance"
    Properties:
      AutoMinorVersionUpgrade: False
      AvailabilityZone: ap-northeast-1a
      DBInstanceClass:
        Ref: DBInstanceClass
      DBInstanceIdentifier: Test-Aurora-57db
      DBClusterIdentifier:
        Ref: TestAurora57dbCluster
      DBSubnetGroupName:
        Ref: TestAurora57dbSubnetGroup
      Engine: aurora-mysql
      OptionGroupName:
        Ref: TestAurora57dbOptionGroup
      DBParameterGroupName:
        Ref: TestAurora57dbInstanceParameterGroup
      PubliclyAccessible: False
      Tags:
        - Key: Name
          Value: TestAurora57dbInstance

最後に

おそらくAurora5.6互換が発表されたタイミングではAurora(PostgreSQL)が発表されていなかったことでaurora5.6といった形だったのかと思いました。
aurora-mysql5.7aurora-mysqlの形で記載したほうが確かに区別が付きやすいのでアリだと思います。