1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

手動で作成したAWSリソースをCloudFormation管理下に置く

Last updated at Posted at 2021-06-21

はじめに

IaCの有用性については様々なところで言われてはいるものの、手動で作成したリソースがすでにあると中途半端にIaCをしてもなぁ……と敬遠されがちなところがあるかと思います。
そう思って、既存のリソースをコード管理する方法がないかを調べていたところ、CloudFormationのインポート機能を使えば、既存リソースもコード管理下に置けることがわかりました。
この記事はCloudFormationのインポート機能をテストしたときの備忘録になります。

0. 準備

まずはAWSコンソール上で手動でリソースを作成します。
今回は、Security Groupを作成しました。
設定としてはこんな感じです。

スクリーンショット 2021-06-17 16.10.36.png

1. 作成したSecurity Groupと同じ内容のテンプレートを作成する

test.yamlを作成して以下を記述して保存します。

AWSTemplateFormatVersion: "2010-09-09"

Resources:
    SecurityGroup:
        Type: "AWS::EC2::SecurityGroup"
        Properties:
            GroupDescription: "test"
            GroupName: "test"
            VpcId: sg-hoge # 実際のVPCを記述してください。
            SecurityGroupIngress: 
              -
                CidrIp: "0.0.0.0/0"
                FromPort: 80
                IpProtocol: "tcp"
                ToPort: 80
        UpdateReplacePolicy: Retain
        DeletionPolicy: Retain

インポート機能を使用する際には、必ずDeletionPolicyを「Retain」にしないといけないので注意してください。
また、UpdateReplacePolicyも未設定の場合は、CloudFormationの設定に上書きされる可能性があるので、安全のため「Retain」を設定することをオススメします。

Former2のススメ

なお、作成したテンプレートと実際のリソースが同じかどうかは、Former2を使用して確認するのがいいです。
Former2を用いると、AWS上に実際に展開されているリソースをCloudFormationやTerraformなどのインフラコードに変換してくれます。

2. Securiy Groupをインポート

test.yamlを用いて、CloudFormationにインポートする

CloudFormationコンソールから「既存のリソースを使用(リソースをインポート)」をクリック
スクリーンショット 2021-06-17 16.40.44.png

「次へ」ボタンをクリック
スクリーンショット 2021-06-17 16.28.32.png

「テンプレートファイルのアップロード」を選択し、test.yamlをアップロードする。
終わったら「次へ」ボタンをクリック
スクリーンショット 2021-06-17 16.30.33.png

「識別子の値」に今回作成したSecurityGroupのIDを入力する
完了したら「次へ」ボタンをクリック
スクリーンショット 2021-06-17 16.35.09.png

スタックの名前を入力。
「次へ」ボタンをクリック。
スクリーンショット 2021-06-17 16.37.43.png

一番下の「変更」で、アクションが「Import」になっていることを確認してください。
問題がなければ「リソースをインポート」をクリックします。
スクリーンショット 2021-06-17 16.47.12.png

実行したスタックを見て、ステータスが「IMPORT_COMPLETE」になれば完了です。
スクリーンショット 2021-06-17 17.07.33.png

3. インポートしたSecurity GroupをCloudFormationを用いて更新する。

作成したtest.yamlを以下のように修正します。

AWSTemplateFormatVersion: "2010-09-09"

Resources:
    SecurityGroup:
        Type: "AWS::EC2::SecurityGroup"
        Properties:
            GroupDescription: "test"
            GroupName: "test"
            VpcId: sg-hoge # 実際のVPCを記述してください。
            SecurityGroupIngress: 
              -
                CidrIp: "0.0.0.0/0"
                FromPort: 80
                IpProtocol: "tcp"
                ToPort: 80
              -
                CidrIp: "0.0.0.0/0"
                FromPort: 443
                IpProtocol: "tcp"
                ToPort: 443
        UpdateReplacePolicy: Delete
        DeletionPolicy: Retain

セキュリティグループのインバウンドに新たにHTTPSを追加しています。
UpdateReplacePolicyが「Retain」のままだと更新が適応されないので注意してください。

CloudFormationコンソールから先ほど実行したスタックを更新します。
スクリーンショット 2021-06-18 15.31.04.png

「既存テンプレートを置き換える」を選択し、「テンプレートファイルのアップロード」で修正したtest.yamlをアップロードします。
完了したら「次へ」ボタンをクリックします。
スクリーンショット 2021-06-18 15.10.48.png

「次へ」ボタンをクリックします。
スクリーンショット 2021-06-18 15.11.15.png

「次へ」ボタンをクリックします。
スクリーンショット 2021-06-18 15.11.22.png

変更セットのプレビューで、セキュリティグループのアクションが「Modify」になっていることを確認します。
確認して問題がなければ「スタックの更新」をクリックします。
ap-northeast-1.console.aws.amazon.com_cloudformation_home_region=ap-northeast-1 (7).png

実行したスタックを見て、ステータスが「UPDATE_COMPLETE」になれば更新は完了しています。
スクリーンショット 2021-06-18 15.38.02.png

更新したセキュリティグループをAWSコンソール上から確認します。
インバウンドルールが追加されていれば、確認完了です。
スクリーンショット 2021-06-18 15.39.18.png

注意点

インポート機能については一部のリソースについてはサポートしていません。
例えばApplication Load Balancer のターゲットグループは2021年6月時点ではサポートされていません。

サポートされているリソースについては以下を参考にしてください。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?