クラウドではサーバ構築や各リソースの増減を柔軟に行えるはずですが、それには専門的な知識が必要で手間がかかりますよね。AWSでは、そんな悩みを解決するためにCloudFormationという、コードでAWSの環境構築を行うツールを提供しています。本記事ではAWS CloudFormationについて概要、できること、リソースの作成方法まで解説します。
AWS CloudFormationとは?
AWS CloudFormationは、テキストファイルでAWSリソースを自動で作成するサービスです。
AWSの各リソースを組み合わせることで自身の望むシステムを構築できます。システムを構築するにはコンソールでEC2やELBといったリソースの設定を1つずつ実施していくという方法がありますが、作成要件が数多くなると手作業は大変になり、ミスも起こりやすくなります。そこで活躍するのがAWS CloudFormationというサービスです。
CloudFormationの仕組みは?
AWS CloudFormationでは、開発や運用に必要なリソースをまとめたスタックごとに、テキストファイルとしてリソースをモデリングします。テキストファイル自体はJSONまたはYAML形式というシンプルな宣言型のスタイルで記述されているため、リソースごとに数行の記述で、任意のシステムの環境構築ができます。
コードを基にコンピューティング環境(インフラストラクチャ)を構築します。コンピューティング環境全体をコードとして扱うことで、高速かつ安定的にプロビジョニングが可能になり、管理も容易になります。
また、テンプレート化することで同一環境をすぐに構築できるので、作業効率が上がり、人為的なミスも減らせます。
CloudFormation関連の用語解説
プロビジョニング
ユーザに必要なリソースを必要な分だけ割り当てて、すぐに使えるように準備しておくことをプロビジョニングといいます。CloudFormationは「テンプレートを基にAWSリソースをプロビジョニングするサービス」と言い換えられます。
Infrastructure as Code(IaC)
コードを基にコンピューティング環境を構築する手法のことで、CloudFormationは、AWSにおけるIaCツールです。
スタック
プロビジョニングしたAWSリソースの集まりをスタックといいます。必要なリソースとその依存関係を記述したものを、1つのスタックとして扱います。スタック内で各リソース間の依存関係が自動で管理され、リソースを適切な順序に実行してくれます。CloudFormationではスタック単位で一括操作・管理するので、スタック内の1つのAWSリソースだけを削除するといったことはできません。
CloudFormationの利用料金は?
CloudFormation自体の利用料金はかかりませんが、そもそも単体での利用はなく、ほかのAWSリソースと併用するのでそちらの費用は発生します。
AWS CloudFormationでできることは?
AWSリソースの自動作成
どのリソースをどのように設定してシステム構築するかといった内容を記載したテンプレートを基にAWSリソースを自動で構築できます。
同一環境の構築
環境構築を行ったリソース設定は、ベストプラクティスとしてテンプレートにできます。そのため、一度作ったAWS環境をテンプレート化しておくことで、同じ環境を繰り返し構築できるため、時間を削減できます。
AWS サービスの統合
AWSには250を超える幅広いサービスがありますが、AWS CloudFormationを使うことでサービスの統合が可能となります。統合可能なサービスには、AWS Identity and Access Management (IAM)やAWS Configなどがあります。
統合することで、リソース全体の管理を自動化できます。
サードパーティリソース・プライベートリソースの管理
AWS CloudFormationレジストリを使用することで、AWSのみならず、サードパーティや自分のライブラリで公開したプライベートリソースの管理も含めて一括管理ができるので管理の手間が省けます。
リソースの一括操作・一括管理
必要なリソースをCloudFormationテンプレートに記述することで、一つのスタックとして扱えるようになり、一括で起動・更新・削除ができるようになります。
CloudFormationではEC2などのAWSリソースの設定を複数構築できますが、それらを一括で管理することができます。
クロスアカウント管理・クロスリージョン管理
AWS CloudFormationは自動でロールバックやステート管理ができ、スタックの所在地に関係なく、複数のAWSアカウントやリージョンのリソースを自動的かつ安全にプロビジョン・管理できます。
ロールバックとは
データ更新などで障害が起こった場合は、前の状態に戻ること
CloudFormationの注意点は?
リソース作成上限がある
CloudFormationのテンプレートから作成できるリソースには上限が設定されており、その数は500個となります。上限に達しないよう、1つのテンプレートを複数に分割するという対策を講じる必要があります。
テンプレートを分割しても、ネスト機能によって複数のテンプレートを同時に実行できます。
CloudFormationはどんな用途に向いている?
同じ構成で複数の環境を構築する必要がある場合や同一環境で繰り返し操作を検証したいといった場合にCloudFormationを有効に活用できるでしょう。
また、AWS CloudFormationは、自動でシステムを配備できるので、DR対策にも有効です。システムを起動しているリージョンに問題が発生した場合、即座に別のリージョンで自動で立ち上げるよう設定することもできます。
CloudFormationでAWSリソースを構築する方法は?
まず、リソース情報がJSONまたはYAML形式のテンプレートを用意します。
テンプレートを保存したら、CloudFormationで、保存したテンプレートに基づいてスタックを作成します。スタックを作成することで変更時の影響を抑えられます。スタックを削除するとリソースも削除される仕組みになっています。
そして、テンプレートで指定したスタックリソースの構築を実行します。
テンプレートの作成方法
テンプレートの作成方法には以下の3種類があります。
クイックスタート
・AWSのベストプラクティスに基づいてセキュリティや可用性を考慮して作られたテンプレート
・15分程度でアプリケーションをAWS上に展開できる
サンプルテンプレート&テンプレートスニペット
・独自のテンプレートを短時間で作成したい人向け
・サンプルを利用し、設定の変更が必要な箇所のみ一部修正して独自のテンプレートを作成する
自らテンプレートを作成
・JSON、またはYAML形式でテンプレートを1から作成する
上記の3種類で、下に行けば行くほど導入のハードルは高くなりますが柔軟性は向上します。AWSの公式サイトやインターネット上には、CloudFormationのテンプレートが数多く掲載されています。
テキストエディタさえあれば誰でもテンプレートを作成できます。テンプレートではパラメータの定義やリソースの作成・設定などを行います。
基本的な構文はAWSのリファレンスページに掲載されているのでこれを参考にして作成しましょう。AWS CloudFormationがサポートするすべての AWS リソースタイプおよびプロパティタイプのリファレンス情報が載っているので要件に沿って設定を記述することでリソースを作成できます。
最近は様々な機能が出ており、AWS CloudFormation Designerを使うことでテンプレートを視覚的に設計できます。また、AWS CDKを使えばTypeScript、Python、Java、.NETといったプログラミング言語でコードを作成することも可能です。ほかにも、クロススタック参照の機能を使って既存のスタックからデータをインポートしてスタックで利用することもできます。
規模の大きいテキストを1ファイルで管理すると、修正・更新が必要な場合を考慮してテンプレートをスタックの機能ごとに分割するといった工夫をするのがおすすめです。
一度作成すれば構文を使いまわせるため、工数も減り、負担の軽減にもつながります。
テンプレートの構成要素
テンプレートは以下の要素で構成されます。※「Resources」のみ必須項目です。
AWSTemplateFormatVersion:
"version date" /テンプレートのバージョンを記載する
Description:
"String" /テンプレートに関する説明を記載する
Metadata:
template metadata /テンプレートに関する追加情報を記載する
Parameters:
set of parameters /実行時にユーザ入力を求めるパラメータ
Mappings:
set of mappings /キーと値のマッピング
Conditions:
set of conditions /条件名と条件判断内容
Transform:
set of transforms /サーバレスアプリケーションの場合は必要となる
Resources:
set of resources /スタックを構成するリソースやプロパティ
Outputs:
set of Outputs /スタック構築後にCFnから出力させる値
リソースの指定には以下の項目を入力します。
Resources:
Logical ID: /論理ID
Type: Resource type /リソースタイプ
Description: Set of properties /リソースごとのプロパティ
論理IDとは
英数字(A-Z/a-z/0-9)を用いて表すテンプレート内で固有IDのこと。リソースを参照する際に必要となる。
たとえば、EC2インスタンス作成のテンプレートは以下のようになります。「Type」でEC2インスタンスの作成を宣言し、「Properties」でAMIを宣言してOSタイプを指定します。
Resources:
MyEC2Instance:
Type: "AWS::EC2::Instance"
properties:
ImageID: "~~~~"
CloudFormationの勉強方法
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、AWS CloudFormationに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。