四半期ごとの個人OKR振り返りです。

2021年1〜3月は、旗を立てるべく複業を開始するというのが主な目標でした。

振り返り対象の個人OKRはこの記事2020年10〜12月ふりかえりと1〜3月OKR 〜旗を立て始める〜で立てています。

OKRの振り返り

3段階で見ていきます。

  • できた
  • 微妙
  • できなかった

Objective 1

旗を立てるための学習を継続し、実績を積み始める

Key Result 1 【できた】

「旗を立てる」宣言をする

  • 旗を立てるの趣旨ややることをまとめた記事を書く
  • TODOを作る

旗を立てる2021年

Key Result 2 【できた】

複業の開始

  • 企業にアプローチする
  • GCP・コンテナ関連の仕事を月30時間くらいからやっていく

2社でインフラ、SRE、バックグランドあたりを見るお仕事をいただきました。ただ、諸事情により計画が大幅に変わりしばらくお休みさせていただくことになりました。よいタイミングで戻れたらと思っています。

本業では異なる形で解決したものをその組織に合う形でどう提案・解決するのか。また、その知見をどう本業に活かすのか。短い期間ながら、どうやって自分が提供できる価値を最大化できるかに関する期待どおりのインプットが得られました。

Key Result 3 【できた】

コンテナの基礎を学ぶ

  • 『Container Security』を読む

Key Result 4 【できた】

留学先と基本要件リストアップする

これは1月当初は設定していませんでした。しかし、2月頃に気づいたら受験生になっていました。いろんな観点で「理由付け」はできるはずですが、本質は闘争という趣味です。理由をつけてやらないといけないものは、理由をつけてやらないこともできるので、その枠外で本気になれそうなものは人生において特に大事にしたいです。

7月1日出願を目指すものの、受かるまで受けるので1年くらい準備するかもしれません。趣味の話はnoteに書きたいので、興味がある方はそちらをぜひ!

Objective 2

新居をととのえる

Key Result 1 【できた】

ルンバを週3かけられる状態にする

  • 捨てる仕分けをしてない箱があるので終わらせる
  • 新居用家具・家電の箱を仕分ける
  • 集中部屋のカラーボックスを撤去する

結果として週2稼働させるようになりました。つぎの理由でi7+を選びました。

  • 家の構造マップを作って、選択した部屋だけ掃除できる
  • ゴミ収集も自動でしてくれるので、本体のメンテ頻度が減る

だいたいルンバだけで事足りますが、たまにカーペットの隙間をダイソンで掃除したり、フローリングをクイックルワイパー的なものでふいたりします。補助的な掃除は想像以上に不要で大満足です。

Key Result 2 【できた】

植物を迎える

  • リビングにビカクシダを迎える
  • ガジュマルを大きい鉢に移す
  • 集中部屋にパキラを迎える
  • 間違って買った造花のパキラを社会に循環させる

植物のある暮らし、よいです!たまに猫たちがリビングのエバーフレッシュをいじめますが、それでもめちゃくちゃよく育ちます。冬にもかかわらず。

ガジュマルはのびのび育ってくれるとよいなぁ。

集中部屋は日当たりよくないので、パキラを迎えました。

ビカクシダは元気かどうかよくわからず少し心配です。

Key Result 3 【できた】

  • 自動掃除してくれるトイレにチャレンジしたい

これは今年買ってよかったものベスト3に入りそうです!人間が毎日数回のトイレ掃除から、基本数週間に一度の砂捨てとそうじをするだけでよくなります。

さらに、トイレのあとに本体が回転してきれいな状態が保たれるので、一番猫たちがうれしそう!もとのトイレから移行する際、小さいタイプに変更した猫砂を食べたりはしたものの、もとのトイレにもすぐ行かなくなり無事使ってくれるようになりました。

商品はこのよくわからない名前のオートメーテッドペットケア キャットロボット オープンエアーというやつです。値段に見合う価値がありました。

12月の中旬に引っ越した新居は、全体としていい感じに整いました。日がしっかり入るのも精神によさそうです。引っ越す前はリビングで仕事してたこともあり、リモートワークで発狂してましたがそういうのも完全になくなりました。

家事の自動化も進み、いっそう集中すべきものに集中できる環境が整ったので、諸々よい決断ができたと思っています。

ログ

OKRとしては追ってないものの、記録しておきたいことのコーナーです。

読書

複業をどういうスタンスでやるのか考える上で読み参考になりました。あえて「副業」でなく「複業」と表記するスタンスの源泉でもあります。今あるスキルを切り売りするのは、自分にとっても自分の顧客にとっても割に合わないです。

会計ソフト開発してた割に会計のことなんも知らんなwwwwww

オーディブルに来てたので聴きました。これなんでスタートアップの経営者的な人々読むんやろ?

たぶんリモートワークで人との雑談が減った人生をどう生きるのかという観点で手にとったはずですが、広々とした家、集中できる部屋、熱中できる趣味(大学院留学準備)で解消しました。単に紛らわせているだけとも言います。

積立投資とロボット投信などに寄せ、なぜか税金観点で一番大事な部分が抜けていました。

複業先がAWSということでざっと読みました。ベンダーや機能名は変われど、エッジのある機能を使わない限りは、ある程度気持ちを察することができる気がしました。

TOEFL初回はあえて丸腰で受験すると言いつつ、どの程度しんどいのかを把握する目的で読みました。80点の人が100点を取得するのに必要な勉強時間は600時間ということで、いろいろと覚悟できました。そこまでかけません。

オーディブルで聴きました。ご本人はさることながら、彼女の両親の子を育てる気概からすごいですね。

10年前、コンサルやろう、MBAとりに行こうと思っていた頃に買った本を再び引っ張り出してくる日がくるとは思っても見ませんでした。

受験生モードなので、つぎの3ヶ月一切本読まなさそうです。

英語

NativeCampで続けていた「カランメソッド」がようやくレベル10までひととおり終わりました。

2月末の初TOEFL後は、複業も徐々におやすみさせていただくことにし、英語のスコアメイクに仕事以外のほとんどの時間を費やし始めていました。

大学院出願英語スコア準備計画

3月は、巷ではあまり見かけない(しかしもっとも筋が通っていて合理的に感じる)文法を教える予備校の授業を受けて英語そのものの足腰を鍛えたり、朝晩にmikanで単語を覚えたり、昼休みなどにTOEFLリスニング教材でシャドーイングしたりしていました。

4月は、それらをもとに問題演習と、スピーキング・ライティングの対策をします。5/3に模試、5/10に2回目の本試験を受ける予定です。

コースの出願要件にはTOEFLスコア100/120点とは書いているものの、調べる限りは90点台で大丈夫そうです。2回目の試験でなんとかそのラインに載せて少し安心したいものです。

Computer science

出願予定のジョージア工科大学のOMSCSは、学部でCSを学んでいれば、あまり不合格になることはなさそうです。しかし、そうでなければ、一般的にコミュニティカレッジで単位を取得したり、あの手この手で「CS修士のコースでやっていくだけの学力がある」ことを示す必要があります。コンピュータ関連の業務経験単体では代替にならないそうです。英語のスコアに並ぶ不安要素ですが、いまではこちらのほうが心配です。

履歴書、志望理由書、大学の成績、IT系資格、推薦書のうち、書類は基本的に4月からしっかり準備するとして3月は資格・単位っぽいものを増やしました。

2月末時点では、講座を提供していたペンシルバニア大学のMCITに出願しようと考えていました。受講して書類で触れるとプラスになると明記してあったので受けました。7月時点で出願するコースではないので、4月以降はData Structures and Algorithmsを受けます。

今後の話

4〜6月はいったん完全に受験生をやります。

Objective Georgia Tech OMSCSに出願する

Key Result 1

TOEFL 100点

  • 5月 90点
  • 6月 100点

Key Result 2

出願書類の準備

  • 4月
    • 履歴書
    • 志望理由書初稿
    • 推薦書依頼
    • 成績・卒業証明書申請
  • 5月
    • 履歴書ブラッシュアップ
    • 志望理由書ブラッシュアップ
  • 6月 資格系入力

Key Result 3

Data Structures and Algorithms

このコースは終わらせられない想定ではあるものの、実際受けて大丈夫そうなら終わらせたいし、英語のスコアが万一早く仕上がったらコンピューターアーキテクチャー系か数学系のコースを積み増したいです。

つぎの振り返りでは、もう出願が済んでいるなんて想像がつかないですね。

技術書典10に関わられたすべてのみなさんお疲れ様でした。

つぎの出展に備えて振り返りたいと思います。

出展した本の内容についてはこちらにまとめています。

技術書典10で新刊『Google Cloud Platformで学ぶTerraform 〜実践編〜』を含む6冊+αを出展します #技術書典

技術書典オンラインマーケットでも、BOOTHでも引き続き販売中です!

手にとってくださった方は、こちらのページで変更内容をお知らせしていくのでぜひ見てみてください。

『Google Cloud Platformで学ぶTerraform 〜実践編〜』

『Google Cloud Platformで学ぶTerraform 〜実践編〜』の正誤表と増補改訂情報 #技術書典

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』の正誤表と増補改訂情報 #技術書典

『KnativeとIngress Gateway』

『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜』の正誤表と増補改訂情報 #技術書典

『Knativeソースコードリーディング入門』

『Knativeソースコードリーディング入門 〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補改訂情報 #技術書典

『Knativeの歩き方』

『Knativeの歩き方 〜KubernetesからServerlessを訪ねて〜』の正誤表と増補改訂情報 #技術書典

『Goで学ぶAWS Lambda』

『Goで学ぶAWS Lambda』の正誤表と増補改訂情報 #技術書典

振り返り

Good

諦めなさ

技術書典10が発表されたのが10月28日。今年の2月くらいだろうと油断していたところ、12月26日まで2ヶ月弱しかありませんでした。

去年3回目の技術書典(= 締切)だったことや、12月に入っても検証が終わらなかったことで何度か折れそうになりました。それでも、実践編はいつ出るのか何人か問い合わせていただいたこともあり、なんとか間に合わせられました。

実践

仕事で得た知見を最大限活かせたと思います。資産として、会社のメンバーに対するオンボーディングに活かそうと思います。

表紙絵

妻に大感謝です。ついでに、ツイッターのアイコンも新しく作ってもらいました。

Challenge

改訂版

すでにいくつか指摘をいただいているので、改訂版を出そうと思います。コマンド間違いの訂正や、説明補足、Terraformのバージョンアップなどです。

ネットワークまわりで、デフォルトのVPCでなくShared VPCを利用するのもあったほうがいいかなぁとは思います。

紙本

前回の振り返りでも、紙本を検討しようとしていました。しかし、まったく時間がなかったので手つかずでした。

次回出展するとしたら、GCP Terraform本を改定するのと、基礎編と実践編を合わせたバージョンを出したいと思っています。

需要を調べ、もしあるようなら紙本を出します。

Zenn

基礎編と実践編を合わせたバージョンを作る段階で、Zennでも出そうと思います。ブラウザで全部読めると楽なのかもしれません。

数字の整理

売上

技術書典オンラインマーケット

12/26〜1/7分

  • Google Cloud Platformで学ぶTerraform 〜実践編〜: 46冊
  • Google Cloud Platformで学ぶTerraform 〜基礎編〜: 6冊
  • JavaScriptとSEO: 2冊
  • KnativeとIngress Gateway 第2版: 1冊
  • Knativeソースコードリーディング入門: 1冊
  • Knativeの歩き方 第2版: 2冊
  • Goで学ぶAWS Lambda 第2版: 4冊

1000円 × 60冊 + 500円 × 2冊 = 61,000円

BOOTH

12/26〜1/7分

  • Google Cloud Platformで学ぶTerraform 〜実践編〜: 20冊
  • Google Cloud Platformで学ぶTerraform 〜基礎編〜: 6冊
  • JavaScriptとSEO: 0冊
  • KnativeとIngress Gateway 第2版: 2冊
  • Knativeソースコードリーディング入門: 2冊
  • Knativeの歩き方 第2版: 4冊
  • Goで学ぶAWS Lambda 第2版: 6冊

1000円 × 40冊 = 40,000円

原価

過去分

前回の売上は、リモートワークに不可欠ないすと、実践編の前提になったProfessional Data Engineerの受験費用と、『Official Google Cloud Certified Professional Data Engineer Study Guide』の購入費用に充てました。

今回は妻用のいすを購入しようと思います。

近年は1年単位の目標は立てず、3ヶ月単位でプライベートOKRを作って振り返るのを繰り返してきました。一方で、方向性なしにその時点の興味だけで突き進むのも積み重なる感じがしないので、ロードマップ的なものも作りました。

それらの点は変わらないのですが、2021年は「旗を立てる」という1年単位のテーマを設けます。

旗を立てる

「旗を立てる」を具体的に言うと「GCPのコンテナ/サーバーレスワークロードで、個人に仕事の依頼がくること」です。

会社の看板ベースではなくて、提供できる価値を明確にした個人宛に相談、開発、執筆、監訳などの仕事がくる状態を目指します。本業を続ける前提で、その知見を活かして実績を積み、さらに本業を加速させる良いフィードバックループをイメージしています。

そうしようと思ったきっかけはこれです。

反応皆無でした。最終的には、Coral Communityに登録した日にいただいたお誘いの中から、現状のスキルセットで一番貢献できそうな企業で複業することにしました。

複業からでも…というお誘いが普段からないわけではないです。ただ、いざ動けるになって発信したときに、何ができる人なのかを認知され、それを裏付ける実績があり、いい形でコラボレーションできる状態でありたいと強く思いました。

提供したい価値

「GCPのコンテナ/サーバーレスワークロード」では、つぎのような価値提供を念頭においています。

  • マイクロサービスたくさんあって大変!をどうにかする
  • そういう系の基盤をこれから作ろうとしているチームのサポート
  • GKEワークロードの管理
  • Cloud Runワークロードの管理
  • マイクロサービス開発(Go)
  • マイクロサービス開発・運用を支えるツール開発(Go)
  • Terraformによるインフラのコード管理

GKEやCloud Runを使ってサービスを提供するチームが直面する課題を解決したいです。もちろん、起こりうるあらゆる問題を解決する知見や経験はないです。

本業では、深さ的にも幅的にもいろいろなプロジェクトに取り組めると思うので、特にやったことのないことに臆せず挑戦するマインドセットをもって強くなります。それを複業での問題解決に活かしたり、(よりよく)再現できる形に文章化したりすることで、さらに本業で新たな問題を解決する力にできると信じています。

提供できる価値をどう示すか

どのような価値が提供できるのかを、さまざまなメディアで伝えたいと考えています。すでにこれまで取り組んできたものでも、より活用しやすいメディアを活用していきます。たとえば、技術書であればZennのようなWebで読んだり、手を動かしたりしやすいサービスを利用するなどです。

  • ポートフォリオ or 事業サイト
    • GCP関連で静的サイトのホスティング
  • 技術書
    • ZennやWebで読めるサービスの活用
    • 技術書典出展継続
  • 技術記事
    • 会社のテックブログ
    • 寄稿
    • Zenn
  • サンプルリポジトリ
  • OSS
  • 音声?
  • 動画?

直近の予定

本業で強くなることが大前提です。それに加えて、今期のOKRにもあるとおりまずは複業をはじめます。

2020年10〜12月ふりかえりと1〜3月OKR 〜旗を立て始める〜

取り組んだこと、解決した課題を再現可能な状態にするための言語化と発信もこれまで以上に行っていきます。そのため、上に書いたメディア関連のTODOを作ってやっていくことを整理します。

もしピンとくることがあれば、ぜひお声がけください!!

プラットフォームエンジニア1年目の2020年を振り返ります。大変だったこと、うれしかったこと、キャッチアップを加速させるためにやったことなど。

2020年

異動

2020年に、マイクロサービスを開発するためのプラットフォームを開発・運用するチームに移りました。

Software Engineer, Microservices Platform

2019年までは、そのプラットフォーム上で稼働するマイクロサービスを開発・運用していました。2018年9月の入社当初、GCP、Kubernetes、Goの業務経験がなかった状態で設計〜リリースまでを担う中で、プラットフォームが提供する機能に大いに助けられました。

一方で、サーバーレスなテクノロジーが好きだったり、Kubernetesを学ぶ中でKnativeに出会ったりしたことで「マイクロサービス開発者から見たプラットフォームの利便性」はもっと向上できるのではないかと思い、Microservices Platformチームに参加させてもらうことにしました。

1年目にやったこと

列挙するとつぎのようプロジェクト・役割に携わりました。

  • オンサポート(複数回)
  • Istioワークショップ
  • Network Policyの導入
  • Disaster recoveryテスト
  • リライアビリティ強化

6週間毎に、担当が変わります。

オンサポート

最初はオンサポート(とオンボーディング)でした。マイクロサービス開発者から寄せられるサポート依頼に対応します。オンボーディング観点では、アーキテクチャやリポジトリなどには馴染みがあったので、KubernetesクラスターやTerraform周りのオペレーションや、プラットフォームチームが開発・運用しているコンポーネントのキャッチアップが中心でした。

Terraformは何も知らなかったり、KubernetesのオペレーションはマイクロサービスのデバッグやCKADで出てくる範囲くらいしかわかりませんでした。そのため、

検証環境でやるのを見せてもらう -> 開発環境や本番環境でついてもらってやる

というペアオペレーションが多かったです。フィードバックも毎日夕方に1on1してもらって、改善の日々でした。

マイクロサービス開発時に自分もわからなくて頼っていたエラー対応が、チームを移ったからといって即座にわかるようになるわけがありません。間をおいて何度かオンサポートを担当したり、他のプロジェクトに取り組むなかで理解を深めました(今もなお。アサインに配慮を感じつつ)。

Istioワークショップ

Istioワークショップは、Istio何もわからんの状態からいろいろキャッチアップして、マイクロサービス開発者向けに「サービスメッシュとは何か」を話したり、マイクロサービスのテンプレートとなるマイクロサービスで実際にIstioの機能を試すハンズオンセッションです。

外出自粛直後の3月の開催だったので、慣れないながらもSlackでコミュニケーションしつつ、Google Meetでスライドやターミナルをシェアしながらがんばりました。マイクロサービス開発者目線では、どんな便利なプラットフォームの機能も、機能開発が忙しいときには導入やキャッチアップ自体がかなりのハードルです。こういう試みは大事と思いつつ取り組みました。

つぎの本、Udemyの講座、登壇が特に役立ちました。

ドキュメメントは読みますが、最初にDemoを含む動画で概要をつかむと捗りました。

Network Policy

Network Policyの導入は、KubernetesのNetwork PolicyをTerraformモジュールも利用しつつマイクロサービス開発者が利用できるようにするものです。

今回は利用しない機能、デフォルトで有効にすべきポリシー、サポートするユースケース、段階的な移行方法などを議論しながらDesign Docを書きました。議論のスコープに、Network Policyに限らずプラットフォームコンポーネント全体に影響する事柄もあったことから、シュッと決めきれず難しさを感じました。しかし、ユーザーインターフェースとしてのTerraform variableや、設計議論の進め方など、学ぶことが多かったです。

また、導入にあたり希望マイクロサービスのベータテストを行い、フィードバックをもらって改善するプロセスなどは「プロダクトとしてのプラットフォーム」を強く感じました。

会社のテックブロクは書きませんでしたが、技術的にはつぎの記事のようなイメージです。

Terraform Kubernetes Providerとkindで試すNetworkPolicy

こういうユースケースのテストにこそTerratestを使ってみたかったです。最近出した本中のモジュールで、はじめて使いました。

Disaster Recoveryテスト

Disaster Recoveryテストは、GCPのTokyoリージョンが利用できない状態になったら…を想定して、すでに用意していたDisaster Recovery計画に基づきOsakaリージョンでサービスを一時的に立ち上げるものです。

クラスター内のリソースバックアップにVeleroを利用し、復旧用スクリプトを用意するなどしました。チーム横断的にとりくむプロジェクトだったので、あえて議論の枠を準備したり、定例や振り返りをリードしてみたりに挑戦しました。

リライアビリティ強化

リライアビリティ強化は、Datadogのモニター、ダッシュボードなどを見直たりしていい感じにアラート対応できるようにする取り組みです。

数百あるDatadogのモニターをすべてリストアップし、Playbookがないものを洗い出して追加したり、よくアラートが鳴るものの原因を調査したり、絶賛年末大掃除みたいな感じでした。

メンバーが増えて、再現可能な状態でオンコールにオンボーディングするには、適切な閾値でアクションのとれるアラートが鳴るのは大前提です。

その他

インターンメンバーの面接・メンターも担当しました。これまで、中途メンバーの面接やメンターはやったことはあったものの、インターン関連でははじめてです。

これがすべてです。

メンターという形ではなくても、プロジェクトのリードとして新しく入ってくる方のサポートをする機会もたくさんありました。学びの機会にあふれています。

キャッチアップとアウトプット

もちろん、業務中も必要なキャッチアップ時間やサポートはありました。しかし、僕は闘争する民族なので、これまでもやっていたプライベートOKRで四半期毎に身につけたいことを決めて取り組みました。キャッチアップすべきことは無限にあるので、「この四半期はこれ以外はやらない」をはっきりさせる意味合いが強いです。

OKRは、各記事でなぜそれが達成したいのかや、どの程度達成したのかなどの振り返りと合わせてまとめています。

2019年10〜12月の振り返りと2020年 〜YAML Engineerとしての闘争〜

2020年1〜3月ふりかえり 〜HCLエンジニアとしても闘争〜

2020年4〜6月ふりかえり 〜より抽象的なプラットフォーム仕草を身につける〜

2020年7〜9月ふりかえりと10〜12月OKR 〜プラットフォームエンジニア設計譚〜

2020年10〜12月ふりかえりと1〜3月OKR 〜旗を立て始める〜

資格

1年と少しで、KubernetesとGCP関連の試験をいくつか受け合格しました。

  • 2019/12: Certified Kubernetes Application Developer (CKAD)
  • 2020/3: Certified Kubernetes Administrator (CKA)
  • 2020/6: Google Certified Professional Cloud Architect
  • 2020/9: Google Certified Professional Cloud DevOps Engineer
  • 2021/1: Google Certified Professional Data Engineer

Kubernetes関連のものは、テストでも準備でも実技不可避だったので取り組みました。Kuberneteクラスターのバージョンアップなどでかなり役立ちました。

GCP関連のものは、それぞれ動機が異なります。Cloud Architectは、Terraformの本を書こうとしたらGCPの基礎理解がなさすぎて書けなかったからです。執筆を一時中断し、あわてて『Official Google Cloud Certified Professional Cloud Architect Study Guide 』を読みました。模試Webサービスつきなことや、物心ついてからクラウド概論に触れてなかったこともあったりで役立ちました。文章に品があって良いです。

Cloud DevOps Engineerは、SREの原理・原則を理解したかったタイミングで確認テストとして受けました。テキストは『サイトリライアビリティワークブック ―SREの実践方法』です。

Professional Data Engineerは、GCPのDBまわりをざっくり知りたかったのと、Terraform本にデータパイプラインの例を足したかったので勉強しました。安定の『Official Google Cloud Certified Professional Data Engineer Study Guide』が教材です。

極論資格として取得できてなくてもよかったですが、どの時期に何を勉強していたかがわかりやすくていいですね。

執筆

1年で3冊の本を執筆・改定しました。毎Q締切があってきつい1年でしたが、取り組んでよかったです。

Knative本は、同僚に「なぜIstio(VirtualService)を使わずにKnativeはトラフィックスプリッティングのような機能を実現できるのか」と質問されて答えられなかったのがきっかけで調べることにしました。ちょうどIstio関連のプロジェクトに取り組んでいたタイミングで、ネットワークまわりをいろいろ調べられました。

Terraform本は、GCPでTerraformを体系的に学ぶための情報がないという問題意識に基づき書きました。

特にオンサポートをやる上では、Terraformのデバッグは必須です。また、何かプラットフォームとして機能を提供する際には、Terraformモジュール設計が大体必要です。自分が実務に取り組む前に知っておきたかったことをまとめました。

さらに、マイクロサービスの開発者にとっても、有益な情報であると考えました。たとえプラットフォームがモジュールを提供しても、マイクロサービス独自に利用するリソースについては、現状Terraforを書かなくてはいけません。エラー調査をプラットフォームチームに依頼する際も、大まかな仕組みや原因がある程度わかった方が容易です。プラットフォームのエンジニアとしては、困ったら頼ってほしいと思いつつ、マイクロサービス開発者としては、頼っていいものなのか自分たちでなんとかできるものなのか切り分けできたかったという思いがありました。そういうものを意識しなくても、開発に集中できるプラットフォームを目指しているのは言うまでもありません。

(前年比)業務に密接に関連した執筆は「あ、これ昨日検証したやつや!」の連続で、本業に活きていている感がすごかったです。

ついでに、売上で椅子が得られたりしたのでとてもよかったです。

7〜9月のKRのひとつに掲げていたのが「学び方の改善」です。

学び続ける生き物は、その学び方を改善することで得られるメリットが計り知れないほど大きいです。

エンジニアの知的生産術 ―効率的に学び、整理し、アウトプットする』を読んだり、チームの人のおすすめリストを読んだりしながら自分なりに読書リストを作って進めています。意識的にOKRに関連させるようにしています。これら以外は読まないというわけでもないですが、読むのが速くないので特に大事なものに絞る必要があります。

Platform Engineerへの闘争🐸

読み終わった本。

こういうのも親身に相談に乗ってもらえるので、安心して闘争できるのがうれしいです。

複業

サーバーレスコミュニティのつながりもあり、複業にも取り組みました。以前いったんは始めたものの結局タイミングやフェーズ合わなかったり、執筆や寄稿もある意味複業とは思いますが、案件に入っていくのは初めてです。

いつか一緒になにかできたら…と思ってた方々と一緒に仕事できてよかったです。一方で、あまり案件に深く入れないまま終わってしまったので残念でした。SlackでGCPの質問に答える係を3ヶ月担当しました。

フロントと認証・認可まわりは課題っぽいです。

2021年

2021年のことも書こうとしたのですが、思ったより長くなったので別記事にします。

業務的には、引き続きPlatform Engineerへの闘争を進め、プラットフォームエンジニアとしての運用ももっと楽にできるようにしたり、マイクロサービス開発者向けにサーバーレスで想起されるような体験を提供していきたいです。

四半期ごとの個人OKR振り返りです。

2020年10〜12月は、設計のプラクティスを念頭に置いて、より実践的な設計・開発のアウトプットをするのが主な内容でした。

振り返り対象の個人OKRはこの記事2020年7〜9月ふりかえりと10〜12月OKR 〜プラットフォームエンジニア設計譚〜で立てています。

OKRの振り返り

3段階で見ていきます。

  • できた
  • 微妙
  • できなかった

Objective 1

設計よくしていこうな

今年学んできた個々の技術を組み合わせて、保守性と信頼性が高いサービス設計を学び、実践する。

Key Result 1 【できた】

・12月の技術書典10で『Google Cloud Platformで学ぶTerraform 〜実践編〜』を執筆する
・『サイトリライアビリティワークブック ―SREの実践方法』を読む
・Professional Data Engineerを受ける
・『Official Google Cloud Certified Professional Data Engineer Study Guide』を読み、模試を解く
・『A Philosophy of Software Design』を読む

このKRがも最重要なため、KR2、KR3が厳しく感じたら迷わずKR1を選ぶ。


技術書典10では、新刊『Google Cloud Platformで学ぶTerraform 〜実践編〜』を無事出すことができました。

技術書典10で新刊『Google Cloud Platformで学ぶTerraform 〜実践編〜』を含む6冊+αを出展します #技術書典

本のメインテーマとなるモジュールやCI/CDの検証ではまりにままり、終わったのが12月6日。何度か折れそうになりましたが、なんとか間に合ってよかったです。

前Qから読んでいたSREワークブックは読み終わりました。サービスの運用やSREの原理・原則を意識して働かざるをえない以上、不可欠な知見に目を通せた気がします。

さらに、Googleの分散システムや、GCPのアーキテクチャを例に説明している部分も多く、純粋に面白かったです。

特に、Non-Abstract Large System Design(NALSD)は、ある設計をするとどういう問題が発生するのかを具体的に計算しながら段階的に設計改善していく話で、特に身につけたいなと思いました。AdWordsを例に解説されています。

https://sre.google/workbook/non-abstract-design/

これもよさそう。

SRE Classroom: 非抽象的な大規模システム設計の演習

ある程度実務経験も増えると、原理・原則の話をされても腹落ちすることが増えると思います。そういうものに意識的に触れて、成長にレバレッジをかけたいものです。

Professional Data Engineerは、技術書典10脱稿後すぐに『Official Google Cloud Certified Professional Data Engineer Study Guide』の模試を解き、点のよくない章から勉強し、1月2日に合格しました。2週間の冬休みは、原稿とテスト勉強で終わりました。

本当は、いい感じのデータパイプラインのアーキテクチャ例を『Google Cloud Platformで学ぶTerraform 〜実践編〜』に盛り込みたかったです。でも間に合いませんでした。

詳細は各サービス使ってみなわからん、みたいな部分が多かったです。それでも、気持ちは十分に学べたので、今後の業務や複業などで肉付けしていこうと思います。

A Philosophy of Software Design』は、文字通りソフトウェアを設計する上で意識すべき指針について書かれたものです。具体的に名前がついている設計パターンよりも抽象的なもの。

設計手法を適用するよりも、「こう設計したらどう困るだろう?」と考えるための言葉がたくさん散りばめられているので、何にでも適用できそうです。『Google Cloud Platformで学ぶTerraform 〜実践編〜』でも、Terraformモジュール設計に活きました。原則に沿って、地に足のついた問いかけを積み重ねていくとよさそうです。

Key Result 2 【できなかった】

Cloud Runのユースケース集を世に送り出す

・Serverlessなカンファレンスがあればワークショップ、なければZennなどで出す
・『Building Serverless Applications with Google Cloud Run


なにもできませんでした。EAPのときに読んだ『Building Serverless Applications with Google Cloud Run』にざっと目を通したくらいです。

きっとこれからもっと使うサービスだと使うと思うので、気長に…

Key Result 3 【微妙】

KompalWeatherをGAに

  • production用のプロジェクトに移す
  • BigQuery MLで混雑状況予測
  • UIを生やす
  • ログ・エラーレポート周り改善

このサービスの混雑状況監視対象サウナがある地域から引っ越したので優先度が…というのはおいといて、KR1との兼ね合いで、ほとんど時間が避けませんでした。

BigQuery MLは、クエリ書くノリでモデル作成できてすごい…!という感じでした。技術として。

このサービスを作った目的は、より空いてるタイミングでサウナに入りたいというものでした。しかし、「混雑」状態で入店しても同時にサウナに入る人が少ないときは少ないし、「空いてる」状態で入店してもサウナでぎゅうぎゅうになることがあって「混雑状況見ずに行きたいときに行けばよい」が結論になりました。検証できてよかったです。

この登壇も含め、Cloud Runにしっかり触り、Terraformも積極的に活用したのはよかったです。

UIは思うところがあるので、別の文脈でなにか書きます。

Objective 2

Key Result 1 【できた】

嫁氏のストレスを軽減する


Fitbit Senseをプレゼントして、ストレスを定量的に把握することからはじめました。

家事一覧とそれの分担・自動化度を表にしたりしました。引越も大きい。今回に限らず続けていく所存です。

Key Result 2 【できた】

ミファーを護り抜き、あの頃のように遊びに行く


去年出会って一番よかったのは、ダントツでゼルダの伝説 ブレス オブ ザ ワイルドです。日々プライベートOKR達成に向けて腐心し、それ以外の事柄に手放しで身を委ねることができなくなっていました。そんな中で、OKR達成のための時間を削ってでも、夢中になって取り組みたいと思える楽しみ。それがこのゲームでした。

続編がこのゼルダ無双 厄災の黙示録。体験版も済ませ、発売日にゲームソフトを買うのも小学校ぶりかもしれません。

ただ、技術書典10の準備も佳境だったので、2日間集中してメインストーリーを終わらせました。ひたすらエモかったです。1月以降もう少しやり込もうと思います。

Key Result 3 【できた】

旅行する

ふるさと納税奴で石川県に行くか、GoToの波に乗るか、それともシー=>ミラコスタ=>ランドの夢を叶えるか…日常の物理的範囲が狭まる中、非日常を得たいです。


GoToの波に乗り、新宿のパークハイアットホテルに宿泊しました。目的は、宿泊者は滞在中何度でも入れるサウナ「クラブ オン ザ パーク」です。贅沢とは何かを知りました。

感想

一昨年のふるさと納税で石川県の宿の宿泊券をもらったのですが、結局行けずじまい。状況が状況なので電話してみたところ、期限を1年延長してもらえました。今年は満を持して訪問したいものです。

Key Result 4 【できた】

(不確定要素はある中で)もし居住エリアに職場の制限がないなら、どこにどう住むのがよいか?みたいな話を最近よくします。その中で今の家はよいという話や、もっと広い家に住みたいという思いがあります。よい椅子を買ったのでもう十分という気持ちもあります。

更新タイミングも近いので、どうするか2020年時点の結論を出します。


引っ越しました。去年の物件では、間取り的に夫婦でMTG時間がかぶると厳しかったのが最大の要因です。

キャッツ、サウナ、間取り、広さを最大限考慮したことで、最高の生活を得ました。引越については、別途noteで書こうかなと思っています。

ログ

OKRとしては追ってないものの、記録しておきたいことのコーナーです。

読書

ここまでで書いたもの以外です。

感性が限りなく鈍ってる感じがしたので、読んでみました。これを読まなかったら、集中部屋はモノトーンになっていたはずです。はずれのない色で埋め尽くすより、ちょっとせめて楽しんでみようと思うようになりました。

この記事を読んだのがきっかけです。

明治時代に東大農学部の教授をやられてた方の投資・人生哲学です。経験、資産、信頼の積み重ね方が尋常でなくてすごかったです。

このツイートを見たのがきっかけです。OKRを追いかけるのがわたしの人生か?は常々思ってるんですが、ここまで振り切れたら(「人生最大の幸福とは、職業の道楽化である」の部分)立派やなぁと思います。

最近聞き始めて、途中です。タイトルに対して正直に答えると、楽しくはないんですよね。人生に対して構えすぎてる感がある。

幸せは人との関わり合いの中で見出すもの(よく覚えてない)的な話の中で、去年はほんとうに雑談減ったなぁと思ったし、プライベートでの人との関わりがなさすぎて余計につまらなかった気もしました。

勉強会のあとの懇親会ていどの絡みもほとんどなかったです。片手で数えるほどですが、オンラインで他社のエンジニアと話したのは楽しかった。

今年はもう少し人間味のある活動しようかなぁと思います。

やーこれは売れるわ(事実)。世界中でベストセラーになる。

コンマリ先生の本はじめてよみました。片付けのハウツー本ではなく、人生哲学です。ものを捨てるのも、(引っ越ししたのも、)より好きなものに出会い、そういうものに囲まれて暮らすため。引っ越しタイミングでかなりいろんな本、服、小物などなどを捨ててすっきりしました。

あとコンマリ先生の人生がロックで、めちゃくちゃかっこよかったです。ここまでこだわりもって生きられたらかっこいい。

何書いてたか何も覚えてないです。

引っ越したら観葉植物も家族に迎え入れるか〜と思って読みました。ふるさと納税でエバーフレッシュパキラをもらい、パキラは造花で萎えました。

ビカクシダを迎えるための壁を用意したりもしてます。

本ではないです。寝る前には紙の本を読むのですが、紙本はもっと減らしたいので目が覚めない端末を確保しました。もともと電子書籍はFire HDで読んでたのですが、ちょっと明るすぎたので。

サイズも気にならないし、ページもめくりやすいし、明るさも調節できるのでいい感じです。

英語

10〜12月の英会話(NativeCamp)の受講状況はこんな感じでした。

  • 10月: 32回、13時間21分
  • 11月: 27回、11時間15分
  • 12月: 28回、11時間40分

引き続き「カランメソッド」を中心に受講しています。10分冊の9冊目がもう少しで終わりそうです。

12月からは、特定のトピックに関してされる質問に答える「5分ディスカッション」というのをはさむようになりました。週8レッスン(火、木、土、日に25分×2)のうち、2回を充てています。

以前であれば原稿の締切や引越など、大きなイベントがあると途絶えてそれきりだったと思うのですが、ちゃんと持続する習慣は作れるようになったのかなぁと思います。特にカランメソッドは話題を自分で作らなくていいのでペースを作りやすいです。

一方で、仕事で話す英語も定型的なMTGでは「全文スクリプト」とか作らなくても話せるようになった気がするものの、オンライン飲み会(英語)はまだまだきついです。きつさの内訳が全部英語能力ということはない(話題提示とか)ものの、関心の強いテーマ(猫、サウナ、技術書執筆)を振ってもらうのに対し、自由に表現できてないなぁとも感じます。

いまの学習スタイルを継続するべきか、テコ入れすべきか判断できないのが困ります。

今後の話

今年は「旗を立てる」をやります。プラットフォームエンジニアとしてのキャリア、それを支える技術・考え方の学習は引き続き。詳しいことはきっと別記事で書きます。

2021年1〜3月のOKRです。OKRなしでいこうかなとも思っていたのですが、ゆるめに置くことにしました。

Objective 1

旗を立てるための学習を継続し、実績を積み始める

Key Result 1

「旗を立てる」宣言をする

  • 旗を立てるの趣旨ややることをまとめた記事を書く
  • TODOを作る

Key Result 2

複業の開始

  • 企業にアプローチする
  • GCP・コンテナ関連の仕事を月30時間くらいからやっていく

Key Result 3

コンテナの基礎を学ぶ

Objective 2

新居をととのえる

Key Result 1

ルンバを週3かけられる状態にする

  • 捨てる仕分けをしてない箱があるので終わらせる
  • 新居用家具・家電の箱を仕分ける
  • 集中部屋のカラーボックスを撤去する

Key Result 2

植物を迎える

  • リビングにビカクシダを迎える
  • ガジュマルを大きい鉢に移す
  • 集中部屋にパキラを迎える
  • 間違って買った造花のパキラを社会に循環させる

Key Result 3

  • 自動掃除してくれるトイレにチャレンジしたい

2020年12月26日(土)〜2021年1月6日(水)に開催される技術書典10で6冊出展します!

カエルと空というサークルで、このページから出展しているのでぜひのぞいて行ってください!

カエルと空のサークルページ

出展する本を紹介します。

『Google Cloud Platformで学ぶTerraform 〜実践編〜』

前回出した基礎編の続きです。基礎編の内容理解を前提とし、モジュールの設計、リント、バリデーション、テスト、CI/CDなどのより実践的な内容をお届けします。

正誤表・増補改訂情報はこちらのページで公開しています。

『Google Cloud Platformで学ぶTerraform 〜実践編〜』の正誤表と増補改訂情報 #技術書典

すでにBOOTHで電子版をご購入いただける状態になっています。

https://toshi0607.booth.pm/items/2629085

登場するほとんどのサンプルコードも、GitHub上で公開予定です。

目次です。

第1章 はじめに

第2章 環境構築
2.1 GCPアカウント
2.2 GCPプロジェクト
2.3 Google Cloud SDK
2.4 tfenv
2.5 Hashi CorpTerraform
2.6 まとめ

第3章 2層アーキテクチャ
3.1 アーキテクチャの概要
3.2 アーキテクチャの詳細
3.3 Terraform化
3.4 安全な変更
3.5 まとめ

第4章 アーキテクチャの全体像
4.1 アーキテクチャの概要
4.2 Terraformモジュール
4.3 まとめ

第5章 Projectモジュール
5.1 モジュールの機能
5.2 組織の作成
5.3 モジュールの開発
5.4 まとめ
[コラム]GCPプロジェクトのクオータ緩和申請

第6章 Clusterモジュール
6.1 モジュールの機能
6.2 モジュールの開発
6.3 まとめ
[コラム]モジュールのパス
[コラム]モジュールの埋め込みとコンポジション

第7章 Microservicesモジュール
7.1 モジュールの機能
7.2 モジュールの開発
7.3 まとめ

第8章 リントとバリデーション
8.1 terraform fmt
8.2 terraform validate
8.3 TFLint
8.4 Conftest
8.5 まとめ

第9章 テスト
9.1 Terratest
9.2 Projectモジュール
9.3 Microservicesモジュール
9.4 まとめ
[コラム]テストの磨き込み

第10章
10.1 Cloud Build
10.2 事前準備
権限付与
Step実行用のコンテナイメージ
CloudBuildとGitHubの連携
10.3 ソースコードと変更差分の取得
10.4 Terraformの検証‧実行
10.5 モジュールのテスト
10.6 まとめ
あとがき

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』

僕は、マイクロサービスを開発するためのプラットフォームを開発・運用するチームで2020年から働き始めました。それ以前の仕事は、バックエンドエンジニアとしてのマイクロサービス開発です。プラットフォームチームが開発したTerraformモジュールに設定を渡し、GCPやKubernetesのリソースを作成していました。

いざそのモジュールを作成したり、エラーのデバッグをする立場になってみると何もわかりません。つぎのような疑問がわきました。
・モジュールとは何か
・複数のリソースから構成されるアーキテクチャはどう組み立てるのか
・なぜ Terraform の状態と実際のクラウドリソースの状態はずれるのか

Terraformの概念や個々のリソースの使い方、GCPを利用したサンプルのモジュールはたくさんあります。Terraformに関する書籍もあります。
しかし、Terraformの具体的な説明に登場するクラウドは、ほとんどがAWSです。クラウドアーキテクチャの設計経験も多くはない著者にとって、AWS ベースで説明された内容をGCPに置き換えながら学ぶのはとても大変でした。そこで、この本を書くことに決めました。

AWSからGCPへの翻訳をせず、クラウドの設計やTerraformをGCPを通じて学べる本。半年前の僕が欲しかった本です。この本を通じ、Terraform をより身近に感じる人が増えたら幸いです。

正誤表・増補改訂情報はこちらのページで公開しています。

『Google Cloud Platformで学ぶ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

正誤表や増補改訂情報ページはこちらです。

『Knativeの歩き方 〜KubernetesからServerlessを訪ねて〜』の正誤表と増補改訂情報 #技術書典

目次です。

第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

GoとSAMで学ぶAWS Lambda

目次です。

第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のローカル実行

このページでは『Google Cloud Platformで学ぶTerraform 〜実践編〜 第2版』の正誤表と増補・改訂をお知らせします。

この本を手にとってくださった方がちょっとでも選んでよかったと思う本に育てていきたいので、章の追加なども楽しみにしていてください。

増補・改訂版は購入方法に応じて異なります。

  • ダウンロードカード: Googleドライブ。バージョン毎にフォルダが分かれています。
  • 技術書典のサイト: 技術書典サイトのマイページ。常に最新版をアップロードしています。
  • BOOTH: BOOTH購入ページの注文詳細画面。常に最新版をアップロードしています。

引き続きフィードバックお待ちしてます!@toshi0607

正誤表

PDFページ PDF反映 ePub版反映 修正日 version
6 switch use done done 2021/1/10 v1.0.1
41 Secert Secret done done 2021/1/10 v1.0.1
77 gsutil mb -l ASIA-NORTHEAST1
-p 【YOUR PROJECT】 【YOUR PROJECT】
gsutil mb -l ASIA-NORTHEAST1 -p
【YOUR PROJECT】 【YOUR BUCKET】
done done 2021/1/10 v1.0.1
77 gcp_project = 【YOUR PROJECT】 (削除) done done 2021/1/10 v1.0.1
83 [PROJECT_NUMBER]@cloudbuild.
gserviceaccount.com@cloudbuild.gserviceaccount.com
[PROJECT_NUMBER]@cloudbuild.
gserviceaccount.com
done done 2021/1/10 v1.0.1
37 service microservice done done 2022/8/28 v2.0.0
69 tf validate terraform validate done done 2022/8/28 v2.0.0

増補・改訂

PDFページ 内容 PDF反映 ePub版反映 修正日 version
36 クレデンシャル情報の設定追記 done done 2021/1/10 v1.0.1
8章 リソース名にexampleサフィックスを追加 done done 2021/1/10 v1.0.1
全体 バージョン更新 done done 2022/8/28 v2.0.0
18 scopesをcloud-platformに done done 2022/8/28 v2.0.0
23 key_algorithmを削除 done done 2022/8/28 v2.0.0
45 identity_namespace -> workload_pool done done 2022/8/28 v2.0.0
47 GKE_METADATA_SERVER -> GKE_METADATA done done 2022/8/28 v2.0.0
47 oauth_scopesをcloud-platformに done done 2022/8/28 v2.0.0
59 Artifact Registry GA done done 2022/8/28 v2.0.0
69 GCPのルールセットGA done done 2022/8/28 v2.0.0
71 TFLint初期化にtflint --initを利用 done done 2022/8/28 v2.0.0
72 TFLintデフォルトのルールセットを追加 done done 2022/8/28 v2.0.0
73 Conftestサポート対象を更新 done done 2022/8/28 v2.0.0
83 公式のモジュールテスト状況を追加 done done 2022/8/28 v2.0.0
86 go mod利用方法を更新 done done 2022/8/28 v2.0.0

リソース

四半期ごとの個人OKR振り返りです。

2020年7〜9月は、プラットフォームエンジニアとして必要な技術要素を学びつつ、レバレッジの効くプラクティスの中でも特にDevOps/SREを学ぶのが主な内容でした。

振り返り対象の個人OKRはこの記事2020年4〜6月ふりかえり 〜より抽象的なプラットフォーム仕草を身につける〜で立てています。

OKRの振り返り

3段階で見ていきます。

  • できた
  • 微妙
  • できなかった

Objective 1

プラットフォームのインフラを支える技術の基礎力向上

Key Result 1 【できた】

Terraformの概念、書き方を理解しデバッグできる

  • 技術書典9で『GCPで学ぶTerraform』を書く

本は「基礎編」になってしまったものの、出展できました。

技術書典9の『Google Cloud Platformで学ぶTerraform 〜基礎編〜』の振り返り #技術書典

直近の四半期は、Terraformのステートのデバッグができないと終わり!!!という状況でした。最初は詳しい同僚にコマンドをレビューしてもらいながらおそるおそるやっていたオペレーションももう大丈夫です。

また、振り返り記事でも触れているように、執筆と読書を通じて「学びのフォーム」自体を体系化できるようになってきたと思います。

個別の技術を理解する。目の前の本を締め切りに間に合わせる。どちらもこのKR達成には不可欠です。

ただ、長期的に大事なのは、学び方自体を改善し続けることや、新しいやり方に挑戦して習得し、これまでと違うスピードを体感することです。

Key Result 2 【できた】

DevOpsのプラクティスを身につける

チームの先人たちが組織に根付かせてくれたDevOpsやSREの文化はとても多く、日々学びがあります。しかし、新しく自分が何かを導入するとき、運用を考えるときの共通言語となるため、それらの起源を自分でたどるのはめちゃくちゃ有益です。

KRのアクションアイテムの中では、特にサイトリライアビリティワークブックがよかったです。SLI/SLO/SLAの考え方やエラーバジェット、ポストモーテムなどはもちろん、大規模システムの継続的設計改善(NALSD)の話や負荷分散の話など第二部の話が参考になりました。具体的事例なので、業務で活かす場面もイメージしやすいです。ただ、読み終えられなかったので次Qも継続します。

試験は無事でした。Q開始時点ではリモート受験非対応でしたが、途中で受けられるようになったので9月末受験で予約しました。

CKAD、CKA、Professional Cloud Architectとすべて自宅で受けれてよかったです。教材はすべて英語だったものの、本番の問題は日本語でした。一方で、Professional Cloud DevOps Engineerは日本語未対応なため、初英語受験。これからは英語でいいかなぁと思いました。教材も業務も英語です。

準備で読んだ『Google Cloud Professional Cloud DevOps Engineer Exam - All in One Guide: Get Certified Efficiently in Google Cloud!』はオススメできません。説明内容は可もなく不可もなく(英語はおかしいし、別の本のフォーマットがかなり残っているので推敲してほしい)ですが、各章や最後に付属しているテスト問題・解答ともに品質が厳しいです。SRE本とOperationsの公式ドキュメントを読むとよさそうです。

今回の目的に合う形で、複業で手を動かす機会はありませんでした。しかし、8月から開発しているCloud Runでホストするアプリケーションでは、TerraformとGCPのCI/CDサービスやログ、モニタリング系サービスなどに触れることができました。運用するモチベーションのある、コントローラブルな個人サービスのありがたみを感じました。

実務の経験が足りないと感じる部分は多いので、経験するためのアクションはとっていく所存です。

Key Result 3 【できた】

学び方の改善

以前途中まで読んだ本ですが、前Qに「知的生産のフォーム作り」の必要性を強く感じたので読み直しました。本に書いてあることは変わりませんが、本を読む自分の経験は絶えず変わります。本の内容を理解するに足る経験をある程度積んだ状態でその本に出会えると効果的かなぁと思います。本で提示されるモデルを自分の経験で検証できない場合、知識としては増えても自分の中に構築しているモデルがブラッシュアップできません。

読む本のリストはNotionにまとめました。

Platform Engineerへの闘争🐸

区分は便宜的ですが、現在目指している一人前プラットフォームエンジニアに必要と思われる技術要素やプラクティス、思考を含めています。どうなったら、何ができたら一人前か、一人前になってどんな問題が解決したいのかはあまり考えていないので、あくまでも方向性の話です。OKRの中にいい感じに組み込みます。

ベースはtcnksm/recommended-books-2020です。実際に読んでみると、学びの多い本(プラットフォームチームで働く上でレバレッジが効く)ばかりに思います。たぶんプラットフォーム周りのエンジニアでなくても学びが多いです。

Objective 2

より気持ちよく暮らす

重要だが緊急性が低く、積極的にやる気も起きないので放置していたことを片付けます。

Key Result 1 【微妙】

断捨離と整理

  • いらない服捨てる
  • 紙の本減らす

紙の本はたくさんメルカリで売りました。新しく本を買う場合ほとんど電子にしていた一方で、本棚は2列詰め込んで放置している状態でした。(文庫本以外)そういう状態が解消しました。

服の断捨離には着手できず。外出しなくなり、場所を占拠しているだけ率はさらに高まっているので減らしたいものです。

古くなったTシャツは一掃して10YCとかで揃えようかなとか思っています。

Key Result 2 【できた】

猫たちとのよりよい共生

  • 大きいトイレに交換する
  • ラムちゃん去勢
  • ふわふわくん外散歩できるようにする

トイレはメガトレーというかなり大きいものを購入しました。

ふわふわくんけっこう大きいんです。おかげでメンテコストも下がり、猫も人間も快適です。

ラムちゃん去勢直前の1週間は壮絶な戦争でした。

ふわふわくん外散歩はまだかなわずです。抱っこして供用の廊下を歩きはするんですが、それを求めて玄関で鳴くなどしています。

Key Result 3 【できなかった】

ume, yamazoeに行く(状況が許せば)

状況が許さなかったので行ってないです。クラウドファンディングのチケットがあるので、来年6月までには…

Key Result 4 【できた】

冷蔵庫買い換えるか検討する

もうちょっと今のにがんばってもらいます。

ログ

OKRとしては追ってないものの、記録しておきたいことのコーナーです。

読書

記事中ここまでで書いた以外のものです。

Cloud Runを触る中でSandbox: Unsupported syscall系のエラーに何度か出会いました。サンドボックスを含むコンテナランタイムやシステムコールもそろそろ学ぶタイミング!Goで学べる!ということで、就寝前の紙本枠(ブルーライト避けたい)で少しずつ読んでいます。きっと実装力++です。コンテナは別途。

プラットフォームエンジニア本の中ではまずこれ!と言われたので素直に読み始めました。具体的設計手法より一段抽象的な「設計する上で避けたいこと」が書かれていて、顧客が求めていたものっぽいです。

今年1月からプラットフォームエンジニアへの闘争をする中で主要な要素技術を見てきましたが、次Qでは設計に足を踏み入れる予定です。その中でこの本は大事な役割を果たしてくれそうです。

オーディブルで利用できるようになったので、久々に復習しました。「何を解くべきか?」を見誤らないことで、ゼルダをプレイする時間が増やせます。

同僚がすごいリノベをやり遂げててすごかったので影響を受けました。

あと著者ちきりんさんが「職業とか人生とかと同じで、人気とかスペックとかで決めてしまうこともあるかもやけど、自分がどう暮らしたいかを決めろ」みたいなことを言ってて(元Tweet見つけられず)、最初はピンときませんでした。でも、自分がスペックと写真の差で探そうとしてて、なるほど至言やなと思ったので、思考過程を追ってみることにしました。

首都圏から出るときに失うものの知見を得られました。中身あんまり覚えてないなぁ…。

イシューからはじめよ ― 知的生産の「シンプルな本質」』に包含されてそう。

英語

7〜9月の英会話(NativeCamp)の受講状況はこんな感じでした。

  • 7月: 31回、13時間7分
  • 8月: 33回、13時間54分
  • 9月: 25回、10時間10分

日次・週次MTGのファシリテーションの中で話すのがちょっと楽に感じる場面や、これまで聴きとり辛かった人の話が聴きとりやすくなったりする場面が出てきました。設計上の問題を解決するために、テーマを設定してディスカッションするような機会も2〜3人だと何とかなるっぽいです。日常会話はダメです。

英語単独で解決できるものではないけれど、楽に感じる場面が増えるのは心理的にいいことです。

もし英会話のレッスンが「会話」的な意味で億劫な人がいたら「カランメソッド」がオススメです。2回早口で質問されるのに対し、答えを(先生のサポートも得つつ)代名詞で省略せず喋るをひたすら行うものです。

レベル別に12分冊になっていて、レベルのマッピングはつぎのようになっています。


https://callanonline.com/english-course より)

オンライン英会話のNativeCampではカランメソッドをサポートしています。レッスン予約は1週間先までできるので、レッスン終了時に1週間先の分まで予約するようにすると途切れません。

実験を経て、祝日・有給も関係なく火、木、土、日の9:30〜10:30に2レッスン受けるのが定着しました。朝から試験があったり、ドタキャンされたりした日はスルーしたり、代わりにライティングの本を学んだりしています。

登壇

久々に登壇しました。今年初の社外登壇です

ホームサウナである金春湯さんが提供してくださっているAPIを利用し、混雑状況を可視化しているお話です。

サウナイキタイさんと何かできないかなぁと思ったりもしています。開発に加わりたい思いは届きそうにない気配を感じています。

ゼルダ

前Qからやり始めたゼルダの伝説 ブレス オブ ザ ワイルド。通常編の追加コンテンツもとうとうやり終えました。

次QのOKRの1つであるゼルダ無双 厄災の黙示録が発売されるまで、マスターモードを楽しみます。

業務のみならず個人でもOKRを追いかけ、とにかくいろんな誘惑を断ち切りOKRに全振りする。みたいな人生はしんどいです。一方で、OKRの時間以外に何をするのか考えたときに情熱を注げるものも思い浮かばない。ずっと続けていた音楽もやめてしまった。

そんな中で感動するほど楽しいと思えるもののひとつがゼルダでした。

今後の話

2020年10〜12月のOKRです。

Objective 1

設計よくしていこうな

今年学んできた個々の技術を組み合わせて、保守性と信頼性が高いサービス設計を学び、実践する。

Key Result 1

実践的な設計を3つ世に送り出す

・12月の技術書典10で『Google Cloud Platformで学ぶTerraform 〜実践編〜』を執筆する
・『サイトリライアビリティワークブック ―SREの実践方法』を読む
・Professional Data Engineerを受ける
・『Official Google Cloud Certified Professional Data Engineer Study Guide』を読み、模試を解く
・『A Philosophy of Software Design』を読む

このKRがも最重要なため、KR2、KR3が厳しく感じたら迷わずKR1を選ぶ。

Professional Data Engineerは実践編のログとデータパイプライン周りのインプットに、『A Philosophy of Software Design』と『サイトリライアビリティワークブック ―SREの実践方法』はTerraformのモジュールやTerraform化するアーキテクチャ設計を説明する言葉のインプットに位置付けます。

Key Result 2

Cloud Runのユースケース集を世に送り出す

・Serverlessなカンファレンスがあればワークショップ、なければZennなどで出す
・『Building Serverless Applications with Google Cloud Run

技術書典9で『Google Cloud Platformで学ぶTerraform』を書き終えていれば、機能も出揃ってきたし、使ってるし、Cloud Runを体系的に整理しようと思っていました。書き終えられなかったものの、両立できないこともないのでやってみることにします。

Key Result 3

KompalWeatherをGAに

  • production用のプロジェクトに移す
  • BigQuery MLで混雑状況予測
  • UIを生やす
  • ログ・エラーレポート周り改善

技術的な実験をしつつ、自分以外のユーザーを見つけようと思います。

Objective 2

Key Result 1

嫁氏のストレスを軽減する

Key Result 2

ミファーを護り抜き、あの頃のように遊びに行く

11月20日です。休みます。

Key Result 3

旅行する

ふるさと納税奴で石川県に行くか、GoToの波に乗るか、それともシー=>ミラコスタ=>ランドの夢を叶えるか…日常の物理的範囲が狭まる中、非日常を得たいです。

Key Result 4

(不確定要素はある中で)もし居住エリアに職場の制限がないなら、どこにどう住むのがよいか?みたいな話を最近よくします。その中で今の家はよいという話や、もっと広い家に住みたいという思いがあります。よい椅子を買ったのでもう十分という気持ちもあります。

更新タイミングも近いので、どうするか2020年時点の結論を出します。

なんとなく最近公私問わずワクワクした気持ちになることや感情が揺さぶられる体験が少ない気がしています。何もせずに勝手に生えてくるものでもないと思うのでなんかしよう。

技術書典応援祭に関わられたすべてのみなさんお疲れ様でした。

オンライン開催にもかかわらず、お祭感があって執筆後も楽しめました。でもやっぱり、またいつか物理会場で「当日」を迎えたいなぁ。

つぎの出展に備えて振り返りたいと思います。

出展した本の内容についてはこちらにまとめています。

技術書典9で新刊『Google Cloud Platformで学ぶTerraform 〜基礎編〜』を含む5冊+αを出展します #技術書典

技術書典オンラインマーケットでも、BOOTHでも引き続き販売中です!

手にとってくださった方は、こちらのページで変更内容をお知らせしていくのでぜひ見てみてください。

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』の正誤表と増補改訂情報 #技術書典

『KnativeとIngress Gateway』

『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜』の正誤表と増補改訂情報 #技術書典

『Knativeソースコードリーディング入門』

『Knativeソースコードリーディング入門 〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補改訂情報 #技術書典

『Knativeの歩き方』

『Knativeの歩き方 〜KubernetesからServerlessを訪ねて〜』の正誤表と増補改訂情報 #技術書典

『Goで学ぶAWS Lambda』

『Goで学ぶAWS Lambda』の正誤表と増補改訂情報 #技術書典

振り返り

Good

テーマ設定

現在のプラットフォーム開発の仕事に直結し、確実に読者がいるテーマを設定できたと思います。

すべてはこのツイートから始まりました。

あったら欲しい、けどない。というわけで、ないものは書けばいいですね。

自分が欲しいし、あまり売れなくても社内には確実に読者になる人がたくさんいる。モチベーションが保てました。

執筆のモデル化

執筆のプロセスをだいぶ見直しました。

  • ざっと本と公式ドキュメントを読んで大まかな見取り図(荒い目次のようなもの)を作る
  • 項目ごとにGitHubでissueを作り、GitHubのprojectにする
  • 項目ごとに情報収集・検証する
  • ある程度集まったら目次を作る
  • 「こうすればTerraformを理解できる」を言語化する(今回の本でいう1章)
  • 頭に入っている内容と目次で、前書き(本を書く動機とできるようになってほしいこと)と各章400字くらいずつで全体をざっと書く
  • 1章ずつ書いていく
  • 推敲

本を通じて伝えたい内容(モデル)の仮説を立てて、いったんざっと全体を書いてしまうのを大事にしました。

そこから各章・各項目を検討しながら書き進め、モデルをアップデートしていきます。

全体を書き終えたら、章立て全体がモデルを読者に伝えるのに適切な構成になっているのかを見直します。章の順序を入れ替えたり、不要な情報をコラムとして切り出したりします。

今後も詳しくなりたい技術分野は出続けるでしょう。その過程で本も書くと思います。技術を身につけるための型を身につけ、改善していくのは不可欠です。

つぎの本に大きな影響を受けました。読み直すたびに理解したり実感したりするための経験値は増えているので、毎回違った見え方がします。

エンジニアの知的生産術 ―効率的に学び、整理し、アウトプットする

知的戦闘力を高める 独学の技法

イシューからはじめよ ― 知的生産の「シンプルな本質」

入門編と実践編

今回は「入門編」として出しました。次回の技術書典10で実践編を出します。

元々は1冊の本として出す予定でした。もうちょっと頑張ったら書き切れたかもしれません。しかし、技術書典開始ギリギリまで書いた結果初版のクオリティが低くなった前著の反省を踏まえ、立ち止まることにしました。

期限が決まっている中で、時間を闇雲に投下してなんとか間に合わせるやり方は極力避けたいです。質は下げたくありません。スコープを調整するというのを覚えました。

ゆとり

最終的には、今までで一番気持ちに余裕がありました。追い込みの3週間くらいは自粛したものの、それまではゼルダもしてました。

追い込みのタイミングで作りたいサービスができ、原稿の合間に開発もしました。

締め切りのあるものでも、OKRに詰め込み過ぎず、自分を許してこれくらいの気持ちの余裕は持ち続けたいです。

総じて新しくChallengeすることは増やさずに、Goodで触れたモデル化に継続して取り組もうと思います。

妻の本のレビュー

妻も前回の技術書典で書いた本の改訂版を出しました。

JavaScriptとSEO(PDF、ePubセット) #技術書典

前回の反省に「妻の作品のサポート」を挙げたので、今回はレビューする時間を設けました。

Challenge

時間配分

技術書典は7月にあるものとして4〜6月のOKRを組み立てていました。結果的に9月になったものの、7月にあったら新刊アウトでした。

4〜6月のOKRはこれ。

2020年1〜3月ふりかえり 〜HCLエンジニアとしても闘争〜

6月時点でGCPもTerraformもどっちつかずだったので、7月に技術書典がないのがわかったタイミングでGCPのキャッチアップに専念することにしました。GCPを学ばずして、GCPで学ぶTerraform本の見通しが全然立てられなかったためです。

8〜9月を余裕をもって過ごしたようで、実は仕掛りのOKRがスライドして達成できたことが減っただけという見方もできます。

ただ、わからないものはわかりません。自分をさらに律する施策を考えるのでなく、OKRは詰め込みすぎないように〜くらいにしておこうと思います。

紙本

今回も前回も紙本を準備していません。印刷費用がかからない分利益は増えるし、在庫を抱える心配もありません。

特に要望もないものの、次回はTerraform本の基礎編と実践編を合わせた紙本の印刷も検討しようと思います。

僕自身が基本的に紙本を買わないので、物理会場で開催されるまではあまり乗り気にならないかもしれません。

次回作について

技術書典10では、予告通り『Google Cloud Platformで学ぶTerraform』の実践編を書きます。

基礎編では個々のリソースの書き方やステート管理、モジュールの基礎について書きました。実践編では、複数のリソースからなる典型的なGCPのアーキテクチャやモジュールをいかにTerraform化するかについて書きます。

ロードバランサーとインスタンスグループ、GKE、プロジェクトのテンプレート、ログ管理などが題材です。ログ管理やその活用は、Professional Data Engineerの内容を理解した上で取り組むのがよいかなぁと思っています。

さらに、そうして出来上がったものをいかに継続的に変更していくかについても触れます。

CI/CD、リント、テスト、サービスアカウント管理などが題材です。

もし技術書典9でTerraform本を書き終えていたら、Cloud Runのユースケース集的な本を書こうと思っていました。これはサーバーレスなカンファレンスがあれば、そこにワークショップのプロポーザルを出したり、それが実現しなくてもZennでチュートリアルを出したりできないか検討してみます。技術書典11の時点では何に関心があるか読めません。

数字の整理

売上

技術書典オンラインマーケット

9/12〜9/30分

  • Google Cloud Platformで学ぶTerraform 〜基礎編〜: 70冊
  • JavaScriptとSEO: 16冊
  • KnativeとIngress Gateway 第2版: 4冊
  • Knativeソースコードリーディング入門: 2冊
  • Knativeの歩き方 第2版: 2冊
  • Goで学ぶAWS Lambda 第2版: 5冊

500円 × 16冊 + 1000円 × 83冊 = 91000円

BOOTH

9/5〜9/30分

  • Google Cloud Platformで学ぶTerraform 〜基礎編〜: 37冊
  • JavaScriptとSEO: 0冊
  • KnativeとIngress Gateway 第2版: 5冊
  • Knativeソースコードリーディング入門: 1冊
  • Knativeの歩き方 第2版: 2冊
  • Goで学ぶAWS Lambda 第2版: 4冊

1000円 × 49冊 = 49,000円

原価

  • 技術書典参加費: なし
  • BOOTH手数料: 3,734円
  • 受験したり、本買ったりした気がします

過去分

フライングしてこれを購入しました!ありがとうございます!!

あとは実践編で前提となるProfessional Data Engineerの受験費用と、『Official Google Cloud Certified Professional Data Engineer Study Guide』の購入費用に充てようと思います。

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 をより身近に感じる人が増えたら幸いです。

正誤表・増補改訂情報はこちらのページで公開しています。

『Google Cloud Platformで学ぶ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

正誤表や増補改訂情報ページはこちらです。

『Knativeの歩き方 〜KubernetesからServerlessを訪ねて〜』の正誤表と増補改訂情報 #技術書典

目次です。

第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

GoとSAMで学ぶAWS Lambda

目次です。

第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のローカル実行