AWSの基礎本の内容をterraform で書いてみた

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

サービスの関係を書いたらこんな感じ。間違ってる感が漂う。参考にしないでほしい

サービス一覧と関わり