インフラのコード化(CloudFormation)

ここまで、AWSのリソースを作成するのは、AWSコンソール画面で行ってきましたが、同じような環境を作ったりする場合に、人手で一から作っていくのは面倒ですし、設定ミスなどがあるとそれだけで余計なデバッグ時間がかかったりします。

そのため、AWSのリソースもコード化して再構築を容易にできる仕組みが「インフラのコード化」です。CloudFormationやTerraformがありますが、Terraformはサードパーティ製なので、ここではCloudFormationについて紹介します。

CloudFormationとは

CloudFormationはAWSのサービスのひとつなのですが、山のようにあるAWSサービス(リソース)を設定ファイル(JSON/YAMLファイル)で構築できるサービスです。

詳細はAWS Black Beltのセミナー資料がとても参考になりますが、1ページだけ抜粋します。

基本的には、YAMLファイルやJSONファイルでAWSのリソースや設定を書き、それをベースにCloudFormationでスタックを生成すると、設定に記載されたリソースが設定通りに構築されるというイメージです。

例えばSTG環境で構築したAWSのシステムを、PRD環境にそのまま構築したい場合、コンソールで人手で再構築していると設定ミスなどで思わぬ事故が発生する可能性が否めませんが、CloudFormationでコード化しておけば、PRD環境を構築する際にも、意図的に設定を変えない限り全く同じものができますので安心です。

設定ファイル(テンプレートファイル)

設定ファイルは自分で書くのですが、便利なテンプレートなどもあるのでそちらをベースに編集していくのでも良いです。ここでは、簡単なサンプルとして、VPCを作成する設定ファイル(YAMLファイル)を記載します。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  testVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
      - Key: Name
        Value: test-vpc

Resourcesの下にリソースの定義を書いていきます。ここでは、testVPCというリソースを定義し、リソースタイプを AWS::EC2::VPC と定義しています。その中にPropertiesとして、CIDR(IPアドレスの範囲)を指定したり、タグでVPCの名前を test-vpc にしたりしています。

これをローカルPC上で作っておき、 test-vpc.ymlというファイルで保存しておきます。

スタックの作り方

次に、上記の設定ファイルを使ってスタックを作っていきます。AWSのCloudFormationというサービスを選択すると、下記のようにスタックの画面がでてきます。ここで「スタックの作成」ボタンを押して進んでいきます。

テンプレートの設定画面になりますので、先ほど作ったYAMLファイルを使います。「既存のテンプレートを選択」を選び、「テンプレートファイルのアップロード」を選択すると、「ファイル選択」のボタンがでてきますので、これを押して、先ほどローカルで作った test-vpc.yml のファイルを選択します。

「スタックの詳細」でスタック名を決めます。とりあえず、test-stack にしておきます。

この後は「スタックオプションの設定」や「確認画面」がありますが、そのままで進んでいくとスタックの作成が始まります。

ステータスが「CREATE_COMPLETE」になったら出来上がっています。VPCの画面に行くと、test-vpcという名前のVPCができていて、CIDRが 10.0.0.0/16 になっています。

スタックの消し方

設定を間違っていたり、もう一度作り直したい時はスタックを削除すれば、スタックで生成した全てのリソースが削除されて元に戻ります。AWSリソースの中には存在しているだけでコストがかかるものもありますので、使う時だけスタックで作成し、使い終わったらスタックを消すというのも経費削減に有効です。

スタックの消し方は、スタックの画面で「削除」や「Delete」のボタンがありますので、それを押すだけです。

test-stackを選択し、テンプレートタブで中身を確認しつつ、削除ボタンを押せば、スタックが削除され、先ほど作成したVPCも削除されます。

スタックイベントで、「DELETE_COMPLETE」になったら削除完了です。