LoginSignup
7
6

More than 3 years have passed since last update.

AWS Aurora ServerlessをCloudFormationで構築する際の注意点

Posted at

TL;DR

Port PreferredBackupWindow PreferredMaintenanceWindow をコメントアウトすればスタック更新できるよ!

序文

CloudFormationで構築したAurora Serverlessには独特の癖というかハマりポイントがあるのでメモ。

設定しなくても良い項目

  • Port

そもそもがServerlessの場合はポート番号の変更自体が不可で、MySQL互換なら 3306 、PostgreSQL互換なら 5432 でしか作成できないので設定しないくても良いです。

扱いが面倒な項目

  • PreferredBackupWindow
  • PreferredMaintenanceWindow

作成時に値を設定しておかないとデフォルト値(東京リージョンで作成する場合、BackupWindowは 13:00–21:00 UTC = 22:00-06:00 JST のどこか30分間、MaintenanceWindowはランダムな曜日の 13:00–21:00 UTC = 22:00-06:00 JST のどこか30分間)で作成されてしまいます。

さらにこの項目は作成後に更新する手段がありません。
そのため、作成時には設定しておきたくなる項目です。

それだけなら最初にしっかり考えて設定しておいて、値を更新しなければ済む・・・と思わせておいて、この先に罠が待っています。

実例

例えばこんな感じのテンプレートでAurora Serverlessを構築したとしましょう。

  DBCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      Engine: aurora
      EngineMode: serverless
      Port: 3306
      PreferredBackupWindow: 17:00-18:00
      PreferredMaintenanceWindow: sun:19:00-sun:20:00
      MasterUsername: hoge
      MasterUserPassword: hogehoge

その後、スケールサイズを指定したくなって、以下のようにテンプレートを編集します。
ポートやバックアップウィンドウ、メンテナンスウィンドウは変更していません。

  DBCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      Engine: aurora
      EngineMode: serverless
      Port: 3306
      PreferredBackupWindow: 17:00-18:00
      PreferredMaintenanceWindow: sun:19:00-sun:20:00
      MasterUsername: hoge
      MasterUserPassword: hogehoge
      ScalingConfiguration:
        MinCapacity: 1
        MaxCapacity: 2

ところがこのテンプレートでスタック更新をすると以下のどれかのエラーでスタックの更新に失敗します。

You currently can't modify EndpointPort with Aurora Serverless. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 12345678-9abc-def0-1234-56789abcdef01)
You currently can't modify BackupWindow with Aurora Serverless. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 12345678-9abc-def0-1234-56789abcdef01)
You currently can't modify MaintenanceWindow with Aurora Serverless. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 12345678-9abc-def0-1234-56789abcdef01)

このような状態から更新したい場合には値を変更していなくても、更新不能な項目を外しておく必要があります。

  DBCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      Engine: aurora
      EngineMode: serverless
      # Port: 3306
      # PreferredBackupWindow: 17:00-18:00
      # PreferredMaintenanceWindow: sun:19:00-sun:20:00
      MasterUsername: hoge
      MasterUserPassword: hogehoge
      ScalingConfiguration:
        MinCapacity: 1
        MaxCapacity: 2

AWSに対応してもらいたい!

結構昔からある問題(→AWSフォーラム)で、AWSのCloudFormationの公開カバレッジロードマップ内にIssueも立って(→#396)います。
が、残念ながら検討段階にも入っていません(→roadmap)。

この問題に限らず、Issueについた「いいね」数は開発陣がチェックしているそうで、内部的にそこそこの影響力があるそうです。
※ サポート窓口や、(現在閉館中ですが)AWS Startup Loft Tokyoのスタッフに言うよりも効果的だと言われました

せっかくインフラ構成をコード化できても、更新の度にコメントアウトしたり、コメントアウトしたものをコミットしていると管理しにくいことこの上ないので是非とも対応して頂きたいなーと思っております。

7
6
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
7
6