■VPC
※仮想ネットワーク(Virtual Private Cloud)を構築できる(リージョンに対して作成)
※後からの構成変更は大変なので、最初によく検討してから構築する
以前は一度作ったものは一切変更できなかったが、今は条件付きで後から拡張できるようになっているみたい(未検証)
Amazon VPCを「これでもか!」というくらい丁寧に解説 - Qiita
https://qiita.com/c60evaporator/items/2f24d4796202e8b06a77
フロントエンドエンジニアですが、AWS 始めてみます
http://tech.recruit-mp.co.jp/infrastructure/retry-aws-minimum-vpc-server-environment/
カジュアルにVPC作った結果がこれだよ!
http://www.slideshare.net/Yuryu/aws-casual-talks-1-vpc
[新機能] VPCのCIDRが拡張可能になりました!IPアドレス範囲を追加可能です! | Developers.IO
https://dev.classmethod.jp/articles/expanding-vpc-cidr/
Amazon VPCを使ったミニマム構成のサーバ環境を構築する
http://dev.classmethod.jp/cloud/aws/minimum-amazon-vpc-server-environment/
VPC とサブネット
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Subnets.html
デフォルト VPC とデフォルトサブネット
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/default-vpc.html
Amazon VPC設計時に気をつけたい基本の5のこと
https://dev.classmethod.jp/cloud/aws/amazon-vpc-5-tips/
AWSのAZの割り当ては、アカウントごとに違うという話 - プログラマでありたい
https://blog.takuros.net/entry/2019/08/26/090220
■リージョンとアベイラビリティゾーンとサブネット
リージョン内にVPC(仮想ネットワーク)を作成し、
その中にサブネット(サブネットワーク)を作成し、
その中にアベイラビリティゾーンを作成し、
その中でサーバの設置などを行う
作業前に、対象が「東京リージョン」であることを確認する(意図的なら他のリージョンで作業するのも問題ない)
2021年3月に、大阪リージョンが追加された。これにより、日本国内のみでマルチリージョンを実現できる
AWS 大阪リージョン - 2021年3月 誕生! | AWS (アマゾン ウェブ サービス)
https://aws.amazon.com/jp/local/osaka-region/
東京リージョンに新たにアベイラビリティゾーンを追加
https://aws.amazon.com/jp/blogs/news/the-fourth-new-availability-zone-tokyo-region/
なお、複数のアベイラビリティゾーンにサーバを配置する構成を「マルチAZ」と呼ぶ
基本的にマルチAZ構成にしておくことが推奨される
■料金
VPC自体は無料で利用できる
よくある質問 - Amazon VPC | AWS
https://aws.amazon.com/jp/vpc/faqs/
「VPC 自体の作成・使用には追加料金はかかりません。
Amazon EC2 などの他のアマゾン ウェブ サービスの利用料金が、データ転送料金を含めこれらのリソースに指定レートで適用されます。」
AWS VPCの料金 | TechCrowd
https://www.techcrowd.jp/datalink/fee-2/
VPC自体は無料で、VPNやNATを使う場合には利用可能時間をもとに課金されるとのこと。(公式のスライドあり。)
■プライベートIPアドレスの範囲
プライベートIPアドレスには
10.0.0.0 〜 10.255.255.255 ... 大規模ネットワーク向け
172.16.0.0 〜 172.32.255.255 ... 中規模ネットワーク向け
192.168.0.0 〜 192.168.255.255 ... 小規模ネットワーク向け
が使える
ただし 192.168.0.1 など、AWS側で予約されていて使えないアドレスがあるので注意
127.0.0.1 〜 127.0.0.254 はローカルループバックアドレス(自分自身を表す)なので、これも使えない
ネットワーク内のIPアドレス
http://www.pc-master.jp/internet/private-ip-address.html
AWSのVPCの予約IPについての勘違い
https://www.infoscoop.org/blogjp/2015/09/11/awsip/
Amazon VPC IPアドレス設計レシピ
http://dev.classmethod.jp/cloud/aws/vpc-cidr/
0から始めるVPC
https://www.slideshare.net/classmethod/0vpc
※デフォルトVPCのプライベートIPアドレスは 172.31.0.0 になっている
※自分でVPCを作る場合、可能なかぎり大きなサイズで作っておくのが無難
具体的には 10.0.0.0/16 で作っておくといい
■ネットワーク構成例
一般的なものとして、以下のような構成がある
基本的には「1」の構成をもとにすればいい
「2」の構成にするが、「4」に変更することを想定して「Public」「Protected」の2階層にする…というのも有効(むしろ1よりも柔軟でいいかも)
本来Trusted(Private)に置くべきサーバでも、監視のためにDMZ(Public)に置いたりすることはある
その場合、セキュリティグループなどでアクセス制限を行う
1
DMZ ... Webサーバなど配置用
Trusted ... DBサーバなど配置用
2
Public ... Webサーバなど配置用
Private ... DBサーバなど配置用
3
DMZ ... Webサーバなど配置用
Operation ... 踏み台サーバ、デプロイサーバ、バッチサーバなど配置用
Trusted ... DBサーバなど配置用
4
Public ... Webサーバなど配置用
Protected ... DBサーバなど配置用
Private ... 外部と通信させない領域
5
Frontend ... ロードバランサー、直接公開のWebサーバなど配置用
Application ... ロードバランサー配下のWebサーバ、バッチサーバなど配置用
Datastore ... DBサーバなど配置用
【AWS】VPC環境の作成ノウハウをまとめた社内向け資料を公開してみる | Developers.IO
https://dev.classmethod.jp/server-side/network/vpc-knowhow/
ネットワークやサーバなどを作成する際、名前タグを付けることができる
適当に付けても動作上は問題ないが、最初にルールを決めて名前を付けておくといい
以降の解説では例えばVPCの名前タグは「Develop-VPC」としているが、これはあくまでも一例
「xxsystem-dev-vpc」のように「案件名-環境-vpc」と付けるなども有効
弊社で使っているAWSリソースの命名規則を紹介します | DevelopersIO
https://dev.classmethod.jp/cloud/aws/aws-name-rule/
■VPCの作成
AWS → VPC → VPC(左メニュー) → VPCの作成
名前タグ : Develop-VPC
IPv4 CIDR ブロック : 10.0.0.0/16
IPv6 CIDR ブロック : IPv6 CIDR ブロックなし
テナンシー : デフォルト
と設定して作成
2つ目を作成する場合でも、IPv4 CIDR blockは常に 10.0.0.0/16 でいい
(後に記載するサブネットのように、10.1.0.0/16 とずらす必要は無い)
■サブネットの作成
サブネット(左メニュー) → サブネットの作成
名前タグ VPC アベイラビリティゾーン IPv4 CIDR ブロック
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Develop-DMZ-A Develop-VPC ap-northeast-1a 10.0.0.0/24
Develop-DMZ-C Develop-VPC ap-northeast-1c 10.0.1.0/24
Develop-Trusted-A Develop-VPC ap-northeast-1a 10.0.2.0/24
Develop-Trusted-C Develop-VPC ap-northeast-1c 10.0.3.0/24
と設定して作成
※サーバが3台以上の構成だとしても、2つずつの作成でいい(東京リージョンにAZは2つしかないため。…だったが、後ほど追加された。それでも基本的に2つずつの作成でいい)
作成したサブネットに、自動作成されたルートテーブルが割り当てられていることを確認する
※1つのサブネットには1つのルートテーブルのみ、関連付けることができる
自動作成されたルートテーブルはインターネットゲートウェイを考慮したものではないので、以降で
「インターネットゲートウェイとルートテーブルを作成する。ルートテーブルにインターネットゲートウェイを登録する。そのルートテーブルをサブネットに関連付ける」
とする
※インターネットゲートウェイは、VPCをインターネットに接続する仮想ルーター
※ルートテーブルは、個々のネットワークの宛先への経路一覧を保持しているもの
■インターネットゲートウェイ(仮想ルーター)の作成
インターネットゲートウェイ(左メニュー) → インターネットゲートウェイの作成
名前タグ : Develop-Gateway
と設定して作成
作成したものを選択して「VPCにアタッチ」を押し、先ほど作成したVPC「Develop-VPC」を選択して「アタッチ」
■ルートテーブルの作成
ルートテーブル(左メニュー) → ルートテーブルの作成
名前タグ : Develop-Route
VPC : Develop-VPC
と設定して作成
作成したルートテーブルを選択し、下のタブから「ルート」を選択し、「編集」ボタンを押し、「別ルートの追加」ボタンを押す
送信先 : 0.0.0.0/0
ターゲット : 先ほど作成したインターネットゲートウェイ
と設定して保存
サブネット(左メニュー)
先の手順で作成したサブネットを選択し、下のタブから「ルートテーブル」を選択し、「ルートテーブルの変更」ボタンを押す
「ルートテーブル ID」を先ほど作成したルートテーブルに選択し、下の一覧に追加されたのを確認して「保存」ボタンを押す
インターネット接続を許可したいサブネットすべてに対し、同じ操作を行う
※「すべての宛先(0.0.0.0/0)をインターネットゲートウェイに流す」という設定のルートテーブルを作成したことになる
※ルートテーブルは、インターネット接続を許可したいサブネットすべてに対し設定する。今回は Develop-DMZ-A, Develop-DMZ-C のみ
■セキュリティグループの作成
※セキュリティグループ=ファイヤーウォール。サーバ一台ごとではなく、グループ単位でファイヤーウォールを設定できる
※セキュリティグループ「default」は編集せずに、Webサーバ用やDBサーバ用に新規作成する
セキュリティグループ(左メニュー) → 「セキュリティグループの作成」
名前タグ : Develop-SSH
グループ名 : ssh
説明 : for develop ssh
VPC : Develop-VPC
と設定して作成
グループ名は、デフォルトのセキュリティグループで「default」という名前が付いているので、小文字の英数字で概要を一言で書けば良さそう
説明は、デフォルトのセキュリティグループで「default VPC security group」と設定されているので、英語で概要を書けば良さそう
作成したセキュリティグループを選択し、下のタブから「インバウンドルール」を選択し、「編集」ボタンを押す
タイプ プロトコル ポート範囲 送信元
SSH(22) TPC(6) 22 203.0.113.9/32 … アクセス元のIPアドレス
カスタムTPCルール TPC(6) 10022 203.0.113.9/32 … アクセス元のIPアドレス
と設定して保存。(ただし22番ポートは後ほど塞ぐ)
同様にして以下も作成する。
名前タグ : Develop-Web
グループ名 : web
説明 : for develop web
VPC : Develop-VPC
タイプ プロトコル ポート範囲 送信元
HTTP(80) TPC(6) 80 0.0.0.0/0 … すべてのIPアドレス
HTTP(443) TPC(6) 443 0.0.0.0/0
名前タグ : Develop-Cache
グループ名 : cache
説明 : for develop cache
VPC : Develop-VPC
タイプ プロトコル ポート範囲 送信元
カスタムTPCルール TPC(6) 11211 0.0.0.0/0
名前タグ : Develop-DB
グループ名 : db
説明 : for develop db
VPC : Develop-VPC
タイプ プロトコル ポート範囲 送信元
MySQL/Aurora(3306) TPC(6) 3306 0.0.0.0/0
■パブリックDNSを割り当てるための設定
AWSでPublic DNS(パブリックDNS)が割り当てられない時の解決法
http://qiita.com/sunadoridotnet/items/4ea689ce9f206e78a523
対象のVPCを選択し、「概要」で「DNS 解決」と「DNS ホスト名」を確認する
デフォルトでは
DNS 解決: はい
DNS ホスト名: いいえ
このようになっているが、この設定ではパブリックDNSは割り当てられない
以下の手順で両方とも「はい」にする
(対象のVPCを選択) → アクション → DNS解決の編集
(対象のVPCを選択) → アクション → DNSホスト名の編集
■RDSからVPCを利用するための設定
AWS → RDS → サブネットグループ → DBサブネットグループの作成
名前 : Develop-DB
説明 : for develop.
VPC ID : Develop-VPC
と入力。さらに
アベイラビリティーゾーン : サブネットを作成したAZ
サブネット ID : DB用に作成したサブネット
を追加し、さらに
アベイラビリティーゾーン : サブネットを作成したAZ(上とは別のAZ)
サブネット ID : DB用に作成したサブネット(上とは別のサブネット)
を追加し、「作成」ボタンを押す
■ElastiCacheからVPCを利用するための設定
Laravelのセッション管理にRedisを指定し、AWSのElastiCacheを利用する - 商売力開発ブログ
https://www.prj-alpha.biz/entry/2018/05/06/230232
AWS → ElastiCache → サブネットグループ → Cacheサブネットグループの作成
名前 : Develop-Cache
説明 : for develop.
VPC ID : Develop-VPC
と入力。さらに
アベイラビリティーゾーン : サブネットを作成したAZ
サブネット ID : DB用に作成したサブネット
を追加し、さらに
アベイラビリティーゾーン : サブネットを作成したAZ(上とは別のAZ)
サブネット ID : DB用に作成したサブネット(上とは別のサブネット)
を追加し、「作成」ボタンを押す
■VPCのトラフィックログを取得する
【新機能】VPC Flow LogsでVPC内のIPトラフィックを監視することができるようになりました! | DevelopersIO
https://dev.classmethod.jp/cloud/aws/introduce-to-vpc-flow-log/
VPC Flow Logsの出力先にS3が追加になって安価に使いやすくなりました | DevelopersIO
https://dev.classmethod.jp/cloud/aws/vpcflowlogs_to_s3/
【AWS】VPCフローログを使ってみた - Qiita
https://qiita.com/noskilluser/items/a8db20c9d614c0f3096e