COLUMN

AWSのリソースをコードで自動構築する「AWS CloudFormation」とは?実際に使用してみた

AWS CloudFormation(以下CloudFormationとします。)はAWSのリソース構築を自動で行うサービスです。
AWSのシステム構成をコード化されたテキストファイルを読み込み、記述されたリソースと同じ設定に構築できます。テキストファイルの内容変更により、システム構成の管理、修正が容易になります。
当コラムではCloudFormationの簡単な概要説明と、スタックの作成や更新を実践し、紹介します。

こちらのコラム「AWS CloudFormationを活用して効率的にAWSを使おう」では概要やメリット・デメリットなどについて解説しています。是非ご確認ください。

CloudFormationの概要

構築するAWSのリソースをコードとしてJSONまたはYAML形式でテンプレートに記述し、それを元にリソースを自動的に構築するサービスです。コードベースでAWSのリソースを扱うため、Infrastructure as Codeに分類されます。
同じテンプレートを利用することにより、どのアカウントでも同じリソースが構築できるため、設定ミスが減少し、作業時間の短縮が期待できます。
テンプレートに記載されているAWSのリソースが複数ある場合、スタックで管理しているため、一括で構築と削除が行われます。
テンプレートの内容変更でリソースの変更など管理が容易となります。
CloudFormationの詳細は以下を参照してください。

リンク:AWS CloudFormation別ウィンドウで開きます

スタックとは?

テンプレートから構築されるリソースがスタックとなります。
スタック単位でリソースを管理しており、スタックの作成や削除を行うとスタックで構築されたリソースも同時に作成、削除が行われます。

料金

CloudFormationの利用料金は無料です。
※構成するAWSのリソース(EC2、ELB、S3など)の料金は必要となります。

実践例

CloudFormationでスタックの作成、更新を行っていきます。
以下は作業手順です。

---

1. スタックの作成

2. スタックの更新

---

1. スタックの作成

1-1 テンプレートの構成

テンプレートを作成するための基本的な内容を説明します。
テンプレートは以下9つのセクションで構成されています。

  • Format Version (任意)
  • Description (任意)
  • Metadata (任意)
  • Parameters (任意)
  • Mappings (任意)
  • Conditions(任意)
  • Transform (任意)
  • Resources (必須)
  • Outputs (任意)

このうち、今回作成するテンプレートで使用するFormat VersionとResourcesについて解説します。
他セクションの使用方法はAWSドキュメントでご確認ください。

リンク:AWS CloudFormationテンプレートの分析別ウィンドウで開きます

1-2 セクションの解説
Format Version

テンプレートのバージョンを指定します。
2020/1時点では2010-09-09が最新バージョンとなります。
テンプレートのバージョン指定方法は以下の通りです。

"AWSTemplateFormatVersion" : "2010-09-09"
Resources

Resourcesセクションは、唯一の必須セクションです。
スタックに含める AWS リソース (EC2インスタンスやS3バケットなど)を宣言します。

"Resources" : {
    "Logical ID" : {
        "Type" : "Resource type",
        "Properties" : {
            Set of properties
        }
    }
}
「論理 ID」

構文中ではLogical IDに該当します。
論理IDは英数字(A-Z、a-z、0-9)を用い、テンプレート内で重複しない値にする必要があります。
論理IDはテンプレートの他の部分のリソースからの参照に使用されます。

「リソースタイプ」

構文中ではResource typeに該当します。
リソースタイプは作成するリソースのタイプを識別するために宣言します。すべてのリソースタイプの一覧については、「AWS リソースおよびプロパティタイプのリファレンス別ウィンドウで開きます」を参照してください。

「リソースプロパティ」

構文中ではSet of propertiesに該当します。
リソースプロパティは、リソースに対して指定できる追加オプションです。リソースタイプにより指定する追加オプションは異なります。

テンプレートを作成するための基本的な説明は以上です。

1-3 Cloudformationの実践

それでは実際に構築してみます。
VPCのテンプレートを作成します。作成するVPCは以下の図の通りです。

※以下の図はCloudFormationのデザイナーで表示されます。

事前に、CloudFormationのコンソール画面を操作する端末上で、以下のjsonを「vpc.json」として作成します。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16	

CloudFormationにアクセスし、「スタックの作成」から「新しいリソースを使用(標準)」をクリックします。

ステップ1では「テンプレートソース」に「テンプレートファイルのアップロード」を選択し、「ファイルの選択」から「vpc.json」を選択し、「次へ」をクリックします。

ステップ2では「スタックの名前」に「vpc」を入力し、「次へ」をクリックします。

ステップ3では設定はデフォルトのまま、「次へ」をクリックします。

ステップ4では作成前の設定確認を行います。

「スタックの作成」をクリックします。

画面が自動的に切り替わり、「CREATE_COMPLETE」と表示され、スタックの作成完了です。

作成したリソースの確認方法を説明します。

「CREATE COMPLETE」後に自動で次の画面が表示されるので、「リソース」タブをクリックし、VPCの「物理ID」をクリックします。

VPCコンソールへ遷移され、リソースができていることを確認できました。

2. スタックの更新

作成済のスタックを更新する方法として既存テンプレートを置き換える方法やAWS Cloud Formationデザイナーでテンプレートを編集する方法があります。今回は既存テンプレートを置き換える方法で前項で作成したテンプレートに対してVPC内からインターネットに接続するためのリソースを追加します。
以下のjsonをCloudFormationのコンソール画面を操作する端末上で「vpc2.json」として作成します。

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

リソース追加後のVPCは以下の図のようになります。

※以下の図はCloudFormationのデザイナーで表示されます。

「vpc2.json」のテンプレートでは、「組み込み関数」と「リソース依存関係の定義」を使用していますので、補足説明します。

「組み込み関数」では「!Ref」を使用しています。「!Ref」を使用することで、テンプレート内で指定したリソースの値を参照することができます。

今回のテンプレートの「VPCGatewayAttachment」の「!Ref InternetGateWay」では、アタッチ対象のインターネットゲートウェイのIDを参照しています。
組み込み関数は多数用意されており、詳細は以下を参照してください。

リンク:組み込み関数リファレンス別ウィンドウで開きます

「リソース依存関係の定義」は「DependsOn」を使用し、特定のリソースが他のリソースに続けて作成されるように依存関係を定義することができます。「!Ref」を使用すると、暗黙的な依存関係により、参照先のリソースが事前に作成されますが、「!Ref」での参照がないリソースを先に作成したい場合は「DependsOn」を使用します。

なお、CloudFormationは暗黙的な依存関係に基づき、リソースの構築順を自動的に判断し作成していますが、スタックの作成中で依存関係のエラーにより、失敗する場合があります。このエラーを回避するため、CloudFormationではVPCのあるリソースに対するゲートウェイアタッチメントの依存関係を明示的に宣言する必要があります。今回のテンプレートでは「RouteTable」、「Route」、「Subnet」の箇所で「DependsOn」を使用し、「VPCGatewayAttachment」に対して、依存関係を設定しています。
公式ドキュメントにDependsOn属性が必要となるケースや設定例が掲載されています。
以下を参照してください。

リンク:DependsOn属性別ウィンドウで開きます

補足説明は以上です。実践を引き続き行います。

VPCの構成を変更するため、「更新する」をクリックします。

下図のステップ1において、「テンプレートの準備」の項目では、「既存のテンプレートを置き換える」を選択し、「テンプレートソース」は「テンプレートファイルのアップロード」、「ファイルの選択」は「vpc2.json」を選択し、「次へ」をクリックします。

ステップ2では今回のテンプレートに定義されているパラメータがないため、「次へ」をクリックします。

ステップ3では設定はデフォルトのまま、「次へ」をクリックします。

ステップ4では更新内容を確認し、「スタックの更新」をクリックします。

ボタン押下後、画面が遷移し、「CREATE_COMPLETE」と表示されれば、更新完了です。

「CREATE COMPLETE」後に自動で次の画面が表示されるため、「リソース」タブをクリックします。

追記したリソースが確認でき、スタックの更新に成功しました。

おわりに

CloudFormationはAWSの構成を自動化でき、システム構築の時間短縮に繋がります。
無料で利用できるため、システム構築する際にCloudFormationを利用してみてはいかがでしょうか。

ページ上部へ戻る

無料ダウンロード

自社のクラウド導入に必要な知識、ポイントを
このに総まとめ!

あなたはクラウド化の
何の情報を知りたいですか?

  • そもそも自社は本当にクラウド化すべき?オンプレとクラウドの違いは?
  • 【AWS・Azure・Google Cloud】
    どれが自社に最もマッチするの?
  • 情シス担当者の負荷を減らしてコストを軽減するクラウド化のポイントは?
  • 自社のクラウド導入を実現するまでの具体的な流れ・検討する順番は?

初めての自社クラウド導入、
わからないことが多く困ってしまいますよね。

NTT東日本では
そんなあなたにクラウド導入に必要な情報を

1冊の冊子にまとめました!

クラウド化のポイントを知らずに導入を進めると、以下のような事になってしまうことも・・・

  • システムインフラの維持にかかるトータルコストがあまり変わらない。。
  • 情シス担当者の負担が減らない。。
  • セキュリティ性・速度など、クラウド期待する効果を十分に享受できない。。
理想的なクラウド環境を実現するためにも、
最低限の4つのポイントを
抑えておきたいところです。
  • そもそも”クラウド化”とは?
    その本質的なメリット・デメリット
  • 自社にとって
    最適なクラウド環境構築のポイント
  • コストを抑えるため
    具体的なコツ
  • 既存環境からスムーズにクラウド化
    実現するためのロードマップ

など、この1冊だけで自社のクラウド化のポイントが簡単に理解できます。
またNTT東日本でクラウド化を実現し
問題を解決した事例や、
導入サポートサービスも掲載しているので、
ぜひダウンロードして読んでみてください。

クラウドのわからない・
面倒でお困りのあなたへ

クラウドのご相談できます!
無料オンライン相談窓口

NTT東日本なら貴社のクラウド導入設計から
ネットワーク環境構築・セキュリティ・運用まで
”ワンストップ支援”が可能です!

NTT東日本が選ばれる5つの理由

  • クラウド導入を
    0からワンストップでサポート可能!
  • 全体最適におけるコスト効率・業務効率の改善
    中立的にご提案
  • クラウド環境に問題がないか、
    第3者目線でチェック
    してもらいたい
  • 安心の24時間・365日の対応・保守
  • NTT東日本が保有する豊富なサービスの組み合わせで
    ”課題解決”と”コスト軽減”を両立

特に以下に当てはまる方はお気軽に
ご相談ください。

  • さまざまな種類やクラウド提供事業者があってどれが自社に適切かわからない
  • オンプレミスのままがよいのか、クラウド移行すべきなのか、迷っている
  • オンプレミスとクラウド移行した際のコスト比較を行いたい
  • AWSとAzure、どちらのクラウドが自社に適切かわからない
  • クラウド環境に問題がないか、第3者目線でチェックしてもらいたい
  • クラウド利用中、ネットワークの速度が遅くて業務に支障がでている

クラウドを熟知するプロが、クラウド導入におけるお客さまのLAN 環境や接続ネットワーク、
クラウドサービスまでトータルにお客さまのお悩みや課題の解決をサポートします。

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。