AWS CloudFormation を使用してリソースをプロビジョニング・管理してみる

AWS CloudFormation を使用してリソースをプロビジョニング・管理してみる

Clock Icon2024.09.30

Title: AWS CloudFormation を使用してリソースをプロビジョニング・管理してみる

こんにちは!よしななです。
今回は、AWS リソースを作成する際にマネージドコンソールから作成では時間がかかるため、
CloudFormation を使用してリソースを作成しました。その時のことを備忘録としてまとめます。

目次

  • やりたいこと
  • 前提
  • AWS CloudFormation とは
  • CloudFormation yml ファイルの記法
  • 実行してみる
  • 実行結果
  • リソースの削除
  • 最後に

前提

  • OS
    • Windows 11
      • AWS CLI インストール済み
      • こちら:を参考に、ローカル環境から AWS にサインインしておく
  • コードエディタ
    • VSCode
  • AWS 環境にサインインしている状態であること

AWS CloudFormation とは

  • AWS リソースのモデル化およびセットアップに役立つサービス
    • yaml 形式で書かれたテンプレートを実行することで、CloudFormation がすべての AWS リソース(EC2 インスタンスや RDS DB インスタンスなど)のプロビジョニングや設定を自動的に行ってくれる
    • その結果、ソース管理に割く時間を減らし、AWS で実行するアプリケーションにさらに注力できるようになる使用する

公式サイト:

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

CloudFormation yaml ファイルの記法

以下の公式ドキュメントを参考に、基本的な構文について調べましたので以下にまとめます。
以下、VPC を作成する YAML 形式の CloudFormation テンプレートとなります。

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Details of the CloudFormation template'

Resources:
    TestVPC:
        Type: AWS::EC2::VPC
        Properties:
            CidrBlock: 10.0.0.0/16
            EnableDnsHostnames: true
            EnableDnsSupport: true
            InstanceTenancy: default
            Tags:
                - Key: Name
                  Value: TestVPC
  1. AWSTemplateFormatVersion:テンプレートファイルのバージョン指定(任意)
    • 作成したテンプレートファイルのバージョンを識別する
    • 現在は2010-09-09のみサポート
  2. Description:CloudFormation スタックの説明(任意)
    • CloudFormation スタックの【説明】欄に入る文言を記載
    • 上記の記載では、作成後のCloudFormation スタックの説明欄にDetails of the CloudFormation templateと記載される
  3. Resources:リソースの定義(必須)
    • VPC を構成する内容を記載します。
    • 上記の CloudFomation テンプレートでは VPC を作成しているため、必須設定であるリソース名:test-vpc、リソースタイプ、AWS::EC2::VPC、VPC の詳細設定であるCidrBlock、オプションでTagsをあらかじめ指定しています。
    • リソース名はアルファベット大文字・小文字のみ入力でないとエラーになるため

そのほか、以下のようなオプション項目があります。

  • Parameters
    • このセクションを利用し、CloudFormation スタックの作成または更新の際にユーザーから入力を受け取ることが可能
      • 例:EC2 を CloudFormation テンプレートで作成する際に、インスタンスタイプや AMI(Amazon Machine Image)ID をParametersで登録しておくことにより、CloudFormation テンプレートを起動する際に、ユーザーはParametersで登録されたインスタンスタイプを選択し、AMI ID を入力するフィールドを表示する、といったことが可能
  • Outputs
    • CloudFormation スタックの作成または更新が完了した後、その CloudFormation スタック内で作成されたリソースの情報を出力するために使われる
    • これにより、特定のリソースの ID や URL などの情報を取得し、他の CloudFormation スタックや AWS リソース、アプリケーションで利用することができるようになる
      • 例:Web アプリケーションのデプロイメントに CloudFormation を使用している場合、アプリケーションがデプロイされた Amazon EC2 インスタンスのパブリック IP アドレスや、アプリケーションにアクセスするためのロードバランサーの DNS 名をOutputsセクションに指定して出力することが可能

参考URL:
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/template-anatomy.html

実行してみる

それでは、上記で作成した CloudFormation テンプレートを実行してみます。
※下記コマンド実行前に、CloudFormation の操作権限を持っているロールの Assume role を行っています。

まず、template.json があるディレクトリに移動します。

cd template

次に、以下のコマンドを実行します。

aws cloudformation create-stack --stack-name TestVPC --template-body file://testvpc.yaml

create-stackコマンドは、指定された AWS CloudFormation テンプレートを読み込み、 CloudFormation スタックを作成します。
--stack-nameは CloudFormation スタック名を、--template-bodyで CloudFormation テンプレートが格納されているディレクトリをfile://{CloudFormation テンプレートが格納されているディレクトリ}で指定します。

また、上記で説明しましたParamatersを指定しその通りにリソースを作成する、といったことも可能です。

実行が完了すると、以下の画面が表示されます。

{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:{アカウントID}:stack/TestVPC/{CloudFormation スタック ID}"     
}

実行結果

AWS マネージドコンソールを開きます。
以下の通り、今回作成した CloudFormation スタックが確認できます。

2024-09-30_15h59_39

VPC を確認すると、test-vpcが作成されたことが確認できました。

2024-09-30_16h01_15

作成したリソースの削除

CloudFormation マネージドコンソールから削除をクリックするだけで作成した VPC が削除できます。リソースの削除漏れがなくなり、便利です。

2024-09-30_15h59_39

以上で「AWS CloudFormation を使用してリソースをプロビジョニング管理してみる」は完了となります。

最後に

AWS を使用するならほぼ必須のサービスだと思います。
IaC サービスには Terraform などもあると思うので、今後比較記事も出してみたいです。
ここまで読んでいただき、ありがとうございました!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.