0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】完成したポートフォリオをAWSにデプロイするpart2(VPC,サブネット,セキュリティグループ)

Posted at

はじめに

こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
ついにMVPが完成し、あとはデプロイするだけ!というところまで来ました。
今回は、VPC,サブネット,セキュリティグループの設定手順を紹介します。
なお、今回はVPCやサブネットなどの見られてはあまりよろしくない箇所がかなりあるのでスクショは少なめです。

前提条件

  • 今回はReact × Rails × Docker × PostgreSQLの構成です
  • AWSアカウントを持っていること
  • ドメインを取得していること(私はお名前.comで取得しました)
  • VPC、サブネット、セキュリティグループ、RDSの基礎知識があること
  • 公開リージョンは東京リージョン(ap-northeast-1)
  • 著者は2025年10月11日に記事を書いています

現時点で想定している構成図は以下の通りです。なおこれから若干変更する可能性がありますのでご了承ください

infra.png

1. VPCの設定

VPCやサブネットの話はややこしいので、困ったら上記のインフラ構成図を見返して進んでください。
VPCとは、Virtual Private Cloudの略で、AWS上に論理的に分離された仮想ネットワークを作成するサービスです。
VPCを使用することで、ネットワークの設定や管理を柔軟に行うことができます。

では早速VPCを作成していきます。リージョンが東京リージョンであることを確認してください。
画像7.png

  1. 「VPCを作成」をクリックします。
  2. 「VPCのみ」を選択します。
  3. 名前タグに任意の名前を入力します。(例: yourappname-vpcとしました)
  4. IPv4 CIDR の手動入力で「10.0.0.0/16」と入力します。なぜなら、/16は65,536個のIPアドレスを提供し、将来的な拡張性を考慮して十分なアドレス空間を確保できるからです。
  5. それ以外はデフォルト変更せず「VPCを作成」をクリックします。

これでVPCの作成が完了しました。
ちなみに/16にする理由がわからない方はIPアドレスのCIDR表記について記事を以前まとめたので、そちらを参照してみてください

2. サブネットの設定

続いてサブネットを作成していきます。サブネットとは、VPC内でIPアドレスの範囲を分割し、リソースを配置するための論理的な区画です。
運用のことを考えると、2つ以上のサブネットを作成し冗長性を持たせることがとても重要です。
今回は個人開発でサービス利用者の数も少ないので、1つのサブネット(パブリックサブネット、プライベートサブネット)を作成します。

画像8.png

1. パブリックサブネットの作成

  1. 左のメニューから「サブネット」をクリックし、「サブネットを作成」をクリックします。
  2. 「VPCを選択」から先ほど作成したVPCを選択します。
  3. サブネットの名前タグに任意の名前を入力します。(例: yourappname-public-subnetとしました)
  4. アベイラビリティーゾーンは「ap-northeast-1a」を選択します。
  5. IPv4 サブネット CIDR ブロックに「10.0.1.0/24」と入力します。
  6. 「サブネットを作成」をクリックします。

このパブリックサブネットには、ALBやECSを配置する予定です。
あと、のちにFargateにIPアドレスを自動割り当てする設定をするので、サブネットの詳細から「自動割り当てパブリックIP」を有効にしておきます。

  1. 先ほど作成したパブリックサブネットを選択し、「アクション」→「サブネットの設定を編集」をクリックします。
  2. 「パブリック IPv4 アドレスの自動割り当てを有効化」にチェックを入れて保存します
    プライベートサブネットではなくパブリックサブネットであることを確認してください

(追記)
ALBを設定する際に最低2つのAZを選択する必要があるので、もう1つのパブリックサブネットを上記同様に作成してください。(例: yourappname-public-subnet-1c, ap-northeast-1c)
今回はシングルAZ構成の予定なので、自動割り当てパブリックIPは無効のままでOKです。(ALBを作成する際に2つ目のパブリックサブネットを選択するためだけに作成します)

同様に、プライベートサブネットも作成します。

2. プライベートサブネットの作成

さきほどと違う点は以下の点です

  • 名前タグに「yourappname-private-subnet」と入力
  • IPv4 サブネット CIDR ブロックに「10.0.2.0/24」と入力します。

(追記)
RDSを配置するためにもう1つのプライベートサブネットを上記同様に作成してください。(例: yourappname-private-subnet-1c, ap-northeast-1c)

3. インターネットゲートウェイの設定

インターネットゲートウェイは、VPCとインターネット間の通信を可能にするためのゲートウェイです。

  1. 左のメニューから「インターネットゲートウェイ」をクリック
  2. 「インターネットゲートウェイを作成」をクリックします。
  3. 名前タグに任意の名前を入力します。(例: yourappname-igw)
  4. 「インターネットゲートウェイを作成」をクリックします。

これでインターネットゲートウェイの作成が完了しました。次に、作成したインターネットゲートウェイをVPCにアタッチします。

  1. 作成したインターネットゲートウェイを選択し、「アクション」→「VPCにアタッチ」をクリックします。
  2. 先ほど作成したVPCを選択し、「アタッチ」をクリックします。

4. ルートテーブルの設定

ルートテーブルは、VPC内で通信の行き先(ルート)を決める地図みたいなものです。
まずはルートテーブルを作成します。

  1. 左のメニューから「ルートテーブル」をクリックし、「ルートテーブルを作成」をクリックします。
  2. 名前タグに任意の名前を入力します。(例: yourappname-public-rt)
  3. VPCを先ほど作成したVPCに設定します。
  4. 「ルートテーブルを作成」をクリックします。

これでvpc に紐づいたルートテーブルが作成されました。
次に、ルートテーブルにルートを追加します。

まず抑えておく概念として

  • Destination は「どこへ行きたい通信なのか(宛先のIP範囲)」です
  • Target は「その通信をどこに送るか(経路の出口)」です

以下はこれから設定する必要があるルートの一覧です。

送信先 (Destination) ターゲット (Target) 説明
10.0.0.0/16 local VPC内の通信(デフォルトで自動設定)
0.0.0.0/0 igw-xxxxxxx インターネット全体への通信(IGW経由)

1つ目のルートはデフォルトで設定されています。
これだけだとイメージがわかないと思うのでもう少し詳しく説明します。

1つ目のルートは、VPC内の通信を許可するためのものです。10.0.0.0/16という宛先は、VPC内の全てのIPアドレスを指します。ターゲットはlocalとなっています。
ですので1つ目のルートの意味は、「VPC内の通信であれば、すべてを許可する」ということです。

ですが、これだけだとインターネットに接続できません。
そこで2つ目のルートを追加します。
2つ目のルートは、インターネット全体への通信を許可するためのものです。0.0.0.0/0という宛先は、全てのIPアドレスを指します。ターゲットは先ほど作成したインターネットゲートウェイ(IGW)となります。
つまり、「インターネット全体への通信は、IGWを経由して行う」という意味になります。

これでルートテーブルの概要がわかったと思うので、実際にルートを追加していきます。

  1. 先ほど作成したルートテーブルを選択し、「ルート」タブをクリックします。
  2. 「ルートの編集」をクリックし、「ルートの追加」をクリックします。
  3. 送信先に「0.0.0.0/0」と入力し、ターゲットに先ほど作成したインターネットゲートウェイを選択します。

これでルートテーブルの設定が完了しました。
先ほども言った通りルートテーブルはVPC内で通信の行き先(ルート)を決める地図みたいなものです。
先ほど作成したサブネットにはすでに作成されていたデフォルトのルートテーブルが割り当てられているので、今作ったVPCのルートテーブルを割り当てる必要があります

  1. 左のタブから「サブネット」 をクリック
  2. 先ほど作成したパブリックサブネットを選択し、下にあるルートテーブルタブを選択する
  3. 「ルートテーブルの関連付けを編集」をクリックし、ルートテーブルIDのところで先ほど作成したルートテーブルを割り当てます
  4. プライベートサブネットでも同様に行ってください

以上でルートテーブルの設定は完了です

5. セキュリティグループの作成

セキュリティグループとはどんな通信を許可するかを決めるルールの集まりです
今回はALB(Application load balancer)とApp用(ECS), DB用(RDS)の3つのセキュリティグループを決めます
その前にセキュリティグループにはインバウンドルールとアウトバウンドルールがあります

ALBのセキュリティグループについて例を挙げてみます。Route53やIGWは省略していますが本質的には以下の通りです。

ユーザー → ALB(ここにALBのSGを取り付ける) → ECS
# ユーザー → ALB がインバウンドルール
# ALB → ECS がアウトバウンドルール
  • インバウンドルールはALBが許可する通信の種類を指定すること(HTTP,HTTPS)
  • アウトバウンドルールはALBがECSなどに送る通信の種類(port番号を指定)を指定することです

一方アプリ用(ECS用)配下の通りです

ALB → ECS(ここにアプリ用のSGを取り付ける) → RDS
                                       → ECS Exec
                                       → Secrets Manager
                                       → CloudWatch Logs
# ALB → ECS がインバウンドルール
# ECS → RDS, ECS Exec, Secrets Manager, CloudWatch Logs など がアウトバウンドルール

ECSの各種設定は個人が使いたいサービスに依存すると思いますので、自分で判断されるのがよいかと思います
ECS Exec, Secrets Manager, CloudWatch Logsなどのポート番号は443(HTTPS),RDSは使っているDBに依存します

最後にDB用(RDS用)のセキュリティグループです

ECS → RDS
# ECS → RDS がインバウンドルール

DB用のセキュリティグループはECSからの通信のみを許可するように設定します。

では早速SGを作成していきます

1. ALB のセキュリティグループ

  1. 左タブから「セキュリティグループ」をクリックします。
  2. 「セキュリティグループを作成」をクリックします。
  3. セキュリティグループ名 を入力(例: yourappname-sg-alb)
  4. VPCは先ほど作成したVPCを選択
  5. 説明には任意の説明を入力(例: alb security group)
  6. インバウンドルールを追加(HTTP,HTTPS)
    • タイプ: HTTP
    • プロトコル: TCP
    • ポート範囲: 80,443
    • ソース: カスタム, 0.0.0.0/0
  7. アウトバウンドはいったんスキップ、後で作成したアプリ用(ECS用)のセキュリティグループを指定します
  8. 「セキュリティグループを作成」をクリックします。

2. アプリ用(ECS用)のセキュリティグループ

  1. 左タブから「セキュリティグループ」をクリックします。
  2. 「セキュリティグループを作成」をクリックします。
  3. セキュリティグループ名 を入力(例: yourappname-sg-app)
  4. VPCは先ほど作成したVPCを選択
  5. 説明には任意の説明を入力(例: app security group)
  6. インバウンドルールを追加(ALBのセキュリティグループを指定)
    • タイプ: カスタムTCP
    • プロトコル: TCP
    • ポート範囲: 80,443
    • ソース: セキュリティグループ, 先ほど作成したALBのセキュリティグループを選択
  7. アウトバウンドはいったんスキップして、後で作成したDB用(RDS用)のセキュリティグループを指定します。
  8. もしECS Exec, Secrets Manager, CloudWatch Logsなどを使う場合は、アウトバウンドルールに443(HTTPS)を追加してください
  9. 「セキュリティグループを作成」をクリックします。

これでALBのアウトバンドにアプリ用(ECS用)のセキュリティグループを指定できます

  1. 先ほど作成したALBのセキュリティグループを選択し、「アウトバウンドルール」タブをクリックします。
  2. 「アウトバウンドのルールの編集」をクリックし、アウトバウンドルールにアプリ用(ECS用)のセキュリティグループを追加します。
  3. 「ルールの追加」をクリックし、以下の設定を行います。
    • タイプ: カスタムTCP
    • プロトコル: TCP
    • ポート範囲: バックエンドで使用するポート番号(railsなら3000, Reactなら5173など)
    • 宛先: セキュリティグループ, 先ほど作成したアプリ用(ECS用)のセキュリティグループを選択
  4. 「ルールを保存」をクリックします。

3. DB用(RDS用)のセキュリティグループ

  1. 左タブから「セキュリティグループ」をクリックします。
  2. 「セキュリティグループを作成」をクリックします。
  3. セキュリティグループ名 を入力(例: yourappname-sg-db)
  4. VPCは先ほど作成したVPCを選択
  5. 説明には任意の説明を入力(例: db security group)
  6. インバウンドルールを追加(アプリ用(ECS用)のセキュリティグループを指定)
    • タイプ: カスタムTCP
    • プロトコル: TCP
    • ポート範囲: DBで使用するポート番号(PostgreSQLなら5432, MySQLなら3306など)
    • ソース: セキュリティグループ, 先ほど作成したアプリ用(ECS用)のセキュリティグループを選択
  7. アウトバウンドはデフォルトのまま(すべての通信を許可)でOKです
  8. 「セキュリティグループを作成」をクリックします。

上記と同様にアプリ用(ECS用)のアウトバウンドにDB用(RDS用)のセキュリティグループを指定します

  1. 先ほど作成したアプリ用(ECS用)のセキュリティグループを選択し、「アウトバウンドルール」タブをクリックします。
  2. 「アウトバウンドのルールの編集」をクリックし、アウトバウンドルールにDB用(RDS用)のセキュリティグループを追加します。
  3. 「ルールの追加」をクリックし、以下の設定を行います。
    • タイプ: カスタムTCP
    • プロトコル: TCP
    • ポート範囲: DBで使用するポート番号(PostgreSQLなら5432, MySQLなら3306など)
    • 宛先: セキュリティグループ, 先ほど作成したDB用(RDS用)のセキュリティグループを選択
  4. 「ルールを保存」をクリックします。

これで3つのセキュリティグループの作成が完了しました

まとめ

今回はVPC,サブネット,セキュリティグループの設定手順を紹介しました。
次はSES(Simple Email Service)の設定手順を紹介します。
AWSに申請をする必要があるのでSESは早めに着手することをお勧めします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?