Application Migration Service (AWS MGN)のステージング環境をCloudFormationで用意する

AWS MGNのためのステージングネットワークは最終的に取り壊すことが多いので、CloudFormation管理にしておくと何かと便利です

こんにちは、AWS事業本部の荒平(@0Air)です。

Application Migration Service (AWS MGN)のステージングをサクッと準備したいけど、何度も作成したり削除するのは面倒だなーと思うことがあります。
CloudFormationで用意すれば楽に管理できます。同じ悩みを持つ方や未来の私に向けて作成してみました。

CloudFormationを初めて触る方は、以下もご参考ください。

実現したいこと

以下の記事のネットワークを一発で用意します。(詳細なルーティングなどを除く)

構成図は上記記事から拝借しました。
図の右側(Staging VPC)に加えて、Public Subnet, Private Subnetを一つずつ用意します。

img

成果物

以下のCloudFormationテンプレートによって、VPC, Internet Gateway, PublicSubnet, PrivateSubnet, VPC Endpoint 4つがデプロイされます。
セキュリティグループやルートテーブル、CIDRなどは環境に応じて設定変更してください。

また、DirectConnectを経由しない場合など、VPC Endpointの作成が不要な場合は、58行目以降を削除します。

Resources:
  MyVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '172.16.0.0/16'  # 環境に合わせて、CIDRブロックを変更してください

  PublicSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId:
        Ref: MyVPC
      CidrBlock: '172.16.1.0/24'  # 環境に合わせて、CIDRブロックを変更してください
      MapPublicIpOnLaunch: true

  InternetGateway:
    Type: 'AWS::EC2::InternetGateway'

  AttachGateway:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      VpcId:
        Ref: MyVPC
      InternetGatewayId:
        Ref: InternetGateway

  PublicRouteTable:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId:
        Ref: MyVPC

  PublicRoute:
    Type: 'AWS::EC2::Route'
    DependsOn: AttachGateway
    Properties:
      RouteTableId:
        Ref: PublicRouteTable
      DestinationCidrBlock: '0.0.0.0/0'
      GatewayId:
        Ref: InternetGateway

  SubnetRouteTableAssociation:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId:
        Ref: PublicSubnet
      RouteTableId:
        Ref: PublicRouteTable

  PrivateSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId:
        Ref: MyVPC
      CidrBlock: '172.16.2.0/24'  # 環境に合わせて、CIDRブロックを変更してください
      MapPublicIpOnLaunch: false

# ここから下はVPC Endpointの作成(不要な場合は削除してください)

  EC2VPInterfaceCEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcId:
        Ref: MyVPC
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.ec2"
      VpcEndpointType: Interface

  MGNVPCInterfaceEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcId:
        Ref: MyVPC
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.mgn"
      VpcEndpointType: Interface

  S3VPCInterfaceEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcId:
        Ref: MyVPC
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.s3"
      VpcEndpointType: Interface

  S3VPCGatewayEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcId:
        Ref: MyVPC
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.s3"
      VpcEndpointType: Gateway
      RouteTableIds:
        - !Ref PublicRouteTable

スタックをデプロイします。
スタック名の論理IDが「CREATE_COMPLETE」のステータスになれば、正常に作成されています。

おわりに

Application Migration Service (AWS MGN)のステージング環境を作成する必要があったため、一発で用意するためのテンプレートを準備しました。
よく利用する定形のネットワークに関しては、こうしてテンプレート化しておくと作業の手間が省けて便利です。

このエントリが誰かの助けになれば幸いです。

それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!