😸

AWS CloudFormationの概念 (勉強メモ書き)

2024/01/19に公開

できること

AWS CloudFormation は、インフラストラクチャをコードとして扱うことで、AWS およびサードパーティーのリソースをモデル化、プロビジョニング、管理することができます。

インフラをテンプレートとしてコード化して、そのテンプレートのコードをS3やlocalにアップロードして、それをCloudFormationが自動的にプロビジョニングしてくれるらしい

AWS限定の簡易的なterraform的な扱いとして良いか?

概念

テンプレート

CloudFormation テンプレートは JSON または YAML 形式のテキストファイルで表現される
以下のようなものになる

AWSTemplateFormatVersion: 2010-09-09
Description: A sample template
Resources:
  MyEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: ami-0ff8a91507f77f867
      InstanceType: t2.micro
      KeyName: testkey
      BlockDeviceMappings:
        - DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20

これはEC2インスタンスを作成する簡単なサンプル

たとえば、テンプレートには、インスタンスタイプ、AMI ID、ブロックデバイスマッピング、Amazon EC2 キーペアの名前など、Amazon EC2 インスタンスの情報を記述できます。

  • AWSTemplateFormatVersion: バージョン指定
  • Description: 説明
  • Resources: 各インフラリソースの記述が続く
  • MyEC2Instance: 各インフラの名称(今回はEC2)
  • Type: どのインフラリソースを作成するのか
  • Properties: それぞれのインフラの属性を記述していく

例えば、以下のテンプレートを指定してスタックを作成した場合、CloudFormation は ami-0ff8a91507f77f867 AMI ID、t2.microインスタンスタイプ、testkey キーペアの名前、および Amazon EBS ボリュームを持つインスタンスをプロビジョニングします。

スタック

CloudFormationはテンプレートに記述される関連するリソース群をスタックと呼ばれる単一のユニットとして管理する。

仕組み

基本的には

  1. テンプレートのテキストファイルの作成(テキストエディタやデザイナーというツールもあるらしい)
  2. テンプレートをローカルまたはS3に保存
  3. テンプレートファイルを指定して、Cloudformationでスタックを作成
  4. Cloudformationがテンプレートに記述されているAWSのサービスを呼び出して、インフラのリソースをプロビジョニングする
    という流れの模様

変更の場合には

  1. テンプレートファイルの変更
  2. 変更したテンプレートファイルをローカルまたはS3に保存
  3. Cloudformationからテンプレートファイルを指定して変更セットなるものを作成(変更セットの作成方法はここ 変更セットによって、変更箇所が与える影響を確認できるので安全にプロビジョニングができるという寸法らしい)
  4. 変更セットを確認して、CloudFormationが想定通りの変更を行うかをチェック
  5. 変更セットを適用してプロビジョニング(更新が失敗した場合は、変更箇所をロールバックして、正常に稼働していた状態に復元してくれる)
    という流れ

あとがき

テンプレートの詳細がドキュメントに控えてるので、勉強しつつまとめたい

参考

https://aws.amazon.com/jp/cloudformation/
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

Discussion