2
0

More than 3 years have passed since last update.

【AWS】用語を整理しながら学ぶAWS - part5 Cloud Formation - 1

Last updated at Posted at 2021-03-17

はじめに

この記事では AWS Cloud Tech を通して Cloud Formation を学習して実践していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。

🤔 本題の前にそもそも IaC とは

Infrastructure as a Code の略
要はプログラムの実行環境などをソースコードのようなモノで管理できる仕組み、概念

考え方としてはルータの設定やスイッチの設定をコンフィギュレーションという形で管理することに近い。
ただし、今回扱う IaC はルータやスイッチなどのコンフィギュレーションではなく
より抽象化されたクラウドのインフラストラクチャーをコードという形で表現することと定義します。

実は番外編で

ちょっと前の記事
【AWS】用語を整理しながら学ぶ AWS - 番外編-EC2 上に Rails6 環境を構築(一部 Terraform 利用)」で

Terraform を扱っていましたがこれも IaC のひとつです。
特徴は記事に書きましたので割愛しますが
今回の IaC とは大きく何が違うかを簡単に述べておくと

Cloud Formation は AWS に特化した IaC であることです。

🤔Cloud Formation とは

IaC を利用して AWS のインフラ構築をコードで管理できるサービス
AWS リソースをコードで管理できる。

😍 メリット・Cloud Formation のここがすごい

リージョンに障害発生した時、ダウンタイムありの障害復旧対策として
あらかじめシステムのインフラ構成をコードで管理しておくことで
別のリージョンに同じ構成を復元することができる。

同じインフラ構成をコールドスタンバイで構えることができるので
コスト最適化の側面があるが
コードを AWS で実行する必要がある為、多少の手間が必要である。

(もしかして、このあたりもやりようによっては自動化できるのかな)

🤔 なぜ、Cloud Formation を使うのか

AWS のリソースのみを管理するだけであれば Terraform である必要はないから。
ただし、他のクラウドも視野に入れて検討すると Cloud Formation でインフラ構成を管理するのは厳しい。

形式

形式は YML(YAML Ain't a Markup Language)と呼ばれる形式です。

yaml なのか yml なのかという議論もあるかと思いますが
今回は yml で統一します。

docker や CircleCI,Rails で使われる主流な形式なので覚えておきましょう。

YAML の特徴

パレンティスといったカッコ書きでブロックを表すのではなく
タブでブロックを表す。

😎 百聞は一見に如かず

実際にコードを見よう

AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyVPC2:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.8.0/21
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: MYVPC2fromCF
  subnetName:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      VpcId: !Ref MyVPC2
      CidrBlock: 10.0.8.0/24
      Tags:
        - Key: Name
          Value: subnet1formCF
  secGroupName:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: GroupName-SG
      GroupDescription: GroupDescription-SG
      VpcId: !Ref MyVPC2
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: SGfromCF
Outputs:
  Subnet1:
    Value: !Ref subnetName
    Export:
      Name: Subnet1Name
  SG1:
    Value: !GetAtt secGroupName.GroupId
    Export:
      Name: SG1Name

各項目の説明

テンプレートバージョン

AWS 公式ガイドにはこうある。

AWSTemplateFormatVersion セクション (任意) は、テンプレートの機能を識別します。
最新のテンプレートの形式バージョンは 2010-09-09 であり、現時点で唯一の有効な値です。

最新のテンプレートはどうやら 2010-09-09 とあるので
まぁそういうもんだと思い、固定で書いておく。

Resources

AWS 公式ガイドにはこうある。

必須の Resources セクションでは、スタックに含める AWS リソース
(Amazon EC2 インスタンスや Amazon S3 バケットなど) を宣言します。

スタックとは AWS リソースを定義する場所、格納先のこと
Cloud Formation テンプレートでは必須の項目である。

AWS リソースの定義はここに書く。
今回、例に出すコードで言えば VPC は論理 ID を「MyVPC2」とした。

論理 ID とは

スタック内のリソースを管理する為の識別子のことを指す。

今回のコードの場合は
VPC を「MyVPC2」
サブネットを「subnetName」
セキュリティグループを「secGroupName」とした。

Type

AWS リソースの種類を選択する。
論理 ID が「MyVPC2」の場合は

「AWS::EC2::VPC」とあるので
VPC に関する記述であるということがわかる。

他にも存在するが、AWS のサービスの数だけ存在する為
ユーザーズガイドの「テンプレートリファレンス」を参照

ユーザーズガイド

Properties

前述の Type で指定したリソースに関する設定をここに書く。

リソース Type 毎に設定項目の数が異なるので
VPC を例に挙げて説明する。

AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyVPC2:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.8.0/21
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: MYVPC2fromCF

上記の VPC の場合は

CidrBlock は VPC で利用できるネットワークを定義
EnableDnsSupport は DNS 解決を有効にするかどうかの定義
Tags は その VPC を特定する Key と Key の値を定義する。

コラム

AWS SAA 資格試験 のポイント

~ VPC ネットワーク内で名前解決ができないときは VPC の構成を見なおす~
~ 作成できる最小の VPC は /28 ネットマスク (16 の IPv4 アドレス)
~ 作成できる最大の VPC は /16 ネットマスク (65,536 の IPv4 アドレス) ~

まとめ

単一のリソースは
論理 ID、Type、プロパティの 3 つで成立しており
Resources にまとめられることでスタックとして定義できる。
また、プロパティ内でリソースの細かい設定を行うことで
リソースを変更することができる。

おわり

Outputs の話を書こうと思いましたが
CloudFormation は奥が深いのでいくつかに分けて書きます。

あぁ^ Terraform の知識が役に立つんじゃあ^

次は実際に構成を作っていくゾ

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