CloudFormationで既存のリソースをImportしてみました。

2022.01.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ご存知のように、AWS CloudFormationサービスは、コードを使用してインフラのプロビジョニングを自動化するために使用されます。しかし、これはインフラ構成に必要なサービスやリソースをすべて指定したテンプレートを提供することで実現されています。必要なサービスのリストとその名称、スペックをドキュメントに追加するだけで、インフラ全体を一気に構築することができるのです。このインフラドキュメントを標準化できれば、様々なクライアントのインフラ構成に活用できるというメリットもあります。

以前は不可能だったことが1つありました。それは、CLIまたはコンソールのいずれかによって作成された既存のリソースを利用する機能でした。

なぜそのような機能が必要なのでしょうか?

以前はCloudFormationを使用して、新しいリソースを作成することしかできませんでしたが、多くの場合、新しいものに置き換える余裕がないリソースがあり、その場合、既存のリソースを使用しなければなりません。ありがたいことに、AWSは2019年11月にCloudFormationを使用してリソースをインポートするサポートを追加したので、このブログではそれを行う方法を実演します。

ノート:

大切な資源を輸入しようとする前に、気をつけなければならないことがいくつかあります。

  1. リソースをインポートする際には、同じリソースが他のスタックの一部になっていないことを確認してください。
  2. 対象リソースをインポートするために必要な権限があることを確認します。
  3. 最も重要なことは、DeletionPolicyが記述されていることを確認することです。将来、スタックに特定のリソースが不要になった場合、リソースを完全に失う/削除する心配なく、簡単に削除することができます。

以上のチェックが終わったら、リソースをインポートしてみましょう。

スタック内のリソースをインポートします。

リソースをインポートするには、既存のリソースが必要ですが、私は持っていないので、単純なEC2インスタンスで試してみましょう。

デモのために、デフォルトの設定でt2.microインスタンスを作成しました。

ステップ1: 必要なパラメータを指定してリソース用のテンプレートを作成します。ここでは、インスタンスと同じInstanceTypeとAMI IDを持つEC2インスタンス用のテンプレートを作成し、ご覧のようにDeletionPolicyもRetainとして追加しています。

AWSTemplateFormatVersion: 2010-09-09
Description: Import Ec2
Resources:
  EC2Instance:
    Type: 'AWS::EC2::Instance'
    DeletionPolicy: Retain
    Properties:
      InstanceType: t2.micro
      KeyName: test.pem
      ImageId: ami-0218d08a1f9dac831

ステップ2: CloudFormationコンソールで「Create Stack with Existing Resources」を選択します。

ステップ3: Identify resourcesステップでは、インスタンスIDのようなリソースの詳細を入力します。

ステップ4: インポートしたリソースをインポート概要画面で確認し、問題なければ、リソースのインポートをクリックし、インポートが完了するのを待ちます。インポートが完了すると、以下のように「リソース」でリソースを確認できます。

インポートリソースのその他の機能です。

  1. 既存のリソースを新しいスタックにインポートできる。
  2. 既存のスタックにあるリソースをインポートすることができます。
  3. また、リソースを別のスタックに移行することも可能です。
  4. ある親スタックから子スタックを切り離し、別の親スタックにアタッチして、ネストしたスタックを管理することができます。

リファレンス

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-existing-stack.html