『Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版』 の内容を、terraform で手を動かしてやってみた。 過程やまとめ、結果をつらつらと書く。
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 | 大澤 文孝, 玉川 憲, 片山 暁雄, 今井 雄太 | 工学 | Kindleストア | Amazon
なぜやったか
1つには、単純に terraform を勉強したかったから。
IaC ってかっこいいな〜って。それは半分冗談としても、実感として、GUIでボタンを押していると、全体がどうなってるかを忘れてしまい、保守運用が大変だなと感じてたから。
もう1つ上げるなら、過去に使ったことのあるAWSのインフラの理解が曖昧だったから。
小さめのサービスを作ってデプロイする経験が2回あり、大体の構成要素は知っている。しかし場当たり的に進めてきたため、サービスごとの違いや、全体の構成は曖昧な理解のまま。一度復習したかった
やってみてどうだったか
terraform のtutorial レベルの基礎力が定着した。
私が勝手にterraform を使ってるので、本書にterraformの説明はなく、tutorialで得た知識を元にググりながら進めた。 terraform でつまずくことはほとんどなかったので、tutorial で学んだことが手に馴染んだことが主な成果。一応、つまずいたところで周辺知識を点として仕入れることはできた。どこかで役立つのを期待。
良書だと思った。
扱うサービスの説明が簡潔に書いてあり、ハンズオンでwordpressを動かすところまでできる。インフラ触らない人が1度触っておくのにおすすめしたい粒度。
使ったAWSサービスに関して理解が深まった。
似たリソースとの違い。オプションの意味と指定の仕方。各サービスの役割と関連の仕方、etc etc ...
理解しきれなかったサービスもある
興味の範囲外だったり、深入りしても美味しくなさそうなところは放置して進めた 正直、出来上がったインフラが若干間違っている気がする
terraform でAWSサービスを指定できるようになった
当然ではある。次にAWSのリソースをterraform で扱うときは、さくっと導入できるだろう。 terraform 上でのリソースの仕方が複数あると、裏の仕組みも想像できて面白かった。
terraform がなんであるかを理解できたので、「terraform ではないもの」を知った
世の中のIaCがだいたいterraformに見えていたのだが、「思想は同じだが別の技術」との違いを判別できるようになった。(そうなれていると嬉しい)
次どうするか
(当然だが)出てくるサービス以外については内容も使い方もわからない。例えばECSやServerless のサービスはどうすればいいのか検討がついてない。これらについてもterraform (あるいはIaCに相当する技術) で書いたりする勉強を進めたい
k8s を勉強したい。優先度高めで。その先にEKSとArgo CD を勉強していきたい。terraform で学んだことが活かせてると良いな。helm とかhelmfile で絡んでくる認識。
備忘録
学んだことをアウトプットしておく
region と availability zone
regionの中で分かれているのがavailability zone (az)。regionが同じなら、az が分かれていることは問題にならないことが多い認識。az を同じにしておくと、サービス間の通信が基本早くなる。
subnet
vpcの中を区切るやつ
より正確には、vpcはアドレス範囲を指定していて、その範囲内で更に一部をsubnet に割り当てる
Internet Gateway
インターネットにつなぐためのGateway. これがないと外のネットにつながらない. vpc にattachする
NAT Gateway
内から外への通信と、その帰ってきた通信は通す。外から内への自由な通信は許可しない。家庭のルーターをイメージすると良い。
外部インターネットにつなぐ用のNAT Gatewayの他に、別のVPCむけに接続しに行くようのNAT Gatewayもある
route
これがどこに紐づくのがわからなかった
network interface
なんじゃらほい
keypair
terraform でkey を使ったsshするには、ローカルでssh key を作ってそれをaws resource に渡す必要がある。このためにsshオプションやssh_configのオプションを勉強したりもした。
aws のsecurity group 設定でICMP (pingとか) の接続を通す際に指定するのは type と code
その他
twitterのスレに進捗を書いたり書かなかったりしていた。10日で完走している。コスパいい。https://twitter.com/Tim23164199/status/1540225008118935552?s=20&t=zTE6I5Gvs4a6my7yOm31xA
Github はこちら。ssh_configとかも使っているが、pushはしていない: https://github.com/timtoronto634/learn-aws-infra-terraform
サービスの関係を書いたらこんな感じ。間違ってる感が漂う。参考にしないでほしい