「コンテナ時代の Web サービスの作り方 ver. 202107」[楽描商店(nasum), 2021]を読みました。
感想について記述していきます。
感想
nasum さんが書かれた本です。
知り合いのエンジニアが強くお勧めされたのと、自身が ecs まわりの実装で悩んでいたいたこともあり、購入して読むことにしました。 SSL 化と Route53 のドメイン取得、migration しながら自動デプロイの箇所以外を読みました。(前者は使い捨てのアプリなので採用を見送って、後者はいまだに詰まっています。)
内容は、Terraform と ecs(と関連する AWS のリソース)を用いた Web アプリケーションのデプロイです。 「aws の console 画面 から ec2 のデプロイまではなんとか理解できるけど、ecs の使い方がわからなかったり、vpc などのネットーワーク関連のリソースの知識に不安があったりする。Terraform は名前ぐらいなら知っている(or 名前も知らない)。」という人には超絶おすすめします。
aws、GCP などのクラウドサービスはインターネットの記事や書籍などを確認しても、GUI の仕様変更によって情報が古くなったり、もう一度実行するときに同じ記事を確認したり(ソースコードみたいに手元に残していない)、よくわからないまま画面遷移して内容を忘れてしまったりする場合が多いです。 しかし、この書籍は、Terraform という「infrastructure as code」の OSS を使って AWS のリソースの設定をすすめていきます。Terraform なら、GUI の仕様変更に左右されることなく、一度使ったことがある設定を再現することができます。そのため、作成した結果が手元に残り、リソースごとの関連を確認しながら、理解しながら読み進める内容となっています。また、GUI での操作が必要な画面でも適宜画像で解説してくれます。
全体的に、とても参考になる内容である反面、必要になりそうな前提知識や環境、誤植などが読み進めていくうえで、目に付くところがありました(詳細は後述します)。
しかし、それらの面を除いても、Terraform で ecs にデプロイまでをおこなってくれる。書籍は他にないとおもいます。 Terraform を学びたかったり、ecs まわりについて参考になる記事が見つからないと言う人に是非おすすめしたいと思います。
良いところ、悪いところ、懸念点
良いところ、悪いところ、懸念点についてそれぞれ記述していきます。
良いところ
1. Terraform v1 以上に対応。
一部の書籍でも、Terraform について述べている内容はあると思いますが、v1.0 以上は今年の 6 月ぐらいにおこなわれ、それに対応できている書籍は他にないと思います。 大きな変更があったわけではないと思うのですが、破壊的な変更が v1 を使っていればないと考えられるのでメリットに感じられました。
2. AWS のリソースの簡易的な解説
様々な種類の AWS のリソースが登場します。 最初の方に、簡易的な解説をしてくれるので、読み進めるのが楽です。 また、パラメータに関する知識も解説しながらソースコードを記述していくので、いままでおざなりにしていた知識を得ながら読むことができます。
3. github actions
デプロイ方法は github actions を使ってくれます。 github actions の知識がなくても、実装できるので ecs の勉強ついでに CI/CD までできるようになってしまいます。
悪いところ
1. ソースコード が公開されていない(2021 年 9 月 23 日現在)
ソースコードのリンクがあるのですが、非公開 or 削除になっていて、参照することができません。著者のツイート曰く、現在作成中だそうです。 実装をする上で写経しか方法がないので、タイポが発生したり、ファイルの配置場所を間違えたりして、動作がとまったりします。 解決するにも、再度一つずつページを読み解く必要があるので、時間がかかっています。
本の中に、作成したファイル一覧が表示されていますが、非公開ファイル(.
「ドットファイル」)が載せられていないので、.github
以下のファイルが気になりました。
個人的には.gitignore
ファイルが公開されていないので、個人開発のときに、Terraform の ignore テンプレートが欲しくなりました。
ググったら、それらしきテンプレートがでてきたので、そのまま活用しています。
2. 誤植がたまに目立つ
更新が重ねられており、過去の出版物を知りませんが、最新版でも誤植がたまに目立ちます。 クリティカルなものはあまりないと思いますが、簡単にわかるものだけでも以下がのような誤植?が見つかります。 本の評価を落とすほどではないですが、若干読みづらくなっていました。
teffaform apply
、Terraform apply
のタイポ- p.67
assocication
、association
のタイポ - 追記のはずが、ファイル名がことなる
- ファイルのパスがリポジトリ名から始まったり、始まらなかったり
- p.85
sample-rails-alb
、おそらく過去のサンプルコードから持ってきて名前を変更していないだけ - p.103
〜やや冗長で。今回〜
、突然。
がある(誤植ではない?) - p.105
iam/aws_iam_policies/deploy.json
おそらく、deploy_policy.json
の誤植(これは間違えると動かない) - p.110 誤植ではないが
cd Terraform-sample/service
配下でもTerraform plan
とTerraform apply
が必要
3. テストコードが途中までしかない
github actions で自動テストを実装していますが、main のソースコードを追記しても、テストコードが追記されることはありませんでした。 そのままではもちろん github actions が通らないので、テストコードはコメントアウトしました。 本書の本質からは外れていますが、Go 言語に対する知見がないで、どのように実装してくのかが気になりました。
また、DB との接続をおこなう処理もローカルでの動作確認を想定していなさそうだったのが、少し残念でした。
懸念点、沼ったところ
1. 本書を読むにあたって求められる前提知識
読んでいて、どのレベルが対象なのかと気になっていました。
個人的には、
- 「aws の ecs デプロイは GUI で試したことがある経験があると良い(あと関連するリソースを触ったことがある)」、
- 「go の知識は必須ではないが、envs(pyenv、phpenv、nodenv)を使用して言語の環境構築経験があると良い」。
ぐらいだと思いました。
2. aws cli のバージョンについて
懸念点というより、個人的に沼ったポイントです。
本書で使用するaws cli
コマンドのうち、aws ecs execute-command
は、v2 でも一定上のバージョンじゃないと含まれていません。
そのため、バージョンアップする必要があったのですが、原因がバージョン違いであることを表示してくれないので、沼ってしまいました。
最初の方に必須バージョンなどを記述してくれると嬉しかったです。
3. aws ecs exec-command について
こちらも沼ったポイントです。
aws ecs exec-command
でコンテナに ssh するのにも苦戦しました。
admin ユーザーであれば、不要なはずの ecs の service にenable-exec-command
を付与しないとできなかったり、IAM ロールポリシーにssmmessages:
がうまく付与できていなかったりと、詰まってしまいました。
最終的には、amazon-ecs-exec-checker
というリポジトリをみつけたので、そちらで不足事項を確認しながら進めることができました。
まとめ
悪かった点、懸念点などを、多く述べてしまいましたが、内容がとてもすばらしく、じっくり読んでいるうちに気になる点があったので記述しました。
最初にも述べたとおり、Terraform、ecs、自動デプロイなどに興味がある人に一番におすすめしたい本です。
自身が今年読んだ、実践的な技術書の中で一番良かったです。