1. はじめに
Application Load Balancerを構築を簡単に構築したので、構築手順と構成をまとめておきます。
2. CloudFormationテンプレート
2.1. VPCの作成
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 192.168.0.0/20
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: 'vpc'
2.2. インターネットゲートウェイの作成
VPCにアタッチするインターネットゲートウェイを作成する
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: 'internet-gateway'
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
2.3. ルートテーブルの作成
パブリックサブネット用のルートテーブルをサブネットごとに作成する。
Az1PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Az1PublicRoute:
Type: AWS::EC2::Route
DependsOn: GymManagementAttachGateway
Properties:
RouteTableId: !Ref Az1PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
Az1PublicSubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref EcsPublicSubnetAZ1
RouteTableId: !Ref Az1PublicRouteTable
Az2PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Az2PublicRoute:
Type: AWS::EC2::Route
DependsOn: GymManagementAttachGateway
Properties:
RouteTableId: !Ref Az2PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
2.4. パブリックサブネットの作成
パブリックサブネットは、ALBの使用上、複数作成する必要あります。
PublicSubnetAZ1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
AvailabilityZone: !Select [0, !GetAZs '']
CidrBlock: 192.168.4.0/24
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: 'ecs-public-subnet1'
PublicSubnetAZ2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
AvailabilityZone: !Select [2, !GetAZs '']
CidrBlock: 192.168.5.0/24
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: 'ecs-public-subnet2'
2.5. セキュリティグループ
ALBには、セキュリティグループをあタッチすることができます。 許可するポートやIPをここで設定します。
AlbSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security Group for Application Load Balancer
VpcId: !Ref VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
CidrIp: 0.0.0.0/0
SecurityGroupEgress:
- IpProtocol: -1
FromPort: -1
ToPort: -1
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: 'alb-sg'
2.6. ALBの作成
ALBを作成します。セキュリティグループとサブネットを指定します。
LoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
# Typeにapplicationを指定するとALBを作成。
Type: application
Name: alb
SecurityGroups:
- !ImportValue AlbSecurityGroup
Subnets:
- !ImportValue PublicSubnetAZ1
- !ImportValue PublicSubnetAZ2
2.7. リスナー
リスナーは指定されたプロトコル/ポートを監視します。 これに合致したリクエストをターゲットグループに転送します。
※ この他にリスナーのルールを設定することによって、URLごとに送信する対象を変更することが可能です。
Listener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !GetAtt TargetGroup.TargetGroupArn
LoadBalancerArn: !Ref LoadBalancer
Port: 8080
Protocol: HTTP
2.8. ターゲットグループ
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
HealthCheckPath: /
Name: alb-target
Port: 8080
Protocol: HTTP
TargetType: ip
HealthCheckProtocol: HTTP
VpcId: !Ref VPC
TargetGroupAttributes:
# ターゲットがターゲットグループから外されてからリクエストを送るのをやめるまでの時間。
- Key: deregistration_delay.timeout_seconds
Value: '300'
※ ECSをターゲットグループに指定する場合は、ECSサービスの作成時にターゲットグループを指定することでターゲットグループに追加できます。 ※ ECSの構築方法は割愛します。