EC2 1台のフェイルオーバー構成をCloudFormationで構築する(前編)
- 2020.02.22
- AWS
概要
仕事でCloudFormationを使ってシステム構築する機会があるので事前に勉強。今回構築するのは、以下のような要望に対応する構成。
- 普段は1台のみEC2インスタンスを起動しておきたい
- インスタンスがフェイルした場合は別AZで自動的に復旧したい
イメージは以下。ELBでヘルスチェックを行い、異常時はAutoScalingを使って、現状空になっているサブネットにEC2を構築。今回は、VPCとサブネットを構築するところまで。次回、ELBとAutoScalingを使ってフェイルオーバー構成を構築する箇所を紹介します。
VPC、サブネットを構築
以下、CloudFormationのコード。
AWSTemplateFormatVersion: '2010-09-09'
Description: VPC.
Parameters:
EnvName:
Type: String
Description: Name of an environment. 'dev', 'prod' and any name.
AllowedPattern: ^.*[^0-9]$
ConstraintDescription: Must end with non numberic character.
Outputs:
VPC:
Description: VPC.
Value:
Ref: VPC
Export:
Name:
Fn::Sub: ${EnvName}-VPC
PublicSubnet1:
Description: Public Subnet1
Value:
Ref: PublicSubnet1
Export:
Name:
Fn::Sub: ${EnvName}-PublicSubnet1
PublicSubnet2:
Description: Public Subnet2
Value:
Ref: PublicSubnet2
Export:
Name:
Fn::Sub: ${EnvName}-PublicSubnet2
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: "true"
EnableDnsSupport: "true"
Tags:
- Key: Name
Value:
Fn::Sub: ${EnvName}-vpc
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value:
Fn::Sub: ${EnvName}-igw
InternetGatewayAttach:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId:
Ref: InternetGateway
VpcId:
Ref: VPC
PublicSubnet1:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.0.10.0/24
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value:
Fn::Sub: ${EnvName}-pub1
VpcId:
Ref: VPC
AvailabilityZone: !Select
- 0
- Fn::GetAZs: !Ref AWS::Region
PublicSubnet2:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.0.11.0/24
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value:
Fn::Sub: ${EnvName}-pub2
VpcId:
Ref: VPC
AvailabilityZone: !Select
- 1
- Fn::GetAZs: !Ref AWS::Region
InternetGatewayRouteTable:
Type: AWS::EC2::RouteTable
Properties:
Tags:
- Key: Name
Value:
Fn::Sub: ${EnvName}-igw
VpcId:
Ref: VPC
InternetGatewayRoute:
Type: AWS::EC2::Route
Properties:
DestinationCidrBlock: 0.0.0.0/0
GatewayId:
Ref: InternetGateway
RouteTableId:
Ref: InternetGatewayRouteTable
PublicSubnet1RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: InternetGatewayRouteTable
SubnetId:
Ref: PublicSubnet1
PublicSubnet2RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: InternetGatewayRouteTable
SubnetId:
Ref: PublicSubnet2
VPC、各サブネットのIDはELB、AutoScalingを作成する際に必要なのでOutputsで出力しておきます。また、PublicSubnet1、PublicSubnet2それぞれのAvailabilityZoneを指定することで、2つのAZにサブネットを構築しています。
本当はもう少し解説しようと思っていましたが、遅い時間なのでまた別の機会に^^
-
前の記事
SQSをトリガーにLambdaを起動(Serverless Framework) 2019.11.17
-
次の記事
Material-UI Pickersで日本語化・フォーマット変更する 2020.03.20