AQ Tech Blog

IaCジェネレーターでテンプレートを作ってみた

作成者: shota.nakano|2024年03月12日

 

 

 

本記事の内容

本記事は、24卒のインターン生(Cloud未経験)が IaC についてまとめた記事です。

簡単な AWS CloudFormation テンプレートを作り、2024/02/05 にリリースされた AWS CloudFormation IaC ジェネレーターを試しました。

IaC とは何か、メリット・デメリット

IaC(Infrastructure as Code)は、インフラストラクチャの構成をコード化し、構築、変更、削除などを自動化する手法の一つです。

  • メリット
    • 環境構築の手間や時間が削減可能
    • ヒューマンエラーの防止
    • 保守性の向上
    • 環境の複製が容易
  • デメリット
    • IaC ツールの導入に手間がかかる
    • 学習コストが高い

IaC を実現するためのツールとして有名なものに Terraform があり、HashiCorp 社により提供されています。 Terraform は複数のクラウドサービスに対応していますが、AWS CloudFormation は AWS のみに対応しています。

AWS CloudFormation とは何か

AWS CloudFormation は、サーバーやネットワーク、ストレージといったシステム構築に必要な各リソースを、コードを元にして作成、変更、管理する機能を持っています。

AWS CloudFormation は、JSON や YAML 形式で記述されたテンプレートファイルから、AWS リソースの環境を構築するサービスです。

AWS CloudFormation は、定められた形式に従ってテンプレートファイルを記述します。そのファイルを AWS マネジメントコンソール上、または AWS コマンドラインインターフェイスから実行することができます。
AWS のインフラ環境を構築する作業をコード化し、環境構築作業の迅速化、作業ミスの防止、再利用を実現します。

AWS CloudFormation のメリットとして、AWS 上で AWS から提供されているためにツール導入や構築の手間がかからないという点があります。 今回はこの CloudFormation で、新しい機能が追加されたので試してみました。

通常はコードを作成し、コードを利用してリソースを作成しますが、アップデートで、既にあるリソースからコードを生成できるようになりました。その結果、IaC のデメリットであるコード作成の学習コストの問題を軽減できると考えられます。

AWS CloudFormation の使い方

テンプレートテキストから、CloudFormation スタックを作成してみます。

例として、VPC 関連のインターネットゲートウェイ、サブネット、ルートテーブル等を作成する場合には、以下のようなテンプレートを作成する必要があります。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
FirstVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: FirstVPC
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: FirstVPC-IGW
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref FirstVPC
InternetGatewayId: !Ref InternetGateway
FrontendRouteTable:
Type: AWS::EC2::RouteTable
DependsOn: AttachGateway
Properties:
VpcId: !Ref FirstVPC
Tags:
- Key: Name
Value: FirstVPC-FrontendRoute
FrontendRoute:
Type: AWS::EC2::Route
DependsOn: AttachGateway
Properties:
RouteTableId: !Ref FrontendRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
FrontendSubnet:
Type: AWS::EC2::Subnet
DependsOn: AttachGateway
Properties:
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: 'true'
VpcId: !Ref FirstVPC
Tags:
- Key: Name
Value: FirstVPC-FrontendSubnet
FrontendSubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref FrontendSubnet
RouteTableId: !Ref FrontendRouteTable

 

CloudFormationのマネジメントコンソールを開きます。

今回は新規でスタックを作成するので、「スタックの作成」をクリックします。

 

テンプレートの選択画面が表示されます。既存のテンプレートファイルを利用するので、「テンプレートファイルのアップロード」を選択します。「ファイルの選択」から先ほどのテンプレートを選び、次へ行きます。

 

スタックの名前を入力します。 「vpc」とします。

 

オプションは、デフォルトのまま次に進み、確認画面が表示されたら最後に作成をクリックします。

 

作成がはじまり、「CREATE_IN_PROGRESS」状態になります。

 

完了までに一分ほどかかりました。

作られたかどうかはスタックのリソースで確認できます。

IaC ジェネレーターでテンプレートを作ってみた

続いて、アップデートで追加された IaC ジェネレーターを試してみます。

今回、テンプレート化するリソースはハンズオンAWS 上で静的な Web サイトを公開しよう!で作成した S3 のリソースです。

CloudFormation のメニューとして「IaC ジェネレーター」が追加されています。

 

まず AWS リソースのスキャンを実施します。
スキャンには下記のような制限があるため、スキャンはリソース数が少ないシドニーリージョンで実施しました。

名前 Value
1 回のアカウントスキャンで処理できるリソースの最大数 100000
1 日あたりのスキャン数 (リソースが 10,000 未満のアカウントの場合) 3
1 日あたりのスキャン数 (リソースが 10,000 以上のアカウントの場合) 1
アカウントあたりの同時に生成されるテンプレートの数 5
1 回のテンプレート生成で同時にモデル化されるリソースの数 5
1 つのテンプレートでモデル化できるリソースの合計数 500

IaC ジェネレーターの「新しいスキャンを開始」ボタンを押すとスキャンが開始されます。
一度スキャンを開始するとキャンセルはできないため、注意してください。

スキャン完了後、「テンプレートを作成」を押します。

 

次にテンプレート名をつけます。「myCloudFormationStack」とします。
その他はデフォルトの設定のままです。

 

スキャンしたリソースからテンプレート化するリソースを選択します。
リソース名、タグキー、タグ値、リソース識別子で絞り込むことができます。
今回は作成した S3 のリソースのみを選択します。

 

選択したリソースについて、関連リソースがあれば自動検知してくれます。

 

確認画面で問題なければ「テンプレートを作成」ボタンをクリックします。 数分待つとテンプレートが生成されます。


作成したテンプレートは、IaC ジェネレーターの画面から確認できます。

テンプレートのインポート

IaC ジェネレータでは、既存リソースのテンプレート化までを実施できました。

インポートを行うことで、手動で構築したリソースを CloudFormation スタックの配下で管理できるようになります。
つまり、CloudFormation から作成したリソースのように扱うことが可能になるということです。

先程作成したテンプレートを選択し、「スタックにインポート」ボタンをクリックします。

 

まずスタック名を設定します。「CFnTest」とします。


パラメータはないので次に進みます。


スタックに取り込まれるリソースを確認することができます。


最後に「リソースをインポート」をクリックします。


インポートが完了すると、IMPORT_COMPLETE と表示されます。

 

スタックに S3 リソースが含まれていることが確認できます。

まとめ

今回は AWS CloudFormation の IaC ジェネレーターがマネジメントコンソールでも使えるようになっていたので、試してみました。
今回は CloudFormation を使いましたが、IaC ジェネレーターには cdk migrate コマンドを使用して、テンプレートを CDK アプリケーションに変換する機能もあります。
AWS 上で既存のリソースのテンプレート化を実施できるようになりました、ぜひ試してみてください!

【参考】

IaC とは?IaC のメリットやデメリット、Terraform などの構成管理ツールの特徴を紹介

Multi-cloud provisioning

AWS CloudFormation

既存のリソースのテンプレートを生成

スタックへの既存リソースのインポート