こんにちは。@jedipunkz です。
今回は電子書籍 ‘Pragmatic Terraform on AWS’ を読んでとても内容が素晴らしかったので紹介させて頂きます。書籍の購入は下記の URL から可能です。
https://booth.pm/ja/items/1318735
ブログ記事では書籍の細かい内容については述べません。これから購入される方々が買う意欲を無くすようなブログ記事にしたくないからです。なのでこのブログでは自分が Terraform 運用について感じていた問題点とこの電子書籍がどう解決してくれたのかについて記したいと思います。
自分が Terraform 運用で感じていた問題点
Terraform を使ったインフラコード化と構築は自分の結構経験があるのですが、その構築に使ったコードで構成を運用する難しさはいつも感じていました。Terraform を使った継続的なインフラの運用についてです。具体的には下記のような疑問と言いますか問題点です。
- (1) どのような実行単位で .tf コードを書くか
- (2) 削除系・修正系の操作も Terraform で行うのか
- (3) ステートフルなインフラとステートレスなインフラの管理方法
(1) は terraform plan/apply
を実行するディレクトリの構造についてです。Terraform は同じディレクトリ上にある .tf ファイル全てを読み込んでくれますし一斉にインフラをデプロイすることも可能です。ですが、何かインフラを修正・削除したい場合、削除してはいけないリソースも同ディレクトリ上の .tf ファイルで管理しているわけですから何かしらのミスで大事なインフラに影響を与えてしまう事になります。影響範囲が大きすぎるのです。
(2) は、‘初期の構成のみを Terraform で構築自動化する’ のかどうか、ということになります。構築に使ったコードで継続的に削除系・修正系の操作も行うのか。これも (1) と同様に管理するインフラの規模が大きくなると影響範囲が大きくなり、運用者の精神的負担が増します。
(3) は RDS, S3 等のステートフルなインフラと、それ以外のステートレスなインフラを同じ .tf コードで管理していいのか、という疑問です。修正・削除が多発するインフラは .tf コードで継続的に運用出来たとしても、RDS, S3 の様な状態が重要になるインフラは滅多に削除・修正操作は通常行いません。これら二種類のインフラを同じように管理してしまっていいのか?という疑問です。
これらの疑問や思っていた問題点について、この ‘Pragmatic Terraform on AWS’ は全て解決してくれました。
Pragmatic Terraform on AWS の構成
章ごとの説明は詳細には書きませんが、大体の流れは下記のようになっています。
- (1) 基本的な利用方法
- (2) Tips 集
- (3) ECS Fargate を中心にした実践的な構成のコード化
- (4) 構造化
- (5) ベストプラクティス
- (6) モジュール設計
(2) Tips 集について
席に述べたように自分は Terraform の経験が結構ある方だと思うのですが、それでも知らない Terraform の機能が複数ありました。特に Terraform 利用者にとって、要点だけをおさえた説明文と共に次々に多くの Tips を説明してくれるこの章はとても意味があるものではないでしょうか。素晴らしいです。
(3) ECS Fargate を中心にした実践的な構成のコード化
賛否両論あるかもしれませんが2019年現在でサービスを構成しようとすると GKE か ECS か EKS かの3択なのではないでしょうか。特にサービス・プロバイダにとってマネージドサービスは主流になると思います。その中でも国内では AWS の利用率が高いわけですから ECS を理解しておくことはインフラ系のエンジニアにとって非常に重要になります。
この章では ECS Fargate を中心として下記のような特徴を持ったシステムをコード化するという実践的なものになっています。
- ECS とその裏側にある ALB, IAM, VPC 等の基本的な構成構築
- ECS による Web サービス・ECS によるバッチサービス構成構築
- 鍵管理
- 設定管理
- デプロイメントパイプライン
- ロギング
特に CodePipeline, Github, ECR を使ったコンテナの継続的デプロイに関する説明と、Cloudwatch Logs, S3, Athena, Kinesis Data Firehose を使ったトレーサビリティを上げるという意味でのログ管理の説明は、「ここまで実践的な説明してくれるのか」という印象を持ちました。2019年時点でインフラエンジニアをしている方は駆らず理解しておくべき内容だと思います。
(4) 構造化
ここが自分的には一番知りたかった内容でした。公式ドキュメントに断片的な情報はあっても、やはり Terraform ユーザの生の声を聞きたいなと感じていたので、この章は非常に自分にとって役立つものでした。
誰でも思いつく .tf コードの分離・別ディレクトリ管理・別レポジトリ管理から、何を意識してコンポーネント化するかの考え方がソフトウェア設計を元に非常に説得力ある説明と共に解説されています。
この章は概略を書いてしまうと内容が把握出来てしまうので、興味ある方は書籍を購入して読んでみてください。きっと損はしないです。
(5), (6) ベストプラクティスとモジュール設計
運用するなかでおさえておくべきポイントが掲載されています。モジュール化を行う上での注意点等、運用に入ってから苦労しないように色んな技が掲載されています。
まとめ
以上、自分の読書感想でしたが、素晴らしさは伝わりましたでしょうか。Terraform を使っているエンジニアであれば必ず疑問に感じる点を見事に解決に導いている良書だと思いますし、説明がとても簡潔で良いテンポで理解できる内容でした。また情報量や文字数等、自分にとって最適でしたし、内容的には “Terraform を使い始めた人” から “Terraform を使っているが苦労している人” までをカバーしたものになっています。
ネット上には断片的には情報はあっても、ここまでまとまった内容のサイトは無いと思いますし、実際に Terraform を使っているエンジニアだからこその “運用を行う上での解決策” が満載な書籍でした。