おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

SAA学習-環境の自動化-CloudFormationの概要

今回のテーマ:CloudFormationの概要

主要サービスの公式資料

AWS CloudFormation: docs.aws.amazon.com

CloudFormation

AWSクラウド環境内の全インフラリソースを記述し、テンプレート化することで展開する環境自動設定サービスとなります。
特徴としては以下のものが挙げられます。

  • プロビジョニングされたリソースの変更・削除が可能
  • JSON/YAMLで記述
  • クロスリージョンとクロスアカウントで管理
  • 直接サポートされてないリソースや機能を利用する場合、カスタムリソースを使用
  • カスタムリソース使用時、スタック作成の一部に独自ロジックを実装

ユースケース

CloudFormationを使用する場合、環境構築を正確に実施する場合や効率的に展開したい時に使用します。
実装時のためのポイントは以下のものが挙げられます。

  • AWSリソースの構築を効率化
  • 開発/テスト/本番環境で利用するインフラの標準化
  • 毎回小野路リソースやプロビジョニング設定を正確に利用
  • ソフトウェアと同じように環境構築を管理

CloudFormationの構成

CloudFormationの構成は、テンプレートで定義された内容を読み込みAWSリソースの集合体であるスタックを作成します。
構成要素のポイントは以下のものがあります。

  • テンプレート
    JSON/YAMLでリソースとパラメーターを定義

  • Cloud Formation
    スタックの作成/変更/削除/エラー検知とロールバックやリソース間の依存関係を自動判定

  • スタック
    AWSリソースの集合体でスタック単位で管理可能。
    スタックを削除すると関連したリソースも削除

CloudFormationの機能

CloudFormationの機能は、テンプレート自体を管理や便利に使うための機能を提供してます。
機能の要素は以下ものが挙げられます。

要素 概要
変更セット ・スタックの更新を行うための概要
・変更による影響度を確認するためのスタック
・スタック変更は直接更新と変更セットの実行で可能
ドリフト ・テンプレートによって展開したAWSリソースを展開語に変更した場合、元テンプレートとの差分を検出するチェック機能
スタックセット ・複数のAWSアカウント複数のリージョンに対しスタックを作成できる機能
スタック間のリソース参照機能 ・被参照添付レートの参照値をエクスポートし、値を抽出
・参照先のテンプレートのインポートによりリソース参照を行うことで、連携したインフラ展開が可能

また、CloudFormationデザイナーを利用することで、視覚的にテンプレートを作成することが可能です。

f:id:In-houseSE:20211115100515p:plain

テンプレート

実装する際のサンプルは以下のようなものがあります。

AWSTemplateFormatVersion: 
Description:
Metadata:
Parameters:
Mappings:
Conditions:
Transform:
Resources:
 FirstVPC:
  Type:AWS::EC2::VPC
  Properies:
   CidrBlock:10.0.0.0/16
   Tags:
    -Key:Name
     Value:FirstVPC
 AttacheGateway:
  Type:AWS::EC2::VPCGatewayAttachement
  Properies:
   DependOn:
    VpcId: !Ref FirstVPC
    InternetGatewayID: !Ref InternetGateway
Outputs:

実装要素の補足説明は以下となります。

項目 補足説明
AWSTemplateFormatVersion テンプレートのバージョンを指定
Description テンプレートの説明
Metadata テンプレートに関する追加情報
Parameters 実行時に必要なパラメーターとしてKeypairやユーザー名を記述。定義するとRef関数で値参照が可能
Mappings 条件パラメーターを指定するためのキーと値のマッピングを記述
Conditions リソース作成時の条件名と条件内容を記述
Transform サーバレスアプリのSAMバージョンを記述
Resources 実際にスタックを生成するリソースとそのプロパティを記述
Outputs スタック構築後に出力される値や出力先を記述

実際に作成するリソースの名称やプロパティの記述となります。

 FirstVPC:
  Type:AWS::EC2::VPC
  Properies:
   CidrBlock:10.0.0.0/16
   Tags:
    -Key:Name
     Value:FirstVPC

任意にユーザー側でリソース間の依存関係を実装する記述となります。

Properies:
   DependOn:

組込関数:RefやFindInMapの活用部分となります。
AWS標準の設定値を参照する場合はRefを使用し、Mappingsで定義した値を参照する場合はFindInMapを使用します。

VpcId: !Ref FirstVPC

今回のテーマ以上です。