📝

AWSのネットワーク構成図を作成する

2023/06/25に公開

課題

・客先から以下の要望を満たすネットワーク設計の提出を求められている。下記の要件があった想定でAWSを使用したネットワークの構成図を作成する。

要件

  • VPCは本番環境用に2つ、共通データ連携用に1つ必要
  • 3つのVPCはそれぞれ相互にデータを送受信するルートが必要
  • 共通データ連携用VPCは自社データセンターのデータを送受信する
  • データセンターで取り扱うデータは重要情報のため、専用線で費用対効果の高い設計が望ましい
  • 今後数年はVPCが増加する可能性は無い

解説

VPCは本番環境用に2つ、共通データ連携用に1つ必要

  • 利用検討するAWSリソース:VPC
  • 作成するVPCの個数:3

3つのVPCはそれぞれ相互にデータを送受信するルートが必要

  • 利用検討するAWSリソース:
    • VPCピアリング
    • Transit Gateway
  • 理由:異なるVPC間でのネットワーク接続を可能にする要件を満たすため

共通データ連携用VPCは自社データセンターのデータを送受信する

  • 利用検討するAWSリソース:
    • AWS VPN
    • AWS Direct Connect
  • 理由:自社のネットワークとAWSとの間に安全な通信をするため

データセンターで取り扱うデータは重要情報のため、専用線で費用対効果の高い設計が望ましい

  • 利用検討するAWSリソース:AWS Direct Connect
  • 理由:
    • セキュリティの要件が高いため

今後数年はVPCが増加する可能性は無い

  • 利用検討するAWSリソース:VPCピアリング
  • 理由:数年でVPCが増える可能性が低いため、またVPCの数が3個と少ないため管理が煩雑になるリスクが少ないため

設計

VPCはそれぞれ相互にデータを送受信するルートを実装する方法としてVPCピアリングとTransit Gatewayがある。
しかし今回の要件で今後数年はVPCが増加する可能性は無いことが判明していること、VPCが3個と管理するVPCの数が比較的少ないためVPCピアリングを使用する。
上記の理由から下記AWSリソースを使いネットワーク構成図を作成する

  • VPN
  • Internet Gateway
  • VPCピアリング
  • AWS Direct Connect

通信経路

  1. ユーザーからの通信はInternet Gatewayを通りPublic Subnetに渡る
  2. 共通データ連携用のVPCはDirect Connectを通ってデータセンターと通信する
  3. 各VPCが相互に通信するためにVPCピアリングを3つ作成する

実際の構成図

構成図

構成図の作成

pythonのライブラリdiagramsを使用して作成

from diagrams import Diagram, Cluster, Edge
from diagrams.aws.network import VPC, PrivateSubnet, PublicSubnet, DirectConnect, VPCPeering, InternetGateway
from diagrams.onprem.network import Internet
from diagrams.onprem.client import Users
from diagrams.onprem.compute import Server

graph_attr = {
    "fontsize": "20"
}

with Diagram("VPC Architecture Issue3", show=True, graph_attr=graph_attr, outformat="png"):
    users_01 = Users("ユーザー")
    datacenter = Server("データセンター")
    direct_connect = DirectConnect("Direct Connect")

    with Cluster("AWS Cloud"):
        internet_gateway = InternetGateway("Internet Gateway")

        with Cluster("VPC for Production 1\n10.0.0.0/16"):
            vpc_prod_1 = VPC("VPC - Production 1")
            with Cluster("Subnets"):
                public_subnet_prod_1 = PublicSubnet("Public Subnet\n10.0.1.0/24")
                private_subnet_prod_1 = PrivateSubnet("Private Subnet\n10.0.2.0/24")

        with Cluster("VPC for Production 2\n10.1.0.0/16"):
            vpc_prod_2 = VPC("VPC - Production 2")
            with Cluster("Subnets"):
                public_subnet_prod_2 = PublicSubnet("Public Subnet\n10.1.1.0/24")
                private_subnet_prod_2 = PrivateSubnet("Private Subnet\n10.1.2.0/24")

        with Cluster("VPC for Data Integration\n10.2.0.0/16"):
            vpc_data_integration = VPC("VPC - Data Integration")
            with Cluster("Subnets"):
                public_subnet_data_integration = PublicSubnet("Public Subnet\n10.2.1.0/24")
                private_subnet_data_integration = PrivateSubnet("Private Subnet\n10.2.2.0/24")

        # Connect nodes within AWS Cloud
        vpc_peering_1 = VPCPeering("VPC Peering 1")
        vpc_peering_2 = VPCPeering("VPC Peering 2")
        vpc_peering_3 = VPCPeering("VPC Peering 3")

        vpc_prod_1 - Edge(color="brown", style="dashed") - vpc_peering_1 - Edge(color="brown", style="dashed") -  vpc_prod_2
        vpc_prod_1 - Edge(color="brown", style="dashed") - vpc_peering_2 - Edge(color="brown", style="dashed") -  vpc_data_integration
        vpc_prod_2 - Edge(color="brown", style="dashed") - vpc_peering_3 - Edge(color="brown", style="dashed") -  vpc_data_integration

    # Connect nodes outside of AWS Cloud
    users_01 - internet_gateway - public_subnet_prod_1
    users_01 - internet_gateway - public_subnet_prod_2
    datacenter - direct_connect - vpc_data_integration

参考記事

GitHubで編集を提案

Discussion