Loading
BLOG 開発者ブログ

2023年8月29日

初学者のためのCloudFormation超入門(概要理解編)

「AWS環境を一気に立ち上げたりできないのかな…」

これまでリソースの構築をコンソールやAWS CLIなど手動で続けてきてちょっと面倒だなーなんて思いながら自動化できないか調べてみたところ、ある!あるじゃないですか一気にAWS環境の構築ができるCloudFormationが!

CloudFormationで構築をオートメーション化したい!
CloudFormationの恩恵を受けたい!
よし、やってみよう!

と思ったは良いものの、いざ調べてみると思った以上に情報量が多かった、、、


こんにちは。クラウドソリューショングループのshimizuyです。

CloudFormation超初心者の自分のために備忘録的な意味も兼ねてインプットした情報をまとめて解説していこうと思います。
今回は「概要理解編」と題して、CloudFormationの概要や関連するキーワード、利用する際の流れを中心に説明していきます。
既に触ったことがある人もそうでない人も新しい発見などあれば幸いです!

説明すること

  • CloudFormation初心者向けの概要説明
  • CloudFormation使用時の流れ

説明しないこと

  • テンプレートの具体的な中身の解説
  • CloudFormationデザイナーについて
  • CloudFormationレジストリについて

目次

1. CloudFormationって何?

そもそもCloudFormationとは一体何なのか、色々と調べてみました。
AWS公式の説明はあまり簡潔にまとまっていなかったので、今回はChatGPT先生の説明を参考に考えていきましょう。

Q. AWS CloudFormationの概要を分かりやすく説明して

A. AWS CloudFormationは、AWSのインフラをコードで管理するツールです。テンプレート(JSONまたはYAML形式)を使用して、リソース(例:サーバー、データベース、ネットワーク)を定義し、設定します。テンプレート内でリソースの関係やプロパティを指定し、スタックと呼ばれる単位でデプロイします。これにより、インフラストラクチャを自動化し、アプリケーションの構築、変更、削除を効率化できます。

もう少しかみ砕いて説明していくと、AWS CloudFormationは、AWSのクラウドサービスを操作するための指示を書いたコードを使って、自動的にインフラを構築したり管理したりするツールです。JSONやYAML形式でリソース情報をコードで記述(テンプレート化)することで、これを使って自動的にAWSリソース(スタック)が構築ができます。また、インフラの設計や変更内容がコードによって管理されるため、AWSリソースの作成、変更、削除が容易になる。

ということですね。

1-1. テンプレートとスタックって何?

CloudFormationのドキュメントや技術記事を見る際に頻出するテンプレートスタックというキーワードがあります。
これらのイメージをざっくり最初に掴んでおくことで、この先読み進めていく上での理解度が激変するので、合わせて理解しておくことをオススメします。

テンプレート

  • AWSリソースのパラメータをまとめた設計図
  • どのリソースをどう起動するかすべて記述されている
  • JSON/YAML形式で記述

スタック

  • テンプレートによって作成されるリソースの集まり
  • スタック単位でリソースの管理(作成、更新、削除)が可能
  • スタックの作成・削除を行うと、スタックに紐づくリソースの作成・削除が一括で行われる(リソース単位で手を加える必要がない)
  • 使用するリソースやリソースの構築順は、テンプレートの依存関係を見てCloudFormationが自動的に判断(こちら側で考える必要Nothing)

1-2. テンプレートの記述形式はどっちがいいの?

上記にもある通りCloudFormationを使用する際は、まずJSONかYAML形式のテンプレートファイルを用意する必要がありますが、個人的にはテンプレートファイル内にコメントが記入でき、内容の一覧性の高いYAML形式で作成することをオススメします。

【JSON】

"VPC":{
  "type":"AWS::EC2::VPC",
  "Properties":{
    "CidrBlock":"10.0.0.0/16",
    "Tags":[
      {"Key":"App","Value":"isoroot"}
    ]
  }
}

【YAML】

#
# コメントアウトができるぞ!便利だ!
#
VPC:
    Type: AWS::EC2::VPC
    Properties:
        CidrBlock: 10.0.0.0/16
        Tags:
        -   Key: App
            Value: isoroot

1-3. CloudFormationを利用するメリットは?

CloudFormationでインフラ構築をするメリットとしては、

  • 手作業での構築によるヒューマンエラーやセキュリティ上のリスクが減る
  • 同一のテンプレートで何度も同じインフラを作ることができ、環境の再現性や一貫性を保つことができる
  • テンプレートに変更を加える際はAWS側でバージョン管理が可能
  • CloudFormation自体は利用無料(もちろん作成したEC2インスタンスなどの各リソースには料金が発生します)

といったところでしょうか。
手作業でのAWSの管理や構築が多い現場では特に導入による恩恵が大きそうですね!

2. CloudFormation利用時のワークフローとは?

CloudFormationを利用する際のワークフローには『作成・更新・削除』と、大きく分けて3つのケースが挙げられます。

ここでは各ケースのおおまかな流れとそれに付随するS3バケットの挙動を確認していきましょう。

2-1. テンプレートを新規作成する場合

  • ローカルやAWS Cloud9でテンプレートを作成
  • ローカル/S3にテンプレートを保存
  • テンプレートを指定してスタックを作成
  • 自動的にインフラが作成(プロビジョニング)される

ローカルに保存されたテンプレートを指定する場合、CloudFormationはテンプレートを自動的にS3バケットにアップロードします。

2-2. スタックを更新する場合

  • ローカル/S3に保存したテンプレートを修正
  • 再度ローカル/S3にテンプレートを保存
  • 更新したテンプレートを指定してスタックを再構築
  • 変更したリソースのみ更新される

この場合、S3バケットに保存した既存のテンプレートが更新されるわけではなく、修正前のテンプレートとは別に修正後のテンプレートがS3バケットに保存されます。

2-3. スタックを削除する場合

  • コンソールのスタック一覧からスタックを選択して削除
  • スタックに紐づいたリソースもまとめて一括削除される

注意点として、スタック削除を実行するとスタックとそれに紐づくリソースは削除されるのですが、S3バケットに保存しているテンプレートは削除されませんので、そちらの管理は個別にしていく必要がありますね。

また、AWSナレッジセンターの方でスタックを誤って更新・削除させないように設定するナレッジも公開されていますので、気になる方は確認してみてください。

CloudFormation スタックのリソースを誤って削除または更新しないように保護する | AWS re:Post

3. おわりに

この記事ではCloudFormationに関するキーワードや大まかな利用の流れを説明をしてきました。
CloudFormationを利用することでどんなメリットがあるのか?スタックに対してどのような操作が加えられるのか?など少しでも分かりやすく説明できていれば幸いです。

今後の記事では、今回説明できなかったテンプレートの詳細や実際の利用方法に関しても説明していければと思いますので、ぜひ次回以降もご覧ください!

参考資料

shimizuyのブログ