ク、クラウドフォーメーション・・・ 『CloudFormation 』 避けてきたけど、そろそろはじめてみよう!やっぱ便利
今まで細かな内容は理解せず、必要な時に出来合いのコードをそのまま利用していましたが、それではアソシエイト三冠取得に向けても足かせになってしまう・・・ということで 『もうちょっと活用できるようになろう』 と思い使い始めたので基本的な内容をまとめることにしました。
同じようにまずは一歩を踏み出そうと考えている方に、少しでも参考になればと考えています。
---- CloudFormation とは? ----
AWS CloudFormation は Amazon Web Services リソースのモデル化およびセットアップに役立つサービスです。リソース管理に割く時間を減らし、AWS で実行するアプリケーションにさらに注力できるようになります。使用するすべての AWS リソース (Amazon EC2 インスタンスや Amazon RDS DB インスタンスなど) を記述するテンプレートを作成すれば、AWS CloudFormation がお客様に代わってこれらのリソースのプロビジョニングや設定を受け持ちます。AWS リソースを個別に作成、設計して、それぞれの依存関係を考える必要はありません。AWS CloudFormation がすべてを処理します。次のシナリオは AWS CloudFormation がどのように役立つかを示します。
公式ドキュメント:AWS CloudFormation とは
うん、ちょっと抽象的ですね。
まず覚えておけばよいこととしては
✔ テンプレート(ファイル)を作成する必要がある
✔ テンプレートに従って(を読み込んで)AWS側で AWSリソースを自動で作成してくれる
です。
クラウドの醍醐味である、Infrastructure as Code(IaC) を実現できるサービスなのです。
テンプレートという名の設計書というか注文書を作成し、それをAWSに渡すとその内容に従ってインフラ(サーバーなど)が出来上がるというわけです。
なお、AWSの認定資格取得を目指している方は、深さはいったん置いておき少なからず知っておく必要があります。
ちなみに、このテンプレートは AWS 専用ですので他のクラウドサービス(Azure や GCP など)では当然使えません。
こういったことがやりたい場合は、 Terraform というツールを使って、その決まり事に従ってテンプレートを作成することを選択した方が良いです。
何がイイの?
① インフラ環境の変更管理がしやすくなる
② ほしいときにいつでも同じ環境を作成できる
テンプレートファイルの内容が理解できる人であればファイルを渡す/見せるだけで情報共有可能ですし、リソースを追加や削除、変更する必要が生じた際にもそのファイルの変更内容を追えばいつどう変化したがわかります。
また、何回でもボタン一つでリソース(環境)を作成できますし、消すのも簡単にできます。
つまり、必要な時だけ環境を準備して、不要になれば削除すれば良いので、無駄な課金を減らすことができます。リソースが存在していたり、稼働している場合に課金が発生するわけなので。
---- 超基本 ----
🔘 リソース作成完了までの流れ
1. テンプレートファイルを作成する
2. AWS にテンプレートファイルの内容を読み込ませる
3. AWS が読み込んだ内容に従ってリソース(群)を作成
となり、リソースが完成したら実際に活用するという流れになります。
ひとつのテンプレートから作成されたリソース群(リソースのまとまり)をスタックといいます。
💡 ここが重要
1. 形式(記述のルール)が決まっているので、その決まりに反しないように作成しないと当然エラーになる
2. 記述内容に不整合があれば当然エラーになる
ということで、これらに注意しながらテンプレートを作成するのですが、記述内容が多くなると複雑になり失敗が起きやすくなります。
🔘 テンプレートについて
▫ 形式
JSON または YAML 形式で AWS CloudFormation テンプレートを作成できます。AWS CloudFormation デザイナー を含むすべての AWS CloudFormation 機能と関数がサポートされています。
公式ドキュメント:AWS CloudFormation テンプレート形式
ということですが、よほど事情やこだわりがない限りは、『 YAML形式 』を選びましょう。
可読性の面で断然有利です。コメントも記述できるので、他の人や自分自身に対しても補足や説明などをテンプレートファイル内に記載しておくことができます。
インデント(半角スペースキーによる字下げ)やコロン(:)、改行などを使って構造化されたデータを表現していきます。
▫ セクション
セクションと呼ばれる 9つのブロック(最上位オブジェクト)に色々と内容を記述していきます。
ただ、主に利用するのは以下の 5つで、 Resource のみが必須セクションのため、最悪 Resourceセクションだけを記述すればテンプレートはできあがります(成立します)。
個人的には、Parameters と Outputs がいまいちピンときませんでしたが、スタックを作成するとき(した後)マネジメントコンソールを確認することで理解できました。
Parameters は下の画像のように、スタック作成時に自分で入力(デフォルト値を設定し自動入力も可能)するのです。
この画像では、EC2 作成時に使用する AMI ID を指定しています。
/aws/service/・・・は、今回説明を割愛しますが
を利用して最新のイメージを取得しています。
Outputs はスタック作成が終わった後、下の画像のような画面が見れるのですが、割り振られた値、例えば作成された EC2 のインスタンス ID などが見れたりします。もちろん、このセクションに出力されるように記述していない場合にはでてきません。
▫ 論理ID
英数字で作成者が定義する IDであり、テンプレート内で一意である必要があります。後ほど具体的な例で紹介します。
💡 ここが重要
さまざまな記事などで便利なテンプレートが公開されており、そのテンプレート内では論理IDも記述されています。
前述の通り公開した方や組織が、任意で定義したID(名称)ですので変更して全く問題ありません。ただ、初心者にはどれが論理IDなのか?最初見分けにくいことと、定義された論理IDはテンプレート内のどこかの場所で参照されている場合がほとんどなので、その部分も含めて変更しないと内容に不整合が起きます。
Excel などでも行や列を挿入したり、ファイルの場所を移動したときなどに参照がおかしくなって想定した値が出力されなくなることがあると思いますが、そのような感じです。
▫ (組み込み)関数
AWS CloudFormation には、スタックの管理に役立ついくつかの組み込み関数が用意されています。実行するまでわからない値をプロパティに代入するには、テンプレートで組み込み関数を使用します。
公式ドキュメント:組み込み関数リファレンス
すべて記述する値を決め打ちで、ということだと不都合や面倒が発生する場合があります。例えば、ECインスタンスを作成するのに、OSはその時点で最新のAMIを使う、とかしたい場合などです。
そんなとき、関数を使って値を入れ込んだりするわけです。
ちなみに
マネジメントコンソールからスタックを作成する際には、
というボタンをクリックすると
という具合に、こんな感じでスタックができますよ~と視覚的に教えてくれます。
---- おススメの準備 ----
他にもないことはないのですが、最低限これは整えたほうが良いことを一つご紹介します。
『 テキストエディタ 』です。
最悪 Windows の「メモ帳」なんかでも書けるには書けますが、効率が悪くミスも発生しやすいです。
CloudFormation の拡張機能が使える親和性や連携性の高いエディタを使ったほうが良いです。
一例としては、『 Visual Studio Code 』をご紹介します。Microsoft 社が無償で提供するエンジニアに人気の高いものです。VScode と略されたりもします。
これに以下の
『 拡張機能 』をインストール
して使うのがおススメです。
インストールしたら、
言語モードで「YAML」を選択し、
「start」➡ Tabキー と入力すると
このように、主要なセクションが表示されます。
そして、例えば Resourcesセクションでインデントして「VPC」と入力すると
こんな感じ補完されて、そのまま Tabキー を入力すると
みたいな感じで、VPCリソース作成に基本的に必要な記述が現れます。
あとは例えば
Resources:
myVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 192.168.0.0/16 🔷
EnableDnsSupport: true
Tags:
- Key: Name 🔷
Value: vpc1 🔷
みたいに指定していくわけです。
ちなみに①
Resources:
myVPC: 💡
Type: AWS::EC2::VPC
Properties:
CidrBlock: --.--.--.--/--
EnableDnsSupport: true
Tags:
- Key: keyname
Value: value
このように自動的に入力されたわけですが、💡 の行の myVPC が論理IDです。
自動的に入力されたので、最初私も戸惑ったのですが、「myVPC」じゃなくても良いです。「VPC」とか「vpc」でも良いのです、任意の名前(値)ですから。
ちなみに②
VScode では Git をクライアントとして使えます。
別の言い方をすると、Git Bash や Sourcetree などのクライアントを使わなくても、VScode がクライアントになり操作ができるのです。
VScode 内でターミナルを開き(Git も含めた)コマンドも打てます。
また、Git に関連する便利な拡張機能もたくさんあります。
あと、Docker とか Python とかホントめちゃめちゃ沢山便利な拡張機能があります。
今回はここまで 🔚
まだまだ奥が深いサービスなのですが、いったんこのくらいの情報を頭に入れてからまずは公開されている素敵なコードを解読してみることをおススメします。
まずは、VPC、サブネット、EC2を一つずつ作るくらいの簡単で短めのコードをコピーしてスタック化してみる。そして実際にどのような感じでできたか確かめてみて、徐々に自分が作りたいスタック(インフラ環境)のコードに修正して理解を深めていくのが良いと思います。
私も現在最低限自分にとって役に立つテンプレートファイルができたので、Auto Scaling とかコンテナとか組み入れていこうといったところです。
最後までお読みいただきありがとうございました 😊
🔽 AWS 関連記事はこちら 🔽
#最近の学び #学び #ITエンジニア #Git #Sourcetree #いま私にできること #勉強 #挑戦している君へ #IT #資格 #資格試験 #駆け出しエンジニア #AWS #AWS認定