About
TerraformでのAWS環境を作って行く上で、どんなことを考えながらやったかまとめる試みです。まだまだ穴がありそうなので、適宜更新していきたいなーと思っています。間違っている部分あればご指摘いただけると嬉しいです(>ω<)
機能ごとに
VPC
- VPCは大枠のネットワークのイメージ。
-
cidr_block
はなんでもいいけど、IPをたくさん使えるようにクラスAを採用。VPNの設定とかが絡んでくると社内ネットワークとの関係があるので、クラスBにしたりする必要がありそう。基本的にクラスAでよいはず -
enable_dns_hostnames
はプライベートのDNS設定。Defaultがfalseなので、trueに設定しておくとよい。 - tagは重要なのでつける。project名・stage名・terraformで作られていることを明示するとよい。これはどのリソースでも使う
subnet
- VPC内をsubnetで分ける設定
- 大きくpublicとprivateなsubnetに分ける。
- IPのレンジをどうするかっていうのがあるので、
/24
にするとしても今後の拡張を考えてある程度間隔を開けておくとよさそう。 - public/privateともにMulti-AZにしておいて、耐障害性を高めるようにした方が無難。速度命であれば、どちらかのAZに寄せた方がよいが、この時点では両方作っておけばいいと思う。
- subnetを分けすぎるとroutingの設定とかが増えるので、分ける際は要注意
internet gateway
- vpcは初期状態では外への通信ができない。そのためにインターネットに繋がるためのgatewayが必要になる。
- vpcにつける
aws_route/aws_route_table
- subnetからの通信を制御する
- publicなsubnetにはinternet gatewayをつける
- privateなsubnetにはnatインスタンスを付けて、nat経由で外部通信ができるようにする。
- nat instance/gatewayがこの時点ではないので、コメントアウトしておく。
security_group
- EC2などを所属させ、そのサーバへの通信を制御する。iptables的なもの
- 基本的にprivate subnet上では同じIPレンジからの通信は許可
- publicサブネット上では利用するものだけ最低限許可
- ELBを外部に置けばwebサーバもprivateにおけるので、bastionサーバ用のSSHポートのみ許可すればよい。SSHポートは厳重に守りたいので、固定IPからの接続のみ許可、公開鍵認証にするなどするといい。
- ELB/Elasticache/RDSのSGも作成が必要。特にElasticache/RDSへのアクセスはセキュリティ上必要なレンジからのみアクセスさせる設計がベター。
aws instance
- 通常のEC2インスタンス(オートスケーリングでない)
- タグは柔軟につけたほうがいい
- disposalなサーバであれば、delete_on_terminationをオプションで付けて、サーバ削除したらボリュームを削除するようにしておいた方が、運用が楽。
launch configuration
- auto scaling groupでサーバを作成するときの起動設定。この設定を元にインスタンスが作成される。
- 各role毎にblue/greenを分ける
- 設定はなるべく変数に逃がす
auto_scaling_group
- オートスケーリングする単位ごとに作成
- placement_groupは単一AZ内のインスタンスを論理的にグループ化したもの。10Gbpsのネットワークが利用できるので、スループットが高い場合や、レイテンシーが低い場合に使えるとのこと。インスタンスタイプの制限などあり。
- max_size/min_size/desired_capacityはインスタンスの数を決めるパラメータ。desired_capacityは今起動していて欲しい数という認識。minとmaxを書いておけばとりあえずいいんじゃないかな。
managed service系
- RDS/Elasticacheはコンソール上でメンテ作業などをすることが多いため、terraform管理外にしています。