CloudFormationとは
CloudFormationは、AWSのサービスの一つで、インフラストラクチャをコードとして扱うことができるサービスです。
CloudFormationを使用することで、VPCやサブネット、EC2インスタンスなどのAWSリソースを簡単に作成・管理することができます。
また、CloudFormationでは、作成したリソースをテンプレートとして保存し、再利用することも可能です。
CloudFormationのテンプレートの作成方法
テンプレートの作成方法は3つあります。下記の通りです。
その中今回は3番目の作り方(YAML形式)を使用して作成します。
- クイックスタート
- サンプルテンプレート&テンプレートスニペット
- 自らテンプレートを作成 (JSON/YAML形式でテンプレートをゼロから作成)
事前に準備すること
EC2を作成する前に、EC2インスタンスにSSH接続できるようにするためキーペアファイルを下記の手順通り作成して置く必要です。
■簡単なキーペア作成の方法
①AWS自アカウントにログインしてください。
②Amazon EC2 コンソール行って、ナビゲーションペインの [ネットワークとセキュリティ] で、[キーペア] を選択します。そのあと、[キーペアを作成]ボタンをクリックする。
③以下の図にキーペアの名前を記入後、[キーペアを作成]ボタンをクリックすると作成したキーペアファイルは自動的にダウンロードされます。
※キーペアファイルをローカル環境のSSHディレクトリに保存してください。
VPC内にEC2を作成する時、必要な機能
VPC内にEC2を構築するために、必要な機能は下記となります。
テンプレートの書き方
ファイル名:ec2_template.yaml
AWSTemplateFormatVersion:
"2010-09-09"
Description: Provision EC2
# ------------------------------------------------------------#
# Input Parameters (Key Pair)
# ------------------------------------------------------------#
Parameters:
KeyName:
Type: "AWS::EC2::KeyPair::KeyName"
VPCCIDR:
Description: Please enter the IP range (CIDR notation) for this VPC
Type: String
Default: 172.32.10.0/24 ←CIDR IPは自分の環境と合わせて設定してください。
PublicSubnetCIDR:
Description: Please enter the IP range (CIDR notation) for the public subnet in the VPC
Type: String
Default: 172.32.10.0/24 ←CIDR IPは自分の環境と合わせて設定してください。
Resources:
# ------------------------------------------------------------#
# VPC作成
# ------------------------------------------------------------#
VPC:
Type: "AWS::EC2::VPC"
Properties:
# VPCのCidrblockはパラメータで指定する
CidrBlock: !Ref VPCCIDR
# VPC に対して DNS 解決がサポートされているか
EnableDnsSupport: "true"
# VPC 内に起動されるインスタンスが DNS ホスト名を取得するか
EnableDnsHostnames: "true"
# VPC 内に起動されるインスタンスの許可されているテナンシー
InstanceTenancy: default
Tags:
- Key: Name
Value: "test-vpc"
# InternetGateway Create
InternetGateway:
Type: "AWS::EC2::InternetGateway"
Properties:
Tags:
- Key: Name
Value: "test-igw"
# IGW Attach
InternetGatewayAttachment:
Type: "AWS::EC2::VPCGatewayAttachment"
Properties:
InternetGatewayId: !Ref InternetGateway
VpcId: !Ref VPC
# ------------------------------------------------------------#
# Public Subnet
# ------------------------------------------------------------#
# Public Subnet Create
PublicSubnet:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "ap-northeast-1a"
# VPCのPublic SubnetのCidrblockはパラメータで指定する
CidrBlock: !Ref PublicSubnetCIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: "test-public-subnet"
# ------------------------------------------------------------#
# RouteTable
# ------------------------------------------------------------#
# Public RouteTable Create
PublicRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: "test-public-route"
# ------------------------------------------------------------#
# Routing (ルーティング)
# ------------------------------------------------------------#
PublicRoute:
Type: "AWS::EC2::Route"
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: "0.0.0.0/0"
GatewayId: !Ref InternetGateway
# ------------------------------------------------------------#
# RouteTable Associate
# ------------------------------------------------------------#
PublicSubnetRouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnet
RouteTableId: !Ref PublicRouteTable
# ------------------------------------------------------------#
# WebServerセキュリティグループ作成
# ------------------------------------------------------------#
WebServerSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: test-sg-group
GroupDescription: web server test
VpcId: !Ref VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
#指定のIPから接続できるように設定する
CidrIp: 0.0.0.0/0 ←CIDR IPは自分の環境と合わせて設定してください。
- IpProtocol: tcp
FromPort: 80
ToPort: 80
#指定のIPから接続できるように設定する
CidrIp:0.0.0.0/0 ←CIDR IPは自分の環境と合わせて設定してください。
Tags:
- Key: Name
Value: "test-sg-group"
# ------------------------------------------------------------#
# EC2インスタンス作成
# ------------------------------------------------------------#
# EC2インスタンス
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: ap-northeast-1a
ImageId: ami-0329eac6c5240c99d
InstanceType: t2.micro
KeyName: !Ref KeyName
UserData:
Fn::Base64: |
#!/bin/bash
sudo yum -y update
sudo yum -y install httpd
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
NetworkInterfaces:
# IPv4 アドレスを割り当てるか
- AssociatePublicIpAddress: "true"
# ------------------------------------------------------
# アタッチの順序におけるネットワークインターフェイスの位置。
# ネットワークインターフェイスを指定する場合必須
# ------------------------------------------------------
DeviceIndex: "0"
SubnetId: !Ref PublicSubnet
GroupSet:
- !Ref WebServerSG
Tags:
- Key: Name
Value: "test-server-spd"
※CidrIp:0.0.0.0/0 の場合、EC2にどこからでもアクセスできるようになりますので、セキュリティ的によろしくないです。実際に構築する時、接続したい環境のIPアドレスを指定してください。
テンプレートを使用する手順
1.AWS自アカウントにログインしてください。
2.検索枠に「cloudformation」を記入すると、下記のように表示されます。CloudFormationをクリックすると、CloudFormationパンネルに遷移されます。
3.スタック作成をクリックする。
4.今回は「テンプレートファイルのアップロード」を選択する。作成したec2_template.yamlをアプロードして、「次へ」をクリックする。
5.スタック名記入画面が表示されます。スタック名を記入してください。
※Key Nameのところに、事前に準備したキーペアファイル名を記入してください。後「次へ」 をクリックする。
6.「次へ」をクリックすると、最後に確認画面が表示されて「送信」ボタンが表示されます。
「送信」をクリックすると下記のスタックを作成している画面が表示されます。ステータスのところに CREATE_IN_PROGRESSと表示されることが確認できます。スタック作成完了したら、CREATE_COMPLETEに変わります。それで完成です。
EC2にSSHから接続確認
1.スタック作成完了後に、EC2パンネルに移行してインスタンスのところに作成したEC2インスタンスが表示されることが確認できます。
2.EC2を選択し「接続」をクリックすると、インスタンスにSSHから接続する方法を確認できます。
3.SSH接続するため、ローカル環境のターミナルからsshディレクトリに行って、上記のSSHクライアントの手順通りコメント実行してください。
4.下記ようにターミナルからEC2に接続できることが確認できます。
これではVPC内に簡単にEC2構築作業が以上となります。
初心者向けなので、簡単に構築できるようになれば嬉しいです。
作成した環境を削除したい場合、「CloudFromation」パンネルに行ってスタックを削除すれば全部削除されます。
テスト実施後、不要な場合は、必ず削除してくださいね。
そのままにしてしまうと、EC2の利用およびそれにアタッチするIPv4アドレスやネットワークの流量が課金対象となりますのでご注意下さい。