Amazon RDS MySQLの接続情報をAWS Secrets Managerで管理しているECSサービスがある。 Secrets Managerの自動ローテーション(30日周期)は設定済みだが、ローテーション後に一部のコンテナで接続エラーが頻発する。 調査の結果、アプリ起動時に一度だけSecrets Managerから認証情報を取得してメモリにキャッシュする実装であることが判明した。 ダウンタイムなしで最小限の変更によりこの問題を解決するにはどうすべきか。
根本原因は「起動時のみ取得・固定キャッシュ」にある。接続のたびにSecrets ManagerのAWSCURRENTを動的取得する変更が最小限の解決策で、TTLキャッシュにより過剰なAPI呼び出しも防止できる。