Da Vinci Studio Blog

株式会社 Da Vinci Studio は 2023 年 7 月に株式会社 Zaim と統合し、株式会社くふう AI スタジオになりました

AWS におけるサブネットについておさらい

株式会社くふう AI スタジオ インフラ基盤部 SRE チームの林田です。
今回はAWSを使ってアプリケーションを開発する際、切っても切り離せないサブネットについて改めておさらいしてみようと思います。


突然ですが皆さんパブリックサブネットとプライベートサブネットの違いについて正確に答えられるでしょうか?
また、実はそれ以外のサブネットも存在することをご存知でしょうか?


試しに AWS コンソールから、サブネットの作成を試みてみます。
ここで、わかることは「サブネット作成時」には特にパブリックプライベートかの指定は出来ないということですね~



次に IaC ツールである terraform でサブネットを作る方法も見てみます。

registry.terraform.io

※ ソースを抜粋

resource "aws_subnet" "main" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"

  tags = {
    Name = "Main"
  }
}

ここでも特にパブリックプライベートかの指定は出来ないようです。


じゃあどうすれば?
もしあなたが上司に「パブリックサブネットとプライベートサブネット作っておいて」と言われたらどうしますか?


パブリックサブネットとプライベートサブネットの定義

AWS 公式ドキュメントで公式な定義がないか探してみました。
すると AWS 謹製の IaC ツールである AWS CDK の API リファレンスが参考になりました。

docs.aws.amazon.com


上記リンクの SubnetType という列挙型に定義されている定数にて下記の4種類のサブネットの定義が書かれています。

Name Description
PRIVATE_ISOLATED 分離サブネットはトラフィックをインターネット (この VPC 内) にルーティングしないため、NAT ゲートウェイを必要としません。
PRIVATE_WITH_EGRESS インターネットにルーティングするが、その逆は行わないサブネット。
PRIVATE_WITH_NAT (NAT ゲートウェイ経由で) インターネットにルーティングするサブネットですが、その逆はありません。
PUBLIC インターネットに接続されたサブネット。


つまりパブリックサブネットとは「サブネットからインターネットへの進出、逆にインターネットからサブネットへの進入どちらも可能なサブネット」ということになります。


そうではないサブネットがプライベートサブネットで、図を見る限り3種類あるようです。
PRIVATE_WITH_NAT と PRIVATE_WITH_EGRESS の定義が同じように見えますが、前者は NAT Gateway の利用が前提となっているのでしょうか。

つまりあなたが上司に「プライベートサブネットを作って」と依頼されたら
「それは、PRIVATE_ISOLATED サブネットですか? PRIVATE_WITH_EGRESS サブネットですか?それとも PRIVATE_WITH_NAT サブネットですか?」と聞き返してあげると
「お!こいつサブネットのことが解っているな!」と、思ってもらえるかも知れません(笑)


ちなみに AWS CDK では、ネットワーク構成を自分で実装しなくっても
上記の定数を指定するだけで自動的に定数に合った構成を作ってくれます。


せっかくなので AWS CDK を使ってそれぞれのサブネットをシュッと作ってみてどのようなネットワーク構成が作られるか確認してみます。


4種類のサブネットを作成するプログラムを書いてデプロイしてみます。

    const vpc = new ec2.Vpc(this, 'TheVPC', {
      ipAddresses: ec2.IpAddresses.cidr('10.0.0.0/16'),
      natGateways: 1, 
      subnetConfiguration: [
       {
          cidrMask: 24,
          subnetType: ec2.SubnetType.PUBLIC,
          name: "PUBLIC",
        },
       {
          cidrMask: 24,
          subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
          name: "PRIVATE_ISOLATED",
        },
       {
          cidrMask: 24,
          subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
          name: "PRIVATE_WITH_EGRESS",
        },
       {
          cidrMask: 24,
          subnetType: ec2.SubnetType.PRIVATE_WITH_NAT,
          name: "PRIVATE_WITH_NAT",
        },
      ],
    })


cdk deploy


デプロイが完了するとアベイラビリティゾーンごとにぞろぞろとサブネットが作られました。
それぞれのネットワーク構成(ルートテーブル)を確認していきます。


PUBLIC サブネットのネットワーク構成

至ってシンプルで、インターネットゲートウェイと関連付いていることにより
「サブネットからインターネットへの進出、逆にインターネットからサブネットへの進入どちらも可能なサブネット」になっていることが特徴です。


PRIVATE_ISOLATED サブネットのネットワーク構成

こちらは更にシンプルでした。
local としか通信出来ない文字通り完全に孤立した(ISOLATED)状態になっています。


PRIVATE_WITH_NAT サブネットのネットワーク構成

こちらもそんなに複雑ではなく、その名の通り NAT Gateway を介してインターネットへ進出するようです。

PRIVATE_WITH_EGRESS サブネットのネットワーク構成

意外だったのはこちらで、PRIVATE_WITH_NAT と同様に NAT Gateway を介してインターネットへ進出するようです。
つまり PRIVATE_WITH_NAT と特に違いがありませんでした。
今後 NAT Gateway 以外の進出手段が出てきたら何か変わるのかも知れません。


まとめ

  • パブリックサブネットかプライベートサブネットかはネットワーク構成によって変わる。

  • サブネットには4つの種類がある。


いかがだったでしょうか。
普段なんとなくサブネットを作られている方も、良いおさらいになったのではないかと思います。


くふう AI スタジオでは、働く仲間を募集しています!
興味のある方は こちら からお気軽にお問い合わせ下さい。

open.talentio.com

OpenAI初心者が初心者向けのオススメ勉強サイト3選をやってみた結果

こんにちは、こんばんは、おはようございます! Da Vinci Studio 第2サーバー部の冨田です。

今回はDa Vinci Studioで学んだAI関連の勉強方法についてご紹介します。

最近、Da Vinci StudioではAI関連の話題が盛んになり、サービスへの導入も積極的に行われています。また、AI案件を担当する社員の話を聞くと、AIはエンジニアにとって必須のスキルになる可能性が高いとのことです。

この流れに乗り遅れないよう、他の人たちがどのように勉強しているかを聞いたり、自分自身で学び始めました。

今回は特にエンジニア向けのChatGPT関連の勉強方法についてお話しします。 まだ初心者ですが、AIに興味がある方やAIの知識を学びたいけど、どうやって勉強すればいいかわからないという方の参考になれば幸いです。

続きを読む

ChatGPTを活用しながらのSQLパフォーマンスチューニング

Da Vinci Studio サーバー部の山田です。

ChatGPTのようなAIの活用がかなり話題になっていますね。サービスにAIを取り入れよう!新しいプロダクトを作ろう!と盛り上がっている中ではありますが、既存プロダクトもやはりメンテナンスは必要です。

こちらのブログでは、以前行ったSQLパフォーマンスチューニングでChatGPTを活用してみたらどうなるか、ということで次の2点についてご紹介させていただきます。

  • Window関数を使ったパフォーマンスチューニング
  • 正しいindexの指定によるパフォーマンスチューニング
続きを読む

EKS 素人が DL 数1,000万以上のサービスのクラスターの k8s バージョンアップをやった話【後編】

Da Vinci Studio インフラ基盤部 SRE チームの林田です。
今回は前回わたくしがお送りした

EKS 素人が MAU ウン10万人以上のサービスのクラスターの k8s バージョンアップをやった話【前編】 - Da Vinci Studio Blog

の後編をお送り致します。

続きを読む

Ruby on RailsとLaravelの比較

Da Vinci Studio サーバー部の芳賀です。

サーバーサイドのフレームワークとしてRubyはRuby on Rails、PHPではLaravelが最も有名なものとしてあげられると思います。 これまでの経験ではLaravelを使用することが多かったのですが、最近Ruby on Railsのプロジェクトにジョインしました。 両フレームワークともにModel View Controllerを使用しており実装や処理の流れは似ており、これまで得たノウハウを活用できますが、相違点にはやはり戸惑います。

続きを読む

くふうカンパニーグループ内のエンジニア交流録

どうも。Da Vinci Studio の田淵です。「たぶっちょ」とか「ヨッティ」などと親しみを込めて呼ばれております。

今回は Da Vinci Studio が所属しているくふうカンパニーグループの中でのエンジニア交流の一部をご紹介します。

くふうカンパニーグループ には デザイン領域/テクノロジー領域を担う弊社Da Vinci Studioのほかにも 日常・地域生活領域、住まい領域、結婚領域、投資・事業開発領域 の各領域に事業会社が存在しています。

Da Vinci Studio はグループの各事業成長に寄与するサービス、プロダクトの開発を業務で行っておりグループ内の人材交流は活発な会社といえますが、業務のほかでもゲームイベントや勉強会などで交流を図っています。

そんな中で1月20日に グループ内の 株式会社しずおかオンライン が主催するSOL‐TECH 第3弾 (静岡県内でのオフラインイベント)に参加、交流させて頂いたので簡単なレポートをします。

続きを読む

EKS 素人が DL 数1,000万以上のサービスのクラスターの k8s バージョンアップをやった話【前編】

Da Vinci Studio インフラ基盤部 SRE チームの林田です。
今回は Amazon Elastic Kubernetes Service(※以下EKS)素人の私が、DL 数1,000万以上のサービス Zaim のクラスターの Kubernetes(※以下k8s)バージョンアップという大役を仰せつかり、またどのようにそのミッションをクリアしていったかについて執筆していこうと思います。

docs.aws.amazon.com

続きを読む