Masayan tech blog.

  1. ブログ記事一覧>
  2. 【AWS CloudFormation】インフラリソースのコード化:サービスの概要と基本編

【AWS CloudFormation】インフラリソースのコード化:サービスの概要と基本編

公開日

環境

  • windows10
  • VsCode
  • gitbash 2.32.0.1

前提知識

  • CloudFormation is 何?
    ソースコードで定義したAWSインフラリソースをプロビジョニングにしてくれるサービス
  • 何がうれしいのか
    • インフラリソースをコード化することができる
    • コード化によりリソースの再利用性を高めたり、そもそもの構築にかかる時間を短縮することが可能
  • どうやってリソースをコードで管理しているのか
    • インフラリソースをymlもしくはjsonの形式でコードとして記述することで定義(=テンプレート)
    • CloudFormationでは、テンプレートから作成されるリソースをスタックという単位で管理
      • ここでいうリソースは、EC2やVPC、セキュリティグループ等のプレーンなAWSリソースのこと。
      • スタックはリソースの集合体
      • 例えば、EC2というリソースに対してインスタンスタイプを指定したり、セキュリティグループを登録したりといった具合に、個々のAWSリソースを実際に使用できる状態にする設定を加えたもの(誤解を恐れずに言うと。)
    • テンプレートファイルをCloudFormation経由でAWS上にアップロードすることで、テンプレートファイルの内容に沿ってリソースが自動で構築される
  • イメージ


  • 料金はどうなっているの?
    • CloudFormationの利用自体に料金は発生しない。CloudFormationで作成したAWSリソースの利用に対して費用が生じる
  • まずは手動でコンソールから作ってみて、ある程度なれたらCloudFormationを使ってみるというのがおすすめ。(いきなりCloudFormation使っても理解しにくいと思われる)

テンプレートの作成

基本

  • ymlファイルのほうが個人的に好きなのでこちらで説明
  • docker-compose.ymlを記述したことがある方なら直感的にわかるはず
  • 以下の8種類の大項目からなる
  • 必須は、AWSTemplateFormatVersionと、Resourcesの2つ
  • 任意項目のうち、Description、Metadata、Parameters、Outputsは知っておいたほうが良い
    AWSTemplateFormatVersion: "2010-09-09"
    
    Description:
    
    Metadata:
    
    Parameters: 
    
    Mappings: 
    
    Conditions: 
    
    Resources:
    
    Outputs:

    項目

    必須

    説明

    AWSTemplateFormatVersion

    AWS CloudFormationのテンプレートバージョン

    Description

    ×

    テンプレートの説明

    Metadata

    ×

    Parameterセクションに記載したパラメータの順序を制御したりすることが可能

    Parameters

    ×

    スタック作成時にテンプレートに渡すことができる値

    Mappings

    ×

    キーとそれに関連する値のマッピングを作成することができる。作成したマッピングはCloudFormationのFn::FindInMap関数で呼び出し可能

    Conditions

    ×

    条件式を定義可能。条件付きのリソースを作成できる。(例えば、環境が本番ならEC2をさらにもう一つ作成する等)

    Resources

    作成するAWSリソースを記述する

    Outputs

    ×

    例えば、EC2用のテンプレート(スタック)からVPC用のテンプレート(スタック)の情報を参照したい場合等に記述しておく必要がある

リソースの書き方

  • 上記の項目のうち、最も重要なリソースの記述方法を中心に説明する
  • VPCを例とする(ファイル名はVPC.yml)
  • パラメータや変数を記述することは可能だが、説明を単純化するために割愛する
  • リソース名(リソースを識別するID)と、リソース名に対してリソースタイプとプロパティを指定する
  • 以下の例だと、リソース名がSampleVPC、リソースタイプがVPC、プロパティがCIDRとリソースのタグ
    AWSTemplateFormatVersion: "2010-09-09"
    
    Resources:
      SampleVPC:
        Type: "AWS::EC2::VPC"
        Properties:
          CidrBlock: 192.168.0.0/16
          Tags:
            - Key: name
              Value: sample-vpc
  • リソース名は任意だが、各リソースタイプとタイプごとに指定できるプロパティは決まっているので、詳細は公式Docを参照https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html
  • vscodeを使用している方は、以下の拡張機能を入れるとスニペット表示やコード補完が可能なので、スムーズに記述できると思われる
    https://marketplace.visualstudio.com/items?itemName=aws-scripting-guy.cform
  • VPCは最低限CIDRブロックを指定すれば作成することが可能なので、コードとしては上記だけでOK

スタックの作成

テンプレートが準備できたら、AWSコンソールからCloudFormationを起動し、スタックの作成をクリックする

テンプレートの準備完了→テンプレートのアップロード→ファイルの選択から先ほど作成したymlファイルを指定し、次へをクリックする

スタックの名称を入力し、次へをクリック
※パラメータについては後述するが、コンソールから入力した動的なデータをテンプレートに注入し、スタックを生成したい時に指定する項目

パラメータがある場合はこんな感じ。ここで入力した情報をテンプレートで使用してスタックを作成することが可能になる

任意でタグを入力し、次へをクリック

最後に確認画面が表示されるので、問題なければスタックの作成をクリック

少し待つと、スタックの作成が完了する。スタックのステータスがCREATE_IN_PROGRESSになっていれば成功

また、VPCの一覧を見てみると作成したVPCが追加されている

スタックの削除

  • スタックを削除することにより、紐づいている各AWSリソース(EC2、VPCなど)も削除される
  • 対象のスタックを選択し、削除ボタンより削除可能

まとめ

いかがでしたでしょうか。本記事では、AWS CloudFormationの概要やメリットおよび仕組み、基本的な使い方について紹介しています。コード化によりリソースの再利用性を高めたり、そもそもの構築にかかる時間を短縮することが可能等のメリットしかないので、ぜひ参考にしてみてください。