AWS CloudFormation にネストされたスタックがあり、その親スタックはルートスタックです。既存のリソースをネストされたスタックにインポートしたいと考えています。しかし、ルートスタックにリソースをインポートしようとすると、「This template does not include any resources to import」(このテンプレートにはインポートするリソースが含まれていません) というエラーが表示されます。
簡単な説明
ネストされたスタックの親スタックがルートの場合、ルートスタックのみを変更するのがベストプラクティスです。
注: 次の解決方法は、親スタックがルートスタックであるネストされたスタックにリソースをインポートするためのものです。
重要: インポートオペレーションの後は常にスタックでドリフト検出を実行して、インポートされたリソースがドリフトしていないことを確認します。
解決方法
ネストされたスタックにリソースをインポートするには、次のステップに従います。
- ネストされた AWS::CloudFormation::Stack リソースで Retain DeletionPolicy を使用してルートテンプレートを更新し、スタックを削除せずにルートスタックからデタッチします。
- AWS::CloudFormation::Stack をテンプレートから削除して、ルートスタックを更新します。
注: ルートスタックを更新した後も、ネストされたスタックは [Nested] (ネスト済み) としてマークされたままです。
- デタッチ済みのネストされたスタックでインポートオペレーションを実行して、既存のリソースをインポートします。
注: スタックはまだ [Nested] (ネスト済み) であるとみなされるため、代わりにルートスタックを更新することを推奨する警告が表示されます。これを無視して、ネストされたスタックの更新を続行します。インポート中に他のリソースを変更しないでください。
- デタッチ済みのネストされたスタックを IMPORT_COMPLETE ステータスから移行させるには、出力やタグの追加など、簡単に削除できる変更を加えて再度更新します。
- ルートスタックでインポートオペレーションを実行し、ネストされたスタックをネストされた階層に追加して戻します。
注: 新しくインポートされたリソースが含まれるように、ネストされたスタックの更新済みテンプレートの参照がルートテンプレートに含まれていることを確認してください。
関連情報
CloudFormation ワークショップ: ネストされたスタックラボ