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のスタッフに言うよりも効果的だと言われました
せっかくインフラ構成をコード化できても、更新の度にコメントアウトしたり、コメントアウトしたものをコミットしていると管理しにくいことこの上ないので是非とも対応して頂きたいなーと思っております。