2020年9月12日(土)〜22日(火)に開催される技術書典9で5冊出展します!
カエルと空というサークルで、このページから出展しているのでぜひのぞいて行ってください!
出展する本を紹介します。
『Google Cloud Platformで学ぶTerraform 〜基礎編〜』
僕は、マイクロサービスを開発するためのプラットフォームを開発・運用するチームで2020年から働き始めました。それ以前の仕事は、バックエンドエンジニアとしてのマイクロサービス開発です。プラットフォームチームが開発したTerraformモジュールに設定を渡し、GCPやKubernetesのリソースを作成していました。
いざそのモジュールを作成したり、エラーのデバッグをする立場になってみると何もわかりません。つぎのような疑問がわきました。
・モジュールとは何か
・複数のリソースから構成されるアーキテクチャはどう組み立てるのか
・なぜ Terraform の状態と実際のクラウドリソースの状態はずれるのか
Terraformの概念や個々のリソースの使い方、GCPを利用したサンプルのモジュールはたくさんあります。Terraformに関する書籍もあります。
しかし、Terraformの具体的な説明に登場するクラウドは、ほとんどがAWSです。クラウドアーキテクチャの設計経験も多くはない僕にとって、AWSベースで説明された内容をGCPに置き換えながら学ぶのはとても大変でした。そこで、この本を書くことに決めました。
AWSからGCPへの翻訳をせず、クラウドの設計やTerraformをGCPを通じて学べる本。半年前の僕が欲しかった本です。この本を通じ、Terraform をより身近に感じる人が増えたら幸いです。
正誤表・増補改訂情報はこちらのページで公開しています。
すでにBOOTHで電子版をご購入いただける状態になっています。
https://toshi0607.booth.pm/items/2354817
登場するほとんどのサンプルコードも、GitHub上で公開しています。
toshi0607/Learning-Terraform-with-GCP
目次です。
第1章 はじめに
第2章 Terraform の概要
2.1 Terraformの意義
2.2 Terraformのアーキテクチャ
2.3 まとめ
第3章 環境構築
3.1 GCPアカウント
3.2 GCPプロジェクト
3.3 GoogleCloudSDK
3.4 tfenv
3.5 vscode-terraform
3.6 まとめ
第4章 リソースとterraformコマンド
4.1 リソース
4.2 terraformコマンド
init
plan
apply
destroy
4.3 ライフサイクル
create_before_destroy
prevent_destroy
ignore_changes
4.4 まとめ
第5章 Configurationの書き方
5.1 関数
join
length
contains
values
file
その他の関数
5.2 変数
variable
output
locals
データソース
5.3 ループ
count
for_each
for
dynamic
5.4 条件式
5.5 バージョンの明示
5.6 モジュール
子モジュールの定義
ルートモジュールの定義
5.7 まとめ
第6章 ステート管理
6.1 ステートの構造
6.2 リモートバックエンド
6.3 管理単位
ワークスペース
バックエンド
6.4 参照
6.5 ズレと直し方
定義あり、ステートあり、リソースあり
定義あり、ステートあり、リソースなし
定義あり、ステートなし、リソースあり
定義あり、ステートなし、リソースなし
定義なし、ステートあり、リソースあり
定義なし、ステートあり、リソースなし
定義なし、ステートなし、リソースあり
定義なし、ステートなし、リソースなし
6.6 リファクタリング
6.7 まとめ
あとがき
『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜 第2版』
初版から大幅に加筆した第2版です!
2019年末同僚に「なぜIstio(VirtualService)を使わずにKnativeはトラフィックスプリッティングのような機能を実現できるのか」と質問されて答えられなかったのがきっかけで調べることにしました。
Knativeは当初Ingress GatewayにIstioを採用(依存)しましたが、後にGlooをはじめ様々なコンポーネントで代替可能になりました。代替できる事実は知りつつも、なぜ代替できるのか、代替できるとはどういうことなのかを調べることはありませんでした。
しかし、「プラットフォームを開発・運用する」ことへの関心が高まり、(何層もある)Knativeより下のレイヤーを学びたい気持ちが強くなりました。本書はその一環です。Knative = Kubernetes Networkingとも説明されるKnativeのIngress Gateway周りの調査はKubernetesが提供しているService、Ingressの特徴や課題、そもそもロードバランサーとは何かのか、サービスメッシュやEnvoyとはどういう関係があるのか、といったネットワーク関連の入門にもうってつけでした。
「KnativeはなぜIngress Gatewayを交換できるのか?」という問いに答えることは、Envoyの設定をどう表現し、どう配信するかというデザインパターンを見い出すことに繋がります。
90ページ弱の自由研究に付き合っていただけたら幸いです!
すでにBOOTHで電子版をご購入いただける状態になっています。
https://toshi0607.booth.pm/items/1882118
目次です。
第1章 Knative
1.1 概要
1.2 Serving
1.3 Eventing
1.4 まとめ
第2章 Gateway
2.1 ServiceとIngress
2.2 Gateway と Service Mesh
[コラム]APIGatewayとサービスメッシュの違い
2.3 Envoy とコントロールプレーン
2.4 コントロールプレーンの実装例(Istio)
2.5 まとめ
[コラム]IngressAPIの進化
[コラム] L4 から L7 ロードバランサーへ
第3章 Istio
3.1 概要
3.2 KnativeのCRD
3.3 Knativeのコンポーネント
3.4 IstioのCRD
3.5 Istioのコンポーネント
3.6 localgateway
3.7 Gateway
3.8 まとめ
第4章 Ambassador
4.1 概要
4.2 Knativeのコンポーネント
4.3 Ambassadorのコンポーネント
4.4 AmbassadorとEnvoy
4.5 まとめ
第5章 Contour
5.1 概要
5.2 Knativeのコンポーネント
5.3 Contourのコンポーネント
5.4 まとめ
第6章 Kourier
6.1 概要
6.2 Knativeのコンポーネント
6.3 Kourierのコンポーネント
6.4 まとめ
[コラム] Kourier の活用事例
第7章 Gloo
7.1 概要
7.2 Knativeのコンポーネント
7.3 Glooのコンポーネント
7.4 まとめ
[コラム]Envoyとgo-control-planeの今後
第8章 まとめ
8.1 Gateway
8.2 Ambassador
8.3 Contour
8.4 Gloo
8.5 Kourier
8.6 Istio
8.7 最後に
Appendix
『Knativeの歩き方 KubernetesからServerlessを訪ねて 第2版』
こちらはKnativeのコンポーネントの説明やユースケースを中心に説明した本です。実際にKnativeが利用されたプロダクトの図解も掲載しています。
こちらもすでにBOOTHで電子版、紙本 + 電子版がBOOTHで購入できる状態になっています。
https://toshi0607.booth.pm/items/1309468
正誤表や増補改訂情報ページはこちらです。
目次です。
第1章 Knativeの概要
1.1 Knativeの構成要素
1.2 Serving
1.3 Build
1.4 Eventing
第2章 Kubernetes環境の準備
第3章 KubernetesとKnativeの関係
3.1 Kubernetesの基本的思想
3.2 Kubernetesのオートスケール
3.3 Kubernetesの拡張機能
第4章 Knative Serving
4.1 Knativeのインストール
4.1.1 Istioの設定
4.1.2 Knativeの設定
4.2 Configuration
4.3 Revison
4.4 Routes
4.5 Service
4.6 オートスケールの仕組み
第5章 Knative Build
5.1 Build
5.2 BuildTemplate
5.3 Servingと組み合わせる
第6章 Knative Eventing
6.1 Sources
6.2 BrokerとTrigger
6.3 ChannelとSubscription
第7章 Knative のユースケース
7.1 FaaS プラットフォームの構築
7.1.1 イベントやリクエストを Function に渡すサーバー
7.1.2 サーバーとFunctionのパッケージング
7.1.3 CLI
7.2 イベント pull 型の FaaS 〜Knative Lambda Runtimes の利用例〜
7.2.1 AWS Lambda の Function(Go)
7.2.2 AWSLambdaとRuntimeInterface
7.2.3 knative-lambda-runtime
7.2.4 triggermesh/aws-custom-runtime
7.2.5 bootstrap
7.2.6 Tekton で生成するコンテナイメージ
7.3 イベント push 型の FaaS 〜OpenFaaS の Watchdog の利用例〜
7.3.1 WatchdogによるFunction制御
7.3.2 WatchdogとFunction同梱のDockerfile
KnativeのCLI
『Knativeソースコードリーディング入門 Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー』
Knativeの仕組みをより深く追おうとするときに、Kubernetesのカスタムリソースやカスタムコントローラーの枠組みを知っておくと追いやすくなります。本書では、Knativeはもちろん、Kubernetes自体の様々なソースコードを追いながらそれを解説しています。
以前mercari.goで発表した内容をより詳細に紹介したものです。
目次です。
第1章 KnativeとKuberentesの関係
1.1 Kubernetesの概要
1.2 Kubernetesの拡張方法
1.3 Knative の概要
第2章 KubernetesのAPI
2.1 APIサーバーの責務
2.2 Kind
2.3 APIグループ
2.4 バージョン
2.5 リソースとサブリソース
2.6 APIリクエストの処理フロー
第3章 APIクライアント
3.1 client-go
3.2 Object
3.2.1 TypeMeta
3.2.2 ObjectMeta
3.2.3 Spec
3.2.4 Status
3.3 ClientSet
3.4 Informer
3.5 APIMachinery
3.5.1 Scheme
3.5.2 RESTMapper
第4章 カスタムリソース
4.1 CR
4.2 CRD
4.2.1 categories
4.2.2 shortNames
4.2.3 subresources
4.2.4 additionalPrinterColumns
引き続き電子版、紙本 + 電子版がBOOTHで購入できる状態になっています。
https://toshi0607.booth.pm/items/1568456
正誤表や増補改訂情報ページはこちらです。
『Knativeソースコードリーディング入門 〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補改訂情報 #技術書典
『Goで学ぶAWS Lambda 第2版』
技術書典5で出展したAWS Lambdaのユースケースに関する本も引き続き。
AWS Lambda周辺のエコシステムはこの本の最終更新後に大きな変更がありました。Amazon RDS Proxy with AWS Lambda、AWS Lambda VPC接続の改善、Provisioned Concurrency for Lambda Functionsは本の中でも触れられている課題の決定的な解決策です。少し本の内容が古くなってしまったものの、AWS Lambda(とSAM)をGo言語で学ぶ入門の1つとしては依然として有効ではないかと思います。
お陰様で商業版を出版したり、こちらもすでに第2版がBOOTHで購入できる状態になっています。
https://booth.pm/ja/items/1034858
目次です。
第1章 環境構築
1.1 anyenv
1.2 anyenvupdate
1.3 goenvとGo
1.4 pyenvとPython
1.5 aws-cli
1.6 aws-sam-cli
インストールトラブルシューティング
1.7 saw
1.8 direnv
1.9 dep
1.10 gig
第2章 S3 イベントの活用
2.1 概要
2.2 S3
2.3 シーケンス
2.4 フォルダ構成
2.5 ソースコード
2.6 テスト
2.7 デプロイ
2.8 削除
第3章 SNS と SQS によるファンアウト
3.1 概要
3.2 SQS
3.3 SNS
3.4 シーケンス
3.5 フォルダ構成
3.6 ソースコード
3.7 テスト
3.8 デプロイ
3.9 削除
CloudFormationトラブルシューティング
第4章 API Gateway と DynamoDB を使った URL 短縮サービス
4.1 概要
4.2 APIGateway
4.3 DynamoDB
4.4 シーケンス
4.5 フォルダ構成
4.6 ソースコード
4.7 テスト
4.8 デプロイ
4.9 削除
DynamoDBのテーブル定義変更
LambdaとAPIGatewayのローカル実行