3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS初心者】CloudFormationでEC2を作成するテンプレート例

Posted at

📘 はじめに

AWSでEC2を構築する際、マネジメントコンソール上からボタン操作で簡単に構築できます。
しかし、毎回手作業で設定していると環境差異が生まれたり、再構築が面倒になったりするという問題が発生しがちです。
そこで役立つのが CloudFormationによるIaC(Infrastructure as Code) です。

💡 IaC(Infrastructure as Code)とは?

IaC(Infrastructure as Code) とは、インフラ構成をコードとして記述し、自動でプロビジョニング・管理できるようにする手法です。
簡単にいうと、サーバーやネットワークの設定を「手作業」ではなく「コード」で管理する方法 です。

AWS公式では、IaCにより 自動化・標準化 / 設定ミスの防止 / 再現性の高い環境構築 / バージョン管理 / 迅速なデプロイ が可能になる点が強調されています。
:link:AWS公式のIaCの説明はこちら

🧩 CloudFormationとは?

AWS CloudFormation は、 AWS リソースの作成をテンプレート(YAML / JSON)をもとに自動化できるサービス です。
テンプレートに EC2・RDS・VPC などの構成を記述すると、その内容に基づいて リソースの作成・更新・削除を自動的に実行 してくれます。
CloudFormation 自体の利用料金は無料で、テンプレートで作成されたAWSリソースに対してのみ料金が発生します。

CloudFormationの特徴:star2:
  • インフラ管理を自動化できる
  • テンプレートを使い回すことで再現性の高い構築が可能
  • 変更履歴をコードとして管理できる
  • 複雑な依存関係も CloudFormation が処理してくれる
  • スタック単位でリソースをまとめて管理できる

:link:AWS公式のCloudFormationの説明はこちら

:bulb:CloudFormation を使うことで、手作業による設定ミスを防ぎ、
安定したインフラ構築を効率的に行える ようになります。

🖥️ EC2を作成するテンプレート例

AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 Create
Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-xxxxxxxxxxxxxxxxx
      InstanceType: t3.micro
      KeyName: my-ec2-key
      SubnetId: subnet-xxxxxxxxxxxxxxxxx
      SecurityGroupIds:
        - sg-xxxxxxxxxxxxxxxxx
      DisableApiTermination: true
      Tags:
        - Key: Name
          Value: MyEC2Instance

🔍 テンプレートの内容をセクションごとに解説

上記テンプレート例をもとにセクションごとに分けて解説していきます。
 :link:AWS公式のセクションの説明はこちら

🔹 AWSTemplateFormatVersion / Description

AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 Create

AWSTemplateFormatVersion:テンプレートのバージョン(固定)
Description:テンプレートの説明文(任意)

🔹 Resources

CloudFormation テンプレートの中核となる必須セクションです。
Properties の中に EC2 の設定を記述します。
事前にマネジメントコンソール上やCLIにて指定したい AMI / サブネット / セキュリティグループ のIDなどを控えておくとスムーズです:ok_woman_tone1:

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:

🔸 ImageId :AMIの設定

ImageId: ami-xxxxxxxxxxxxxxxxx

「ami-」から始まるAMIのIDを指定すると、指定したAMIでEC2が作成できます。

🔸 InstanceType :インスタンスタイプの設定

InstanceType: t3.micro

指定したいインスタンスタイプを設定できます。
ここでは適当に「t3.micro」としています。
:link:利用可能なインスタンスタイプはこちら

🔸 KeyName :キーペアの設定

KeyName: my-ec2-key

事前にキーペアを作成しておく必要があります。
ここでは適当に「my-ec2-key」としています。

🔸 SubnetId :サブネットの設定

SubnetId: subnet-xxxxxxxxxxxxxxxxx

「subnet-」から始まるサブネットのIDを指定すると、指定したサブネットに配置されます。
マネジメントコンソール上でEC2を作成する際は、「ネットワーク設定」にて設定できます。

🔸 SecurityGroupIds :セキュリティグループの設定

SecurityGroupIds: 
  - sg-xxxxxxxxxxxxxxxxx

「sg-」から始まるセキュリティグループのIDを指定すると、指定したセキュリティグループが適用されます。
マネジメントコンソール上でEC2を作成する際は、「ネットワーク設定」にて設定できます。

SSHやHTTPの許可は、セキュリティグループ側の設定次第です

🔸 DisableApiTermination :終了保護の設定

DisableApiTermination: true

「true」に設定することで、マネジメントコンソールや CLI から誤操作によるEC2の削除を防ぎます。
マネジメントコンソール上でEC2を作成する際は、「高度な詳細」の「終了保護」にて設定できます。

🔸 Tags :タグの設定

Tags:
  - Key: Name
    Value: MyEC2Instance

EC2 にタグを付与します。EBSにも継承されます。
ここでは適当に「MyEC2Instance」としており、マネジメントコンソール上でインスタンス名を確認する際に「MyEC2Instance」と表示されます。
タグを付与することで、インスタンス名として表示されるため、CloudWatch等の監視ツールで識別しやすくなったりなど運用面でのメリットがあります。

CloudFormation利用時の注意点:point_up:

  • スタックを削除すると、作成したリソースも削除 されます
  • テンプレート変更によっては EC2が置き換え(再作成)される場合があります
  • 既存リソースを参照する場合は IDの指定ミス に注意してください

📝 まとめ

CloudFormationは、同じ構成を何度も再現したい場合環境ごとに統一した設定を適用したい場合にとても有効です。
テンプレート化しておくことで、誰が実行しても同じ構成を短時間で構築でき、運用の安定性も高まります:sunny:

一方で、要件がまだ固まっていない段階一度きりの構築 であれば、マネジメントコンソールから作成した方が、パラメータを確認しながら柔軟に調整できるため便利です。

用途に応じて CloudFormation とマネジメントコンソール操作を使い分けることで、より効率的に AWS 環境を構築・運用できるようになると思います。

:pencil2: 参考文献

いちばんやさしい新しいAWSの教本
人気講師が教えるDXを支えるクラウドコンピューティング
 -近藤恭平 (著), 中村哲也 (著)

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?