本記事はサムザップ Advent Calendar 2017の5日目の記事です。
昨日は@tomoriakiさんのゲームエンジニアが紙ヒコーキワークショップをやってみたでした
前提
・ インフラ歴半年
・ 業務では主にGCPを使用
・ GCPでできることをAWSで再現
・ 基本的にはterraformで構築
・ 大体検証期間は2週間くらい
目指したこと
既存のプロジェクト(GCP)と同等の開発環境構築
手順
※ 下記に記載する順番どおりに行ったわけではなく、記載上の問題で番号を振っています。
1. VPC構築
まずは何はともあれVPCとサブネット、サブネット配下にインスタンスを1台作成しました。
つまずき1
インスタンスにsshアクセスできない!
※ FWの設定(awsではセキュリティーグループ(sg)っていうのかな)はingress port:22許可したのに
原因と解決
インターネットゲートウェイ(igw)ってものをサブネットにアタッチしないとprivateなサブネットになってしまい、アクセス出来ないとのこと。
2. VPCにpriveteとpublicのサブネット構築
1.でigwを置いたけどそもそも接続出来ない領域分けたいよね、ということでサブネットを2つ作ってigwをアタッチするpublicサブネットとアタッチしないpriveteサブネットを作成
それぞれにインスタンスを1台ずつ置きpriveteインスタンスにはpublicインスタンスからinternal接続する
つまずき2
privateサブネットに置いたインスタンスでyum update
できない
原因と解決
privateサブネットだと外へのアクセスもできないらしい
NATゲートウェイ(ngw)というものをpublicサブネットに配置して、それ経由でpriveteサブネットのインスタンスは外へのアクセスをできるようにした。
※ 最初は名前的にEgress Only インターネットゲートウェイだと思ったけど、こちらはipv6らしい
TIPS
S3への接続はなにもしないと外部経由になってしまうらしい
エンドポイント(ep)というものをVPCに配置するとinternalで接続できるのでVPCを作ったらとりあえず、epも配置しよう!!
3. プロジェクトと開発環境の構成
1,2でVPCはだいたい出来たけど、
・ プロジェクトが違う場合
・ 環境(development, staging, productionなど)が違う場合
どのようにネットワークを分けて構築すればいいかを考えた。
参考
下記サイトでアカウントを分ける場合とVPCを分ける場合を分かりやすくまとめている
こちらを参考に本番と開発を分け(パターン4)、開発はVPCで分ける(パターン2-1)ように考慮した
https://dev.classmethod.jp/cloud/aws/account-and-vpc-dividing-pattern/
4. LBの作成
TCP, HTTP, HTTPSロードバランサの作成
つまずき3
terraformのmoduleロードバランサ関連多くてどれ使えばいいか分からん
原因と解決
terraform module名 | awsでの呼び方 | 備考 |
---|---|---|
elb | classic ロードバランサ | |
alb | application ロードバランサ | 非推奨 (今後のバージョンアップで削除予定) |
lb | application ロードバランサ network ロードバランサ |
基本的にはこちらを使用する |
TIPS
application LBはマルチAZ構成を強制されているのでゾーンの違うpublicなサブネットを2つ用意する必要がある。
5. インスタンスのホスト名解決
gcpではinternalな通信にホスト名を使用できる。
つまずき4
awsだとホスト名がipでつけられそもそも分かりづらいので、ホスト名を設定しつつ名前解決をしたい。
原因と解決
インスタンス登録時にtags:Nameにインスタンス名を設定し、そのインスタンス名とprivateIPをroute53でレコード登録する
サーバ自体はterraformのprovisionerで下記を実行
sudo sed -i -e "s/localhost.localdomain/[ホスト名]/g" /etc/sysconfig/network
sudo hostname [ホスト名]
まとめ
・ awsはgcpに比べてやれることが多い分、使う側がネットワークの知識とか結構求められるな!という印象を受けました。terraformのコード量もgcpの2倍くらいになった気がする。
・ マルチAZ構成を考える際は結構パフォーマンスに注意する必要がありそう。別ゾーンへのアクセスはパフォーマンスが落ちるという検証結果が結構あるので、問題ないように構成を考えないといけない
・ あとはざっくりgcpはブラックリスト、awsはホワイトリストなセキュリティーな印象
terraformのコード
明日は@Gaku_Ishiiさんの記事です。