【CloudFormation】リソースのインポートを試してみた

記事タイトルとURLをコピーする

こんにちは、技術2課 長崎です。 入社してちょうど一か月が経ちました!出社日数は0日です!(このご時世なので、、、)

今回は、CloudFormationのリソースインポート機能を使って、既存のスタックに手動で作成したEC2インスタンスをインポートし、最後にスタックを削除します。 2019年11月に機能アップデートされて、触ってみようと思いながら今になってしまいました。。。

手動で作成した環境をCloudFormationで管理したい!となった時に便利な機能かもしれません。

では、やっていきます。

流れ

1.CloudFormationでEC2インスタンス作成。 ↓ 2.手動でEC2インスタンスを作成。 ↓ 3.手動作成のEC2インスタンスをスタックへインポート。 ↓ 4.スタックを削除し、リソースが全て削除されている事を確認。

手順

1.CloudFormationでEC2インスタンス作成

まず、下記テンプレートでEC2インスタンスを作成します。 ※VPC等のNW周りは既に作成済みのものを使用します。

AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 template

Parameters:
  KeypairName:
    Type: String
    Description: Enter the keypair name

Resources:
##EC2 Instance
  EC201:
    Type: AWS::EC2::Instance
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      ImageId: "ami-0f310fced6141e627"
      InstanceType: "t2.micro"
      KeyName: !Ref KeypairName
      SecurityGroupIds:
        - !ImportValue TEST01SGID
      SubnetId: !ImportValue SUBNETPRIVID
      Tags:
        - Key: Name
          Value: import-kensyo-instance-01

作成完了したものが以下です。

2.EC2インスタンス手動作成

次にEC2インスタンスをマネジメントコンソール上から作成します。

3.スタックへインポート

1.のテンプレートに手動で作成したリソースを追加します。 ※インポートする際には、 DeletionPolicy プロパティを Retain とする必要があります。

  EC202:
    Type: AWS::EC2::Instance
    DeletionPolicy: Retain
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      ImageId: "ami-0f310fced6141e627"
      InstanceType: "t3a.nano"
      KeyName: !Ref KeypairName
      SecurityGroupIds:
        - !ImportValue TEST01SGID
      SubnetId: !ImportValue SUBNETPRIVID
      Tags:
        - Key: Name
          Value: import-kensyo-instance-02

CloudFormationのマネジメントコンソール上で、スタックアクション → 既存のリソースを使用(リソースをインポート)をクリック。

「次へ」をクリックして行きテンプレートの指定まで完了すると、下記画面が出ますのでインポートするリソースのIDを記載します。 今回はEC2インスタンスなので、instanceIDを記載します。

また、「次へ」をクリックして行き下記画面でインポートするリソース間違いなければ「リソースをインポート」をクリックします。

インポートが完了すると、[IMPORT_COMPLETE]になります。

リソースがインポートされました!

4.スタックの削除

最後にスタックを削除し、最初にCloudFormationで作成したEC2インスタンス及びインポートしたEC2インスタンスが削除される事を確認します。

まず、インポートしたリソースのテンプレートの DeletionPolicy プロパティを Delete に変更してスタックを更新します。

  EC202:
    Type: AWS::EC2::Instance
    DeletionPolicy: Delete
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      ImageId: "ami-0f310fced6141e627"
      InstanceType: "t3a.nano"
      KeyName: !Ref KeypairName
      SecurityGroupIds:
        - !ImportValue TEST01SGID
      SubnetId: !ImportValue SUBNETPRIVID
      Tags:
        - Key: Name
          Value: import-kensyo-instance-02

完了したら、スタックを削除します。

作成したリソースが全て削除された事を確認できました!

まとめ

簡単にですが、CloudFormationのリソースインポート機能を確認する事ができました。 私は過去管理が混在しているシステムを構築してしまい、どのリソースがCloudFormation作成でどれが手動作成なのかを運用チームへ引き継ぐのに苦労した記憶があります。あの時この機能があれば良かったのになと思いました。

参考資料: 新機能 – CloudFormation スタックへの既存リソースのインポート