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

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

 

目次

     

     

    本記事の内容

    本記事は、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のマネジメントコンソールを開きます。

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

    create-a-template-with-the-iac-generator_01

     

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

     

    スタックの名前を入力します。 「vpc」とします。
    create-a-template-with-the-iac-generator_03

     

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

     

    作成がはじまり、「CREATE_IN_PROGRESS」状態になります。
    create-a-template-with-the-iac-generator_05

     

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

    作られたかどうかはスタックのリソースで確認できます。
    create-a-template-with-the-iac-generator_06

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

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

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

    CloudFormation のメニューとして「IaC ジェネレーター」が追加されています。
    create-a-template-with-the-iac-generator_07

     

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

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

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

    スキャン完了後、「テンプレートを作成」を押します。
    create-a-template-with-the-iac-generator_08

     

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

    create-a-template-with-the-iac-generator_09

     

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

     

    選択したリソースについて、関連リソースがあれば自動検知してくれます。
    create-a-template-with-the-iac-generator_11

     

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


    作成したテンプレートは、IaC ジェネレーターの画面から確認できます。
    create-a-template-with-the-iac-generator_13

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

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

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

    先程作成したテンプレートを選択し、「スタックにインポート」ボタンをクリックします。
    create-a-template-with-the-iac-generator_12

     

    まずスタック名を設定します。「CFnTest」とします。
    create-a-template-with-the-iac-generator_14


    パラメータはないので次に進みます。
    create-a-template-with-the-iac-generator_15


    スタックに取り込まれるリソースを確認することができます。
    create-a-template-with-the-iac-generator_16


    最後に「リソースをインポート」をクリックします。
    create-a-template-with-the-iac-generator_17


    インポートが完了すると、IMPORT_COMPLETE と表示されます。
    create-a-template-with-the-iac-generator_19

     

    スタックに S3 リソースが含まれていることが確認できます。
    create-a-template-with-the-iac-generator_20

    まとめ

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

    【参考】

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

    Multi-cloud provisioning

    AWS CloudFormation

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

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

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。