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

手動作成したAWSリソースの差分を既存テンプレートに自動反映する方法

Last updated at Posted at 2025-03-30

Shigeyukiです。

今回は、IaCで一度環境を構築した後に、マネコン上で検証しながら作成したAWSリソースを自動的に取り込む方法をご紹介したいと思います。

従来の方法

従来では、一度IaCで構築した環境に対して、手動で追加したAWSリソースをテンプレートに追加するには以下対応が必要でした。

その1.CloudFormation Resource Importの利用
 手動作成したAWSリソースを既存テンプレートに「DeletePolicy」を指定した状態で定義を追加して、CloudFormation Resource Importを利用する。

その2.Former2の利用
Former2というWebアプリを利用して,手動作成したAWSリソースをテンプレート生成して、手動で既存テンプレート
にマージする。

今回紹介する方法

CloudFormationnのIaCジェネレーターを利用することで、既存テンプレートに対して、手動追加したAWSリソースを指定することで自動反映してくれます。
以降、実際の手順を踏まえて説明します。

実際の手順

以下手順にて手動追加したりAWSリソースを既存テンプレートに反映します。

1.IaCジェネレーターの動作機能を指定
既存テンプレートを修正するために、IaCジェネレーターから「テンプレートを作成」ボタンを押下して、テンプレート作成機能をっ指定します。
image.png

2.テンプレートの作成方法を指定
ここが一番のポイントになりますが、「既存のスタックのテンプレートを更新」を選択して、既存スタックを指定します。
image.png

テンプレートの詳細は、テンプレート名に任意名前を入力します。
image.png

3.手動追加したリソースのスキャン
IaCジェネレーターで追加操作させるには、手動追加したリソースをスキャン認識させます。
image.png

「リソースをスキャン」ボタンを押下します。
image.png

「新しいスキャンを開始」ボタンを押下して、「すべてのリソースをスキャン」を選択します。
image.png

スキャンしたリソースがリストアップされます。
image.png

対象リソースを指定して、選択します。
image.png
image.png

4.関連リソースの追加
今回は関連リソースは必要ないため、指定なしですすめます。
image.png

5.テンプレートの作成
「テンプレートを作成」ボタンを押下して、既存テンプレートを更新したものを作成します。
image.png

以下のようにテンプレート作成されます。
テンプレート内の記述内容は、通常の並びとは異なっていますが、記述ルールは間違えていませんが
体裁を整えるには記述前後関係は修正する必要があります。
image.png

差分追加された内容の確認

体裁を整えて既存テンプレートと差分して比較すると、メタデータの定義と手動追加したリソースのIaC記述が追加されていました。(緑箇所)

AWSTemplateFormatVersion: '2010-09-09'
+Metadata:
+ AWSToolsMetrics:
+   IaC_Generator: arn:aws:cloudformation:ap-northeast-1:992382669030:generatedTemplate/80cd29a4-bfc3-4805-9f7a-a84fcfc0ce16
Resources:
  SampleVpc:
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: false
      InstanceTenancy: default
      Tags:
        - Value: drift-cfn-vpc
          Key: Name
    Type: AWS::EC2::VPC
+  EC2VPCEndpoint:
+    UpdateReplacePolicy: Delete
+    Type: AWS::EC2::VPCEndpoint
+    DeletionPolicy: Delete
+    Properties:
+      PrivateDnsEnabled: false
+      IpAddressType: not-specified
+      DnsOptions:
+        PrivateDnsOnlyForInboundResolverEndpoint: NotSpecified
+        DnsRecordIpType: not-specified
+      ResourceConfigurationArn: ''
+      SecurityGroupIds: []
+      SubnetIds: []
+      ServiceNetworkArn: ''
+      VpcId: vpc-0169ff897cf99ae89
+      RouteTableIds: []
+      ServiceName: com.amazonaws.ap-northeast-1.s3
+      PolicyDocument:
+        Version: '2008-10-17'
+        Statement:
+          - Resource: '*'
+            Action: '*'
+            Effect: Allow
+            Principal: '*'
+      VpcEndpointType: Gateway
+      Tags:
+        - Value: sample-vpc-endpoint
+          Key: Name
  PublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.0.0/24
      VpcId: !Ref SampleVpc
      AvailabilityZone: !Select

<以下省略>

オプション

自動生成したテンプレートを利用してCDKモジュールを自動生成させることができます。
先ほどのIaCジェネレーターで生成されたテンプレート画面から「AWS CDK」タブを選択し、ステップ1で自動生成されたテンプレートファイルをローカルにダウンロードします。
ステップ2で指定されたCDKコマンドをローカルで実行することで、CDKモジュールが自動生成されます。
image.png

まとめ

IaCジェネレーターを利用することで、既存テンプレートに追加したリソースを自動反映させることできますので
IaCの差分反映の煩わしさがおおきく削減できるのではないでしょうか。
また、生成したテンプレートからCDKへ変換するコマンドを自動生成してくれるので、幅広いIaCの利用に役立つのではないでしょうか。

0
0
2

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