がじぇ

お金と家電とプログラミングのブログ

【AWS】カオスにならないAWS初期設定①(VPC構築)

こんにちわ

がじぇったー (@hackmylife7) | Twitter

です。

AWSの初期構築時にVPCやRouteTableなどを作成すると思います。 構築自体はドキュメントを見れば簡単にできると思いますが、命名規則を定義した上でリソースを作成しないと秒でカオスな環境に陥ります。 サービスによってはARNが同時に払い出されるリソース(SQS)などはあとで命名をかえることはできません。 今回は自分が行っているインフラ構築手順を書き起こそうと思います。

f:id:gadgeterkun:20200430123257j:plain

TL;DR(要約)

  • それぞれのリソースにつける命名規則ってめちゃくちゃ大事
  • 基本的には環境識別子-リソース名+数字2桁-サービス名でリソースを構築(例: stg-vpc01-gadgeter-blog)

作成するインフラリソース

  • ユースケースとしてモノシリックな三層WEBアプリケーションを作成していきます。
  • 全体のNWセグメントを/18で切り、パブリックサブネットを二つに分け、WEBサーバを配置し、DBをプライベートサブネットに構築します
  • パブリックサブネット→インターネットはインターネットゲートウェイから通信を行い、プライベートサブネットからの通信はNAT GATEWAYを経由し通信します

f:id:gadgeterkun:20200430112741p:plain

VPCの設定

Public Subnetの構築①

Publicサブネットを切ります

  • Subnet名はそのサブネットがパブリックなのか、プライベートなのかが一目でわかることが重要です
  • <環境(dev/stg/prd)>-public/private<数字2桁>-サービス名で作成(stg-public01-gadgeter-blog)で作成します
  • 10.40.20.0/24
  • ap-northeast-1d
  • /24で切ると付与されるIPの数は256個になります

Public Subnetの構築②

二つ目のPublicサブネットを切っていきます

  • Subnet名は<環境(dev/stg/prd)>-public/private<数字2桁>-サービス名で作成(stg-public02-gadgeter-blog)
  • 10.40.10.0/24
  • ap-northeast-1c
  • /24で切ると付与されるIPの数は256個になります

Private Subnetの構築①

DBを配置するプライベートサブネットを作成します

  • Subnet名は<環境(dev/stg/prd)>-public/private<数字2桁>-サービス名で作成(stg-private01-gadgeter-blog)
  • 10.40.0.0/24
  • ap-northeast-1d

インターネットゲートウェイの作成

  • インターネットゲートウェイ名は<環境(dev/stg/prd)>-igw<数字2桁>-gadgeter-blogで作成(stg-igw01-gadgeter-blog)
  • 作成したインターネットゲートウェイを選択し、VPC(stg-vpc01-gadgeter-blog)にアタッチします

ルートテーブルの構築①

  • ルートテーブル名は<環境(dev/stg/prd)>-routetable<数字2桁>-gadgeter-blogで作成(stg-route01-gadgeter-blog)
  • 送信先 0.0.0.0/0 が上記で作成したインターネットゲートウェイにルーティングされるようにする
  • 作成したPublic Subnet×2に関連付ける

NAT GATEWAYの構築

  • プライベートサブネットからインターネットに通信できるようNAT GATEWAYを構築します
  • サービス一覧でVPCを選択しNAT GATEWAYを選択する
  • NAT GATEWAYの作成ボタンをおす
  • Public Subnet(stg-public01-gadgeter-blog)を選択し、EIPは新規に割り当てる
  • タグはName: stg-natgw-public01-gadgeter-blogとする"

ルートテーブルの構築②

  • 送信先 0.0.0.0/0 が上記で作成したNAT GATEWAYにルーティングされるようにする
  • 作成したPrivate Subnetに関連付ける
  • stg-private-route01-gadgeter-blog

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

  • ALB、EC2、DB、管理サーバに付与するSGを作成していきます。
  • 基本的に一眼でわかるよう<環境環境(dev/stg/prd)>-<AWSサービス名>-<用途><数字2桁>-<サービス名>で作成します
  • stg-alb-web01-gadgeter-blog: http/httpsを全許可 f:id:gadgeterkun:20200430115603p:plain

  • stg-ec2-web01-gadgeter-blog: stg-alb-web01-gadgeter-blogからのhttp/https通信、構築メンバのIPからのssh通信のみ許可します

  • stg-ec2-kanri01-gadgeter-blog: 構築メンバのIPからのhttp/https/ssh通信のみ許可します
  • stg-ec2-db01-gadgeter-blog: stg-ec2-web01-gadgeter-blogからの通信のみ許可(ポートは使用しているDBによって変わりますPostgreSQLだったら5432ポートを許可)

お勧めの本

ここら辺の構築手順を技術的にもしっかり説明してあるのが↓の書籍です。
めちゃくちゃ良い本なのでお勧めです。