「Pragmatic Terraform on AWS」が神本だったので紹介する

![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/fb544fa4-eb08-f6dd-1d5a-dfe983d63099.png)

## はじめに
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Pragmatic Terraform on AWS、控えめにいって神本です。<br>AWSの知識がある程度ある人が、IaC入門するのに最適すぎる。<br>今週中にやり終わりそうなので、金曜あたりにレポ書きます。</p>&mdash; nari@エンタメ系エンジニア (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1134951076954644480?ref_src=twsrc%5Etfw">June 1, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

予定より、ちょっと遅くなってしまいましたが、宣言通り書評書いていこうと思います。。
**ただただ「Pragmatic Terraform on AWS」を褒めちぎるだけの記事になってしまうことをご了承ください。。**
## こんな人にオススメ

- **AWSの知識がある程度あって、IaC(Infratecture as Code)に入門してみたい人**　　
- **他のIaCのツール(CloudFormationとか)を使っていてterraform使ってみたい人**　　　

**AWSもIaCも全くわからん、、**だとちょっと進めるのが辛いかもしれません。

逆にAWSある程度触ったり、資格の勉強で包括的に知識を入れていたりすると、復習にもなるし
**「GUIでぽちぽちやってよくわかってなかったけど、裏ではこんなリソースが出来ているのか」**
と整理もできる内容になっています。

現場でAWS使ってないし全然触ってないんだよね、って人は**AWS資格の勉強**でもしてから取り組むといいかも知れません。
その際のおすすめ記事(宣伝):[３週間でAWS認定ソリューションアーキテクト-アソシエイト-とったので、勉強法などまとめてみる - Qiita](https://qiita.com/fukubaka0825/items/238225f9e4c1962bc00c)
## 著者様
KOS-MOS様
twitter:[tmk.com](https://twitter.com/tmknom)
## お買い求め先
[【ダウンロード版】Pragmatic Terraform on AWS - KOS-MOS - BOOTH](https://booth.pm/ja/items/1318735)
## 該当本の目次
第1章　はじめに
第2章　インストール
第3章　Terraformの基本
第4章　全体設計
第5章　権限管理
第6章　ストレージ
第7章　ネットワーク
第8章　ロードバランサとDNS
第9章　コンテナオーケストレーション
第10章　バッチ
第11章　鍵管理
第12章　設定管理
第13章　データストア
第14章　デプロイメントパイプライン
第15章　SSHレスオペレーション
第16章　ロギング
第17章　構造化
第18章　Terraformベストプラクティス
第19章　AWSベストプラクティス
第20章　モジュール設計
第21章　落ち穂拾い
第22章　巨人の肩の上に乗る

1~3章でTerraformの基礎を学び、4章~16章でDocker化したWebアプリケーションをAWS上に作っていき、１７章〜２２章で**大規模なシステムでのterraform運用のノウハウや基本的な設計の考え方**を学んでいきます。

今から始める方は、もうTerraform 0.12.0-rc1が正式リリースされているので以下の注意点は問題ないかと思いますが、一様著者様の注意喚起のリンクを載せておきます。

[『Pragmatic Terraform on AWS』のハマりどころと回避方法 #技術書典 - 憂鬱な世界にネコパンチ！](https://nekopunch.hatenablog.com/entry/2019/04/18/094914)

## 「Pragmatic Terraform on AWS」のココがすごい
### 1. 全てのsampleコードがgithub上に存在する
たまにソースコードの共有がない本(特に同人本）がありますが、部分的にコピペしたいときに辛い。。
しかも**terraform0.11と0.12のバージョンどちら用にもサンプルコードを用意する**聖人っぷり。。。徳積みすぎです。(この本の出版の時にまだ0.12が正式リリースされていなかった)

[GitHub - tmknom/example-pragmatic-terraform-on-aws: 技術書典6で頒布した『Pragmatic Terraform on AWS 』のサンプルコードを公開しています](https://github.com/tmknom/example-pragmatic-terraform-on-aws)

### 2. 読者への読みやすさへの配慮がえげつない
[細かすぎて伝わらない『Pragmatic Terraform on AWS』を読みやすくする技術 #技術書典 - 憂鬱な世界にネコパンチ！](https://nekopunch.hatenablog.com/entry/2019/04/25/094508#h20190425T004508Z3)に詳しく書かれているんですが、僕が特に感動したのが以下の二点です。

- **単語が途中で改行されていないので、変な煩わしさが皆無**
- **表記上改行されているだけのソースを、わかりやすくつながりを矢印で表しているので、変なエラーの発生を防いでくれている**

脳のリソースをコンテンツだけに集中させる工夫が随所に詰まっていて、「これ、本当に同人誌か？」となりました。

### 3. terraformやAWSのベストプラクティスやモジュール設計の話まで学べる(具体的なハンズオンに終始しない)  
だいたいこういうハンズオン系の本は、簡単な小規模のケースを紹介して終わり、なことが多いですが、正直IaCを一人で小規模でやるってまぁそんな機会はないですよね(個人開発でそこまでやるか？って感じですし)

17章以降の設計やベストプラクティスの章では、**大規模なシステムでのIaCのハマりどころから基本的な設計の考え方まで非常にわかりやすく整理されています。**

なので、一回16章まで通してはいおしまい、ではなく、折にふれて読み返す本になりそうです。
(自分も技術書を出すときは、そういうものが書きたいものですね、、、でも次出すやつは具体に終始しそうだ、、笑)
### 4. 扱っているAWSサービスの幅広さ
目次を見ていただいたら分かる通り、基本的なWebアプリケーションに必要なインフラほぼ全般のサービスについてふれています。

基本のVPCやS3やRDSやRoute53やELBはもちろんのこと、ACMやKMS、SSMまで。極め付けに、**Session ManagerによるSSHレスオペレーティング**まで(これ、sshできないコンテナ運用の調査でめちゃくちゃ重宝しそうだ、知らなかった）。なかなか体系だって学習しずらいログ周りの話もまとまってます。(CloudWatch LogsやKinesis Data Firehose）  

ECSによるコンテナオーケストレーションやCodePipelineでのCI/CDなんかは結構色んな本が出てきてますが、コンテナ運用するんだったら使うよね、ってサービスにまで言及しているのは痒い所に手が届きすぎて逆に嫉妬しそうです。(嘘です、本当にありがとうございます)

上記のように、**terraformの学習にとどまらず、そういえば気になってたけど全然試せてなかったなと思うサービスを使うきっかけ**をくれる本にもなってると思います。  

## 終わりに
### 触発されて、IaCについて思いを巡らせるようになった　
学習を進めてく中で、terraformやCloudFormationで本当に**開発~本番全部のインフラリソース管理できてんのみんな、、、**という気持ちが少し拭えなかった。

そんな中 [この発表資料](https://speakerdeck.com/shogomuranushi/infrastructure-as-code-is-very-tired)を読んだりしながら、**ROIを考えながら全てをIaCしなくてもいいよね**と考えられると、少し気持ちが楽になると思った。(もちろん、これはなんでコード化してないんだっけみたいな部分は全体で共有しながら(これはこの本でも書いてある))

以下のような、**既存のインフラからtfファイルをexportしてくれるようなツール**も追いかけていく必要もあるかも。
[GitHub - dtan4/terraforming: Export existing AWS resources to Terraform style (tf, tfstate)](https://github.com/dtan4/terraforming)
[GitHub - GoogleCloudPlatform/terraformer: CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code](https://github.com/GoogleCloudPlatform/terraformer)

また、今回のAWSSummitで、CDKがインフラをymlではなく**appの言語で管理できるように進化していく**(pulumiと同じ思想)という話([その時のレポがこちら](https://qiita.com/fukubaka0825/items/9befefa346c15ee63552))があり、そういう進化をしていくとより開発チーム全体としてスムーズにIaCの意識を上げていけれそうだなと思ったりしました。



これからそういった部分も含めて、terraformやIaCを学習していきがら、プロジェクトにも積極的に取り入れていったり、知見がたまったら社内布教もしていきたいですね。

### 技術書書いてみたくなってしまった
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">申し込みました！当選したら「GoとAWS Aurora ServerlessとSAMで本格slack botを作ってみよう」的な内容で書こうかなぁと思ってます。<br><br>技術書典7にサークル「服バカ」として参加申込をしました！ <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&amp;ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://t.co/iQ5ab43fp6">https://t.co/iQ5ab43fp6</a></p>&mdash; nari@エンタメ系エンジニア (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1139547010942398464?ref_src=twsrc%5Etfw">June 14, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

前回の技術書典6が初参加(買い手側として)だったんですが、こういう本を通してある技術やトピックに踏み入れるきっかけ作りができたりするのって、素敵だなと思わされました。

ここまでのクオリティのものは作れないかも知れないですが、**誰か一人のきっかけでも作れたら最高じゃん**と思い次の技術書典申し込んでみました。

(でも、なんで表紙バベルの塔なんだろう、、バベルの塔のように途中で崩れない戒め、反面教師としての象徴なのだろうか（深読みしすぎ))
## 余談

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">僕自身も思っていることですが、人事にもどんどんエンジニアが発信していく組織にしていきたいと言われたので、僕自身は<br>- 必ず週一でQiita Organizationに投稿する<br>- 社内で投稿へのリアクション がしやすい仕組みを作る<br>ことをやっていこうと思ってます。</p>&mdash; nari@エンタメ系エンジニア (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1139549353847058437?ref_src=twsrc%5Etfw">June 14, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

[前の記事](https://qiita.com/fukubaka0825/items/d2f19d1d6d1bc2b7edac)でお話しした、うちの会社を**「発信していく組織にしていく」**をテーマに、自分がとりあえずやろうと思ってる施策は以下の2つです。

-  **自分自身がQiitaに毎週1本は記事をあげる**
- **社内で記事の投稿者へのリアクションがしやすいように、interactive message slack botを開発(例えば、ワンボタンでリアクションが取れる、次書いて欲しい記事の要望が送れる、などなど)**

うちではこんなことやってますよ〜なんてことがあれば、ぜひ教えて欲しいです！
アイデアお待ちしております。