概要
CloudFormation(以下CFn)で管理しているAurora MySQLをブルー/グリーンデプロイにて手動でアップグレードを実施しました。
再びCFn管理にする際、コンソールからリソースをインポートしようとしたところ問題が発生したため、その問題の内容と実施したことを記載します。
この記事は2024/9/18の内容であり、現在問題は解消している可能性があります。
問題
新しいAurora MySQLバージョンでクラスターとインスタンスをCFn管理にする際には下記ドキュメントを参考にコンソールよりリソースのインポートを実行しました。
ところが、テンプレートの指定をして次へ
をクリックしたところ、下記エラーが表示されインポートできませんでした。
次のリソースタイプは、リソースのインポートではサポートされていません: AWS::RDS::DBCluster,AWS::RDS::DBInstance,AWS::RDS::DBInstance
詳細はこちら
に書かれているリソースタイプサポートを見ても、クラスターとインスタンスはインポートに対応している旨が書かれており、原因がわからなかったためAWSサポートへ問い合わせることにしました。
AWSサポートへ問い合わせ
AWSサポートへ問い合わせたところ、下記回答が返ってきました。
コンソールからのインポートでは、インポート先のスタックでConditionがfalseとなるリソースが存在している場合、リソースのインポートに失敗する場合があるとのことでした。
修正対応中とのことで今後解消する可能性がありますが、現在はCLIからインポートすることで解決できるか試してみることにしました。
ご共有いただきました情報をもとにお調べいたしました結果、現在の CloudFormation コンソールの動作では、インポート先のスタックで Condition が false となるリソースが存在している場合、リソースのインポートに失敗する場合があることを確認いたしました。
この度は AWS 側の問題によりお客様にご不便とご心配をおかけし、誠に申し訳ございません。
現在 AWS ではこの問題を認識し、修正作業を進めております。
ご不便をお掛けしております上で誠に恐れ入りますが、対応の時期など詳細について当方からお約束出来ない旨、ご理解賜りたく存じます。上記の問題は CloudFormation コンソールの問題であり、お手数ではございますが、AWS CLI よりインポートすることで問題が解消するかお試しいただけますでしょうか。
CLIからCFnインポートを実施
CLIからのCFnインポートは下記ドキュメントを参考に実施しました。
1.CFnインポートを行うために必要なパラメータ情報をget-template-summaryで取得する。
$ aws cloudformation get-template-summary --template-body file://<Template file>.yaml --query 'ResourceIdentifierSummaries' > ResourcesToImport.json
[
{
"ResourceType": "AWS::RDS::DBCluster",
"LogicalResourceIds": [
"DBClusterZozoID"
],
"ResourceIdentifiers": [
"DBClusterIdentifier"
]
},
{
"ResourceType": "AWS::RDS::DBInstance",
"LogicalResourceIds": [
"DBInstanceZozoID",
"DBInstanceZozoIDSecond"
],
"ResourceIdentifiers": [
"DBInstanceIdentifier"
]
}
]
2.上記で取得したパラメータ情報をベースに、インポート対象の識別子を追記して書き換える。
[
{
"ResourceType": "AWS::RDS::DBCluster",
"LogicalResourceId": "DBClusterZozoID",
"ResourceIdentifier": {
"DBClusterIdentifier": "<Cluster Name>"
}
},
{
"ResourceType": "AWS::RDS::DBInstance",
"LogicalResourceId": "DBInstanceZozoID",
"ResourceIdentifier": {
"DBInstanceIdentifier": "<Instance Name>"
}
},
{
"ResourceType": "AWS::RDS::DBInstance",
"LogicalResourceId": "DBInstanceZozoIDSecond",
"ResourceIdentifier": {
"DBInstanceIdentifier": "<Instance Name>"
}
}
]
3.インポート用の変更セットを作成する。
$ aws cloudformation create-change-set \
--stack-name <Stack Name> --change-set-name <Change Set Name> \
--change-set-type IMPORT \
--template-body file://<Template file>.yaml \
--resources-to-import file://ResourcesToImport.json \
--parameters file://<Parameters file> \
変更セットの内容を見ると、アクションがImportとなっていることが確認できます。
置換がTrueとなっていますが特に問題ありません。
4.変更セットを実行してインポートする。
イベントよりステータスがIMPORT_COMPLETE
になれば完了です。
これにより、新しいAurora MySQLバージョンでクラスターとインスタンスをCFn管理とすることができました。
まとめ
CFnのコンソールからリソースをインポートしようとしたところ、インポート先のスタックでConditionがfalseとなるリソースが存在している場合、リソースのインポートに失敗する問題が発生しました。
修正対応中とのことで今後解消する可能性がありますが、現在はCLIからインポートすることで解消しました。
ちなみに、CFn管理しているリソースは、ブルー/グリーンデプロイ含めてスタック外で変更することを推奨しておらず、CFnとして動作を保証していないようなのでご留意ください。
同じように困っている人の助けになれば幸いです。