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ジェネレーターから「テンプレートを作成」ボタンを押下して、テンプレート作成機能をっ指定します。
2.テンプレートの作成方法を指定
ここが一番のポイントになりますが、「既存のスタックのテンプレートを更新」を選択して、既存スタックを指定します。
テンプレートの詳細は、テンプレート名に任意名前を入力します。
3.手動追加したリソースのスキャン
IaCジェネレーターで追加操作させるには、手動追加したリソースをスキャン認識させます。
「新しいスキャンを開始」ボタンを押下して、「すべてのリソースをスキャン」を選択します。
4.関連リソースの追加
今回は関連リソースは必要ないため、指定なしですすめます。
5.テンプレートの作成
「テンプレートを作成」ボタンを押下して、既存テンプレートを更新したものを作成します。
以下のようにテンプレート作成されます。
テンプレート内の記述内容は、通常の並びとは異なっていますが、記述ルールは間違えていませんが
体裁を整えるには記述前後関係は修正する必要があります。
差分追加された内容の確認
体裁を整えて既存テンプレートと差分して比較すると、メタデータの定義と手動追加したリソースの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モジュールが自動生成されます。
まとめ
IaCジェネレーターを利用することで、既存テンプレートに追加したリソースを自動反映させることできますので
IaCの差分反映の煩わしさがおおきく削減できるのではないでしょうか。
また、生成したテンプレートからCDKへ変換するコマンドを自動生成してくれるので、幅広いIaCの利用に役立つのではないでしょうか。