LoginSignup
2
0

More than 3 years have passed since last update.

AWS CloudFormation Master Class を受けてみた⑥「Conditions・Metadata・Init について」

Last updated at Posted at 2019-06-21

はじめに

Udemy にて Stephane Maarek 氏 が提供している「 AWS CloudFormation Master Class 」コースについて紹介していきます。今回の内容は、「 CloudFormation Resources 」と「 Mappings 」についてです。

Conditionals

Conditionals とは

image.png
Conditionals は、condition を元に作成されたリソースやアウトプットの構築をコントールすることができます。そして、condition は他の condition やパラメータに影響を与えることができます。

主な Conditions として以下があります。

  • 構築環境(開発/検証/本番 など)
  • AWS リージョン
  • パラメータ値

image.png
図のように、Logical ID は、Condition のことを表しており、そして Intrinsic function は以下のように表します。

  • Fn::And
  • Fn::Equals
  • Fn::If
  • Fn::Not
  • Fn::Or

Hands-On

ダウンロードしたファイルの中にある [0-mappings-ec2.yaml] を開いて、Conditons のコードを見てみましょう。
image.png
ここに書かれている内容から、以下のことが分かります。

  • Conditions は「CreateProdResources」である
  • 「CreateProdResources」は「EnvType」が「prod」の場合のみ、「true」であることを表している

image.png
この図の内容から、以下のことが分かります。

  • EC2 は特に Condition が設定されてないので、設定通りに作成される
  • Condition は 「CreateProdResources」である
  • 「true」の場合にのみ 「MountPoint」、「NewPoint」、「Outputs」の3つが作成される

Conditions Functions

image.png
以下の5つの条件関数は、CloudFormation でコードを書く際にとてもお世話になるので、この5つについては把握しておきましょう。
条件関数については、AWSの公式より詳しく記載されてますので、こちらも参照下さい。

  • Fn::And
    • 指定された全ての条件が「true」の場合「true」を返す(それ以外は「false」)
  • Fn::Equals
    • 指定した2つの値が同じ場合「true」を返す(それ以外は「false」)
  • Fn::If
    • 指定された条件が「ture」・「false」に評価された場合、それぞれに対応する値を返す
  • Fn::Not
    • false と評価された条件に対して「true」を返す(その逆に対しては「false」を返す)
  • Fn::Or
    • 指定された条件のいずれかが「true」に評価された場合「true」を返す(条件が全て「false」と評価された場合は「false」)

また、これ以外で重要なのものとして、「Fn::GetAtt」があります。

  • Fn::GetAtt
    • テンプレートのリソースから、属性の値を取得する

CloudFormation Metadata

Metadata

Metadata というセクションを使うことで、リソースやテンプレートに対して、それぞれの詳細を加えることができます。
image.png
以下の3つの Metadata key はとても重要なので見ておきましょう。

  • AWS::CloudFormation::Designer
    • テンプレート上のリソースがどうレイアウトされているかを記述し、AWS Designer で自動的に追加される
  • AWS::CloudFormation::Interface
    • インプットパラメータが AWS Console に表示された際にグループ化とソート化をする
  • AWS::CloudFormation::Init
    • cfn-initの構成タスクを定義している

AWS::CloudFormation::Init

上記の3つの Metadata key の中でもとりわけ重要な AWS::CloudFormation::Init について説明します。
image.png
AWS::CloudFormation::Init の中には Config が用意されており、以下の内容が順番に書かれております。

  • Packages
    • Linux OS 上のパッケージリストをインストールする
  • Groups
    • ユーザグループを判別する
  • Users
    • ユーザと、その所属グループを判別する
  • Sources
    • アーカイブファイルをダウンロードし、EC2インスタンスに置く
  • Files
    • EC2インスタンス上にファイルを作成する
  • Commands
    • コマンドを実行する
  • Services
    • sysvinit サービスを起動する

image.png
AWS::CloudFormation::Init の特徴についてまとめると、以下となります。

  • AWS::CloudFormation::Init の中に複数の config を用意することができる
  • 複数の config から configset を作成することが可能
  • EC2 ユーザのデータから、config セットを呼び出し可能

Packages

image.png
Packages の特徴は以下となります。

  • package は、apt、msi、python などのリポジトリからインストールが可能
  • package は rpm、yum/apt、rubygems、python の順番で作成される
  • package はバージョンの指定も可能

Groups and Users

image.png

  • CloudFormation Init Metadata に groups と users を入力することで、複数のグループとユーザの登録が可能
  • 特定のグループを指定すといった設定も可能
  • ユーザの所属グループの指定や、ユーザの指定といった設定も可能

Sources

image.png

  • web からアーカイブを直接ダウンロードして、インスタンスに入れることが可能
  • URL があれば、S3 や github からでも取ってくることが可能

Files

image.png
- 全てのコンテンツに対してフル権限と操作が可能
- インラインや URL での指定も可能

Function Fn::Sub

image.png
- テキストに入力された変数の代わりになることが可能
- テンプレートのフルカスタマイズが可能
- AWS 疑似変数などと組み合わせることが可能

Commands

image.png
- アルファベット順にコマンドを1つずつ実行可能
- 環境変数や作業ディレクトリの設定も可能

Services

image.png

  • インスタンス起動時に紐付いているサービスを起動可能
  • ファイルの変更やパッケージのアップデートがされた際、cfn-init による再起動の確保が可能

Cloudformation ヘルパースクリプトリファレンス

CloudFormation には、スタックの一部として作成する EC2 インスタンスでソフトウェアをインストールしたり、サービスを開始したりするために使用できる Python ヘルパースクリプトが用意されております。そのいくつかを紹介していきます。

cfn-signal

image.png
cfn-signal の特徴は以下となります。

  • cfn-signal は、リソースの構築が無事に完了したことを CloudFormation に伝える為に利用する
  • cfn-signal は、CreationPolicy と共に使用される

図の例の内容は、インスタンスが自動構築されてオンライン上に出るまでのタイムアウトは、最大5分の設定であることが分かります。もし5分経っても cfn-signal から通知が来ない場合は、CloudFormation はロールバックを行います。

cfn-hup

image.png
cfn-hup の特徴は以下となります。

  • cfn-hup は EC2 インスタンスに対して、 Metadata の変更点を15分毎に監視し、変更があれば再構成を行うよう指示することが可能

おわりに

Conditions・Metadata・Init についての説明は以上となります。今回紹介した機能を使って、CloudFormation をより便利に活用していきましょう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0