3
3

CloudFormationでコンソールからのリソースインポートに失敗した

Last updated at Posted at 2024-09-22

概要

CloudFormation(以下CFn)で管理しているAurora MySQLをブルー/グリーンデプロイにて手動でアップグレードを実施しました。
再びCFn管理にする際、コンソールからリソースをインポートしようとしたところ問題が発生したため、その問題の内容と実施したことを記載します。

この記事は2024/9/18の内容であり、現在問題は解消している可能性があります。

問題

新しいAurora MySQLバージョンでクラスターとインスタンスをCFn管理にする際には下記ドキュメントを参考にコンソールよりリソースのインポートを実行しました。

ところが、テンプレートの指定をして次へをクリックしたところ、下記エラーが表示されインポートできませんでした。

次のリソースタイプは、リソースのインポートではサポートされていません: AWS::RDS::DBCluster,AWS::RDS::DBInstance,AWS::RDS::DBInstance

image.png

詳細はこちらに書かれているリソースタイプサポートを見ても、クラスターとインスタンスはインポートに対応している旨が書かれており、原因がわからなかったため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
ResourcesToImport.json(抜粋)
[
    {
        "ResourceType": "AWS::RDS::DBCluster",
        "LogicalResourceIds": [
            "DBClusterZozoID"
        ],
        "ResourceIdentifiers": [
            "DBClusterIdentifier"
        ]
    },
    {
        "ResourceType": "AWS::RDS::DBInstance",
        "LogicalResourceIds": [
            "DBInstanceZozoID",
            "DBInstanceZozoIDSecond"
        ],
        "ResourceIdentifiers": [
            "DBInstanceIdentifier"
        ]
    }
]

2.上記で取得したパラメータ情報をベースに、インポート対象の識別子を追記して書き換える。

ResourcesToImport.json
[
    {
        "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となっていますが特に問題ありません。
image.png

4.変更セットを実行してインポートする。
イベントよりステータスがIMPORT_COMPLETEになれば完了です。
image.png

image.png

これにより、新しいAurora MySQLバージョンでクラスターとインスタンスをCFn管理とすることができました。

まとめ

CFnのコンソールからリソースをインポートしようとしたところ、インポート先のスタックでConditionがfalseとなるリソースが存在している場合、リソースのインポートに失敗する問題が発生しました。
修正対応中とのことで今後解消する可能性がありますが、現在はCLIからインポートすることで解消しました。
ちなみに、CFn管理しているリソースは、ブルー/グリーンデプロイ含めてスタック外で変更することを推奨しておらず、CFnとして動作を保証していないようなのでご留意ください。

同じように困っている人の助けになれば幸いです。

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