【AWS】Direct Connectと接続するためのリソースをCloudFormationで作成する

本記事では、Direct Connectと接続するためのリソースをCloudFormationで作成する方法について解説する。

dashboard

本記事では、Direct Connectと接続するためのリソースとして、DXGW(Direct Connect ゲートウェイ)とVGW(仮想プライベートゲートウェイ)をCloudFormationで作成する方法について解説する。おまけとしてNLBの作成についても説明する。

前提

以下のような構成図を想定する。

オンプレシステム → DX → DXGW → VGW → NLB …

VGWは各VPCにつき一つ必要だが、DXGWはVGWの数だけ必要というわけではない。

今回は固定IPとしてNLBが必要だったため、NLBまでを作成対象とする。NLBの後段にはALB、EC2があるような構成とする。

説明

はじめに、DXGWはCloudFormationでは現状作成できないため、手動で作成する。その他のリソースはCloudFormationで作成する。

NLB

NLBターゲットグループについて
  • NLBターゲットグループ → NLB → NLBリスナーの順番で必要なリソースを作成する。
  • 後段のALBをターゲットとする。ALBをターゲットとして登録する場合、プロトコルはTCPのみ利用可能とする。
NLB
  • インターネットに公開するわけではないので、スキーマはInternalとする。
  • 固定IPを付与するために、PrivateIPv4AddressにIPを指定する。
  • NLBの削除保護を有効化するために、deletion_protection.enabledタグをTrueにする。

CloudFormationテンプレート

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  System:
    Type: String
    Default: System-name
  Env:
    Type: String
    Default: Env-Name
  Region:
    Type: String
    Default: Region-Name
  VPCID:
    Type: String
    Default: vpc-xxxxxxxxxx
  SubnetId:
    Type: String
    Default: subnet-xxxxxxxxx
  ALB:
    Type: String
    Default: ALB arn
  SecurityGroup:
    Type: String
    Default: sg-xxxxxxxxx
  PrivateIPv4Address:
    Type: String
    Default: IP

Resources:
  NLBTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      VpcId: !Sub ${VpcId}
      Name: !Sub "${System}-${Env}-${Region}-nlb-target-group"
      Protocol: TCP
      Port: 443
      HealthCheckPath: /
      HealthCheckProtocol: HTTPS
      Targets:
        - Id: !Sub ${ALB}
          Port: 443
      TargetType: alb

  NLB:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: !Sub "${System}-${Env}-${Region}-nlb"
      Type: network
      Scheme: internal
      SecurityGroups:
        - !Sub ${SecurityGroup}
      SubnetMappings:
        - SubnetId: !Sub ${SubnetId}
          PrivateIPv4Address: !Sub ${PrivateIPv4Address}
      LoadBalancerAttributes:
        - Key: "deletion_protection.enabled"
          Value: true

  NLBListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
        - TargetGroupArn: !Ref NLBTargetGroup
          Type: forward
      LoadBalancerArn: !Ref NLB
      Port: 443
      Protocol: TCP

VGW

VGW

  • ASNは64512~65534の中から選択する必要がある。DXGWのASNを64512にするため、64513を選択する。

VPC接続

  • VGW作成後にVPCと接続を行うため、DependsOnを挿入する。

ルート伝播

  • ルート伝播については、AWSのルートテーブル伝播についてでとてもわかりやすくまとめられている。簡単に説明すると以下の通り。
  • ルート伝播をオンにすると、ルートテーブルにおいて動的にルートが追加されるようになる。オンプレシステムがDXに接続された際に、動的にルートが接続されるように設定する。

CloudFormationテンプレート

AWSTemplateFormatVersion: '2010-09-09'

Parameters:
  System:
    Type: String
    Default: System-Name
  Env:
    Type: String
    Default: Env-Name
  Region:
    Type: String
    Default: Region-Name
  AmazonSideAsn:
    Type: Number
    Description: AmazonSideASN
    Default: 64513
  VpcId:
    Type: String
    Description: vpc-xxxxxxxx
  RouteTableID:
    Type: String
    Description: RouteTableID

Resources:
  VGW:
    Type: AWS::EC2::VPNGateway
    Properties:
      AmazonSideAsn: !Ref 'AmazonSideAsn'
      Type: ipsec.1
      Tags:
        - Key: Name
          Value: !Sub "${System}-${Env}-${Region}-vgw"

  AttachVPNGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    DependsOn: VGW
    Properties:
      VpcId: !Ref 'VpcId'
      VpnGatewayId: !Ref 'VGW'

  EnableVGWPropagation:
    Type: AWS::EC2::VPNGatewayRoutePropagation
    DependsOn: AttachVPNGateway
    Properties:
      RouteTableIds:
        - !Ref 'RouteTableID'
      VpnGatewayId: !Ref 'VGW'

DXGW

DXGW

  • Direct Connectの左ペインから、『Direct Connect ゲートウェイ』 → 『Direct Connect ゲートウェイの作成』をクリックする。
  • 名前とASNを設定する(ASNは64512~65534の中から選択する)。

VGWとの関連付け

  • Direct Connectの左ペインから、『仮想プライベートゲートウェイ』 → 『Direct Connect ゲートウェイの関連付け』をクリックする。
  • 上で作成したDXGWを選択する。