四半期ごとの個人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のローカル実行

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

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

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

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

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

正誤表

PDFページ PDF反映 ePub版反映 MOBI版反映 修正日 version

増補・改訂

PDFページ 内容 PDF反映 ePub版反映 MOBI版反映 修正日 version

リソース

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

2020年4〜6月は、プラットフォームエンジニアとして必要な技術要素であるGCPとTerraformを学ぶのが主な内容でした。

振り返り対象の個人OKRはこの記事2020年1〜3月ふりかえり 〜HCLエンジニアとしても闘争〜で立てています。

OKRの振り返り

3段階で見ていきます。

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

Objective 1

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

Key Result 1 【微妙】

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

  • 技術書典9で『GCPで学ぶTerraform』を書く
  • 『実践Terraform』『Terraform Up & Running』を読んで理解が必要な見取り図を描く

今期は目次を作るところまででした。OKRを立てた時点では、つぎの技術書典を7月と想定していました。しかし、次回は9月という公式アナウンスがあったので、それを目指して書こうと思います。

少しTerraform関連の本を読んだり、GCPを学んだりした現段階ではつぎのような目次を考えています。

1 Why

なぜTerraformが必要なのか
解決する課題

  • Why IaC
  • Why Terraform
  • (Why GCP)

2 What

  • Terraformを使ってできること
  • 使い方の調べ方
  • GCPのデフォルトとTerraformのデフォルト
書き方
  • 文法
  • HCL?

機能

なんのためにあるのか
やってはダメなこと

プロバイダー
* tfsatate
* terraform import
* terraformer

3 How

準備
  • CLI
  • Terraformのバージョニング
  • VSCodeのサポート
  • tflint
ハンズオン
  • あるアーキテクチャを作っていく
    • 3 layered
  • テンプレート
    • Module
    • Microservice、プラットフォーム
    • ベストプラクティス or Opinionatedのテンプレート化
    • 早めに楽な運用にたどり着くためのガイド、複雑さを導入したいわけではない
  • GCP上のベストプラクティス
    • Log
    • データ分析
    • パイプライン
    • 権限管理 IAM

コンテナ触れたいが、KubernetesのYAMLとの住み分けとかの話になりそう
VM -> サーバーレス
GCE -> GKE -> App EngineかCloud Runなど

4 Operation

  • CI/CD
    • ローカル
    • GCP CI/CDサービス
    • CI/CD SaaS
    • GitHub Action
  • tfstate分割
    • すでに動いてるの安全に分割する
  • tfnotify
  • Providerアップデート
  • 開発環境・本番環境
  • デバッグ
    • TF_LOG=DEBUG
    • プレイグラウンド

フルで書くのは厳しそうなので、特に興味あるものや、ここにないけど決定的に必要な要素などあればぜひ教えてください!

読んだ・読んでる本。

Why Terraform、Why IaCがめっちゃみっちり書いてあってすごい。

Key Result 2 【できた】

GCPの全体像を把握する

GoogleさんのProfessional Cloud Architect試験に合格しました。自宅からのリモート受験です。6/28に受験し、まだ最終結果メールがきません。

当初はGCPのコンピューティング、ネットワーク、ストレージの目次程度が頭に入れば試験は受けなくてもいいかなと思っていました。しかし、6月頃にいざ本格的にTerraformの本の準備を始めるにあたり、もう少し足腰鍛えた方がよさそうと思い6月はGCPの勉強をすることにしました。

また、同時期に複業でGCPのアーキテクチャなどの相談に乗るお仕事もいただいたので、腕力向上必須でした。

準備過程では、上記のProfessional Cloud Architect Certification 2020を一通り見ました。これは星5つで評価を求められたら星1つです。結局最後まで見てしまったのが悔やまれます。

Official Google Cloud Certified Professional Cloud Architect Study Guide』はとてもよかったです。章末問題や模試2回分は、本番より難易度が低かったものの、アプリでの復習がとてもやりやすかったです。各サービスの説明は細かいわけではなかったですが、「アーキテクト」として働くための視点の持ち方がイメージでき、今後の仕事にプラスになりそうでした。

他にも、複業の準備も兼ねてつぎの本を拾い読みしました。試験文脈ではないですが、役立ちました。

機械学習系は置いておくにしても、GCP文脈でもう少しデータプラットフォームやDevOps系の話題に馴染んでおきたいなぁと感じています。

Key Result 3 【できた】

『KnativeとIngress Gateway』の完成

  • レビューコメントをもらっている内容を一通り反映する
  • 今あるissueをすべて閉じる

だいぶ追記し、Boothで第2版を発売中です!

KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜(PDF、ePubセット) #技術書典

初版との差分はこちらにまとめています。

増補・改訂にあたっては、toVersusさんにたくさんフィードバックいただきました。ありがとうございました!!

商業版も、インプレスR&Dさんから2020年7月10月発売です。

KnativeとIngress Gateway Ambassador、Contour、Gloo、Kourier、Istioに見出すEnvoyコントロールプレーンの実装パターン

あくまでも「KnativeでなぜIngress Gatewayが差し替えられるのか?」という自身の疑問に答えるための本です。結果的にAPI Gateway、Envoyなどさまざまな発見がありました。この喜びを、よりたくさんのエンジニアと分かち合うことができたら嬉しいです。

推敲過程でいろいろな本にお世話になりました。

Objective 2

生きてる実感を得て心をワクワクさせる

Key Result 1 【できた】

ゆったりとした時間を過ごすための自分なりのルールを作る

「ゆったりとしていない」と感じるのは、自分で立てた目標とはいえ目標以外に向いた興味から目を背けていたからです。限られたプライベートな時間を最大限自身の成長に繋げるためのストレッチな目標を立て、リソースをそこに集中するのだから必要な犠牲かもしれません。それでも持続できなければ元も子もないので、「スイスイ検証水曜日」というのをはじめました。

スイスイ検証水曜日

興味持ったことは手を動かして検証して良い枠を週1設けます。数時間でアウトプットまでたどりつくのはなかなか難しいですが、結果的に業務に流用したり、複業に活かしたりしながらワイワイできて楽しかったので続けようと思います。

ちなみにこの記事はスイスイ検証水曜日のアウトプットの一部です。

Terraform Kubernetes Providerとkindで試すNetworkPolicy

あと、ゲームを解禁した結果、(やや罪悪感はあるものの)楽しみが増えました。同僚に激推しされたゼルダ。面白すぎて、このゲームを知らない状態に戻れなくなるのが少し寂しいです。

Key Result 2 【できた】

趣味と闘争する

  • 体脂肪率12%

noteで書いたこの腹の3ヶ月後のさらに3ヶ月後の世界です。このOKR振り返りを書いている時点で14.6%くらいです。

一時期13%台まで落としたものの、体重は落ち体脂肪率は上がっていく状況になって立ち往生しています。

もろもろの自宅ジム化に必要な器具は揃ったので、数値目標は掲げず、筋トレ週2を継続して体づくりを継続しようと思います。

カロリー計算目的であすけんというアプリを使い始めました。3食記録し、アドバイスがもらえたり、栄養素の内訳が表示されたりします。思ったよりカロリーが足りてなさそうな日が多かったり、ビタミンA・食物繊維が絶望的に足りなかったり、いろいろな気づきがあり改善しました。Fitbitで計測した体重、体脂肪、歩数、などを連動できたり、写真からメニューを登録できたり便利です。

写真のBASE BREAD週4朝、BASE PASTA週1昼か夜も定着しました。

  • 燻製料理を生産できるようにする(from ワクワクリスト

Zwilling(ツヴィリング)社の燻製用の鍋を購入しました。

燻製の基本』という本を読み、燻す木材の種類やそれに合う食材、難易度等があることを知りました。よきです。

クロノ・トリガー好きなら好きかも!と同僚に勧められてはじめました。何回かやったものの、執筆期間に始めたため定着せず…執筆期間後にでゼルダに出会い、今はゼルダのない土日が考えられません。

あと、昔おじさんにもらってやっていたファミコン。くにおくん ザ・ワールド クラシックスコレクションに時代劇が含まれていたのでやりました。

勇者シリーズが30周年を迎えたのを記念し、サンライズが公式YouTubeチャンネルでエクスカイザー全話と他のを5話まで無料公開!テレビで見始めたのは4作目からで、元祖のエクスカイザーは観たことなかったので観ました。

後続シリーズの場面がいろいろと頭をよぎる原点でした。その後、2作目のファイバードも観終わり、今は最終作のガオガイガーシリーズを観ています。在宅勤務になってから昼は勇者シリーズ、夜は最近のやつ(Dr.STONEシーズン1を観終わり、鬼滅の刃を観ている)をご飯を食べながら観るようになりました。

Key Result 3

ワクワクリストを整理する

  • 優先度
  • 何をしたら実現できるか
  • 費用
  • 期間

とりあえずカテゴリタグをつけてみたら、半分が旅行でした。


(旅行系の一部)

今旅行のこと想像しても、何もピンときませんね。いざ実現するとなると、それぞれ1週間休みとらないと厳しいので(ほんまか?)、予約できる状況になったらチケット予約する心積もりはしときます。

そもそもこれを書き始めたのは、OKRに追われすぎてしんどいというのがきっかけでした。Objective 2のKR1がいい雰囲気になってきたところで、この項目にそこまで希望を見出さなくて良くなってきた感があります。よいことです。

今は個人OKRを適度に達成し、プラットフォームを作るチームで挑戦し続け、嫁氏と適度に競争しながらゼルダを嗜み、猫たちを眺め、筋トレし、サウナで整えるならそれで満足です。

在宅勤務に慣れ、サウナも復活したのはけっこうでかいのかもしれません。

ログ

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

読書

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

自分の興味に蓋をして息苦しさを感じていたときに、マネージャーさんとの1on1で「自己肯定感足りてないのでは?」という話を聞いて読んでみた本です。一連の流れをつぶやいています。

最終的にスイスイ検証水曜日で回収されました。

「OKRと関係ない、自分の好きなことについてnoteに記事を書こう」という動機で書いた記事の1つです。今の今まで、4月に突然noteに記事を書き始めた理由を忘れていましたw

サウナは自分にとって大事なライフワークの1つ。自分以外のサウナ好きがサウナについて語るのに触れながら、自分にとってのサウナを考えてみようと思って読みました。

『さうなと』を読んで

前Q読んでいた『遅いインターネット』にも、さきほど登場した『20歳の自分に受けさせたい文章講義』にも評論家としての吉本隆明さんが登場します。よしもとばななさんのお父さんなんですね。

何となく気になって、何かしら本を読んでみたいと思って検索したらこの本に出会いました。たぶんこういう本がメインではないです。

よその家の猫の話(生態)ってあまり聞いたことなかったので新鮮でした。吉本さんちの猫は、適当に外にも出かける半野生的な猫さんなだけに余計に。

スポーツ系に限らず、いろんな研究分野が関係しているのだなぁと思いました。科学的とは?の説明から始まるのがいい感じです。

筋トレをしてくれるトレーナーさんの経験で語られる世界からの変遷が書かれてましたが、トレーナーさんもこういうの読んでないのかな?とも思いました。

人生の先輩が語る教訓には真理が含まれてると思います。ただ、大昔から人間は同じものに苦しみ、それが研究されて名前もついていると思うので、研究の成果として受け取る方が好みかもなぁと思いました。

初期案と実際に放送されたデザインが全然違うのが多くて最高でした。

学び方を学ぶのはよい投資と思っています。エンジニアとしての経験(課題とそれに対する解決策の適用)も増えてきたので、目の前の具体的な技術を学ぶのを継続しつつももう少し原則、プラクティス、この分野ならこれみたいなみんなオススメ系の本比率も上げていいのかなと感じました。経験が少なすぎるタイミングで少し抽象度の高い事柄に触れても実感がわかないし、抽象化した自身の経験を適用できる範囲も限られます。

最近の仕事では、何かしらの技術を導入するにあたって性質上影響範囲が大きく、設計ドキュメントでwhy?を考える機会が増えました。その中で、ソフトウェア開発の原則、ベストプラクティス、それらが目の前のか課題解決になぜ適用できるのか、メリット・デメリットは何かなどを議論し、合意し、利用者の疑問に答えられる必要があります。つまり「この技術をこう使ったら、動く!」のようなスタンスでは、物事が何も前に進みません。これまで以上に具体と抽象を行き来して、戦闘力を高める必要があります。

学びて思わざれば則ち罔し、思いて学ばざれば則ち殆し、はどちらかに偏りがちなので肝に銘じたいです。

不合理な人間の行動にもパターンがあるので、そういうのを自覚すると気づきがあるし、パターンを利用する意図が透けて嫌気がさすこともあるでしょう。

転職したい気持ちはないですが、鬼気迫るエピソードで面白かったですw

英語

チーム構成の出自のダイバーシティが以前よりさらに増してきました。MTG、設計ドキュメント、Slackでのやりとり、議論はもちろんリモート飲み会もすべて英語です。大体において、これ日本語でも厳しそうみたいなことが多い一方で、英語で話すのも書くのも余裕はないです。継続して学習しています。

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

  • 4月: 30回、12時間48分
  • 5月: 30回、12時間48分
  • 6月: 28回、11時間53分

火、木、土、日の朝25分 * 2。受けた直後はやった感はあるものの、月単位でみるとそこまで時間割いてないですね。ペースを落とさなければ、年150時間。無理なく続けられそうなペースな気がします。

思いどおり喋れるようになってきたのを感じるときもあれば、頭が回らなくて喋る内容を先にすべて書くときもあります。

成長度を測りたいような、測りたくなような気がします。

Microsoft MVP

かなりコンテナマネジメント系の実績を推したのですが、Cloud & Datacenter ManagementカテゴリーでなくMicrosoft Azureカテゴリーでの受賞になりました。いずれにせよ光栄です。やっていくことも変わりません。

今後の話

Objective 1

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

つぎでTerraform周りをいったん整理し切ろうと思います。2019年10〜12月あたりから、プラットフォーム仕草(プラットフォームを開発するエンジニアが習得すべき技術要素やプラクティスなどの素養全般)を身につけるために、具体的な技術をテーマに据えてきました。Kubernetes、GCP、Terraformなど、業務との関連性の高い順になっています。

目の前の業務に必要なものばかりなので、いい感じにプライベート時間の学習をアラインできたと思います。

一方で、読書セクションに書いたように、ソフトウェア開発の原則、ベストプラクティス、古典、基礎系に割く時間も長期的目線で増やしていくタイミングなのかなぁとも思います。

7〜9月は技術書典だけで大変だと思うので徐々に…。

Key Result 1

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

前回から引き続きです。本番が9月のいつなのかけっこう気になります。

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

Key Result 2

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

理論を学びつつ、目の前のクラウドサービスにどう適用するのかを学ぶのはよいタイミングっぽいです。

Key Result 3

学び方の改善

知的戦闘力を高める 独学の技法』にはとても影響を受けました。1テーマに据えます。

Objective 2

より気持ちよく暮らす

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

Key Result 1

断捨離と整理

そこまで物に溢れてるわけではないけれど、広めのクローゼットに甘えてる感があります。日常生活で光が当たらない部分を含め、物を減らしたい欲もあります。手を動かし始めたらちゃんとやりそう!

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

Key Result 2

猫たちとのよりよい共生

より大きくなり、外にも興味を持ち始めた猫たちとの生活をよりよくします。

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

Key Result 3

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

奈良育ちなのもあり、クラウドファンディングで支援したのでタイミングが合えば行きたいです。

静かな山里で、サウナ。最高っぽいです。

Key Result 4

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

めっちゃ困ってるわけでもないですが、野菜室の野菜が凍ったりします。凍っててもサクサク切れるやつとか気になるので、ひとまず調べてみます。

今期の総合的な気分です。

スイスイ検証水曜日

プライベートも、20%ルールを導入しようと思います。題して「スイスイ検証水曜日」です。

OKRと人生

僕は3ヶ月の目標管理にOKRを利用しています。

業務未経験で駆け出したエンジニアの5年後 〜目標管理の変遷と個人OKR〜

これは、やりたいことや気になることが無限にある中で、直近3ヶ月で集中すべきことややらないことをはっきりさせるためです。

自分への成長圧から、「あれもやらないと」「これもやらないと」と人生が苦しくなり始めたためスタートしました。

割り切って目の前のことに集中でき、できた・できなかったを継続的に振り返ることができるので、今後も愛用します。

一方で、土日を全部割いても達成できるか微妙なラインのハードな目標を立てるため、なんのための人生かよくわからなくなります。これを受け、技術的な目標と、ゆるふわ系の目標を分けることにしました。

たとえば、2020年4〜6月のOKRはつぎのとおりです。

  • Objective 1: プラットフォームのインフラを支える技術の基礎力向上
  • Key Result 2: GCPの全体像を把握する
    • Professional Cloud Architectを取得する
    • 物理的に受けれない状況が続くなら「Google’s – Professional Cloud Architect Certification 2020」を受け終わったらOK
  • Key Result 3: 『KnativeとIngress Gateway』の完成
    • レビューコメントをもらっている内容を一通り反映する
    • 今あるissueをすべて閉じる
  • Objective 2: 生きてる実感を得て心をワクワクさせる
  • Key Result 1: ゆったりとした時間を過ごすための自分なりのルールを作る
  • Key Result 2: 趣味と闘争する
    • 体脂肪率12.5%
    • 燻製料理を生産できるようにする(from ワクワクリスト
    • オクトパストラベラーやってみる
    • エクスカイザー観終わる
  • Key Result 3: ワクワクリストを整理する
    • 優先度
    • 何をしたら実現できるか
    • 費用
    • 期間

Objective 1は仕事上必要な技術要素を念頭に置き、基礎力を鍛えるものです。Objective 2がゆるふわに人生を謳歌するためのものです。

今回の主眼はObjective 1です。

20%ルール

技術的な成長を目指し、必要な技術を不断に学び続ける。字面はかっこいいし、有意義だと思います。ただ、自分の今の取り組み方では息苦しいです。

「Kubernetesのリソースを管理するkptというツールが出たのか!ちょっと触ってみよう!…いや、時間ないしやめよう」

Knative EventingのGCP用の実装、最近どうなんかな?きっと元気なんやろ勉強しよう」

「最近Go書いてないなぁ…まぁYAMLエンジニア養成期間やし、割り切ろう」

「CNDTのプロポーザル書くか!…日程的に無理そう」

やりたいことを絞るためのOKRが、自分に好奇心にフタをしているようで悲しくなってきます。何かに没頭するような感覚も、忘れつつあるような気がします。

そこで、20%ルールを採用することにしました。20%ルールは、『How Google Works』で紹介されているような、「業務時間の20%を好きなことに使ってよい」という制度です。実際今使われているかどうかは、関心事ではありません。

僕の場合は、水曜日の夜を気になった技術の検証に使うことにしました。つぎの四半期のテーマ探しにもつながりそうです。

OKRの立て方自体にも改善余地はありそうですが、とりあえず試してみることにします。

ちなみに、Objective 2の「Key Result 2: 趣味と闘争する」過程で、「土日は1時間ずつゲームやっていい」ルールが生まれました。

ゼルダをクリアするのに、1年近くかかる可能性があります。

感情の取り戻し方

今日は、マネージャーさんとの1on1でここまで書いたような話をしました。すると、『1分で話せ』などで有名な伊藤羊一さんの主張を紹介してもらいました。

中でも、彼の主張する「Lead the Self」という概念と取り組みが今の自分に必要そうでした。

まず、さまざまな物事に「すげー!やべー!」と言い続ける。好奇心をもつ。

そして自分もやってみて、言語化する。それが自分にとってどういう意味があるのか?を考える。気づきを得る。

この過程の繰り返しが好奇心を育み、スキルやマインドへの落とし込みを加速させるというものです。

これまでのように自分の好奇心にフタをし続けると、OKRで達成できることと失う機会のどちらが大きくなるかよくわからないなぁと感じました。

その落としどころとしての「スイスイ検証水曜日」です。

最初から無理しないのは大前提として、つぎの記事のような形でアウトプットできるとよさそうです。

継続的なアウトプットはなぜよいか? 著作も数多いエンジニアが語る、社外向け発表がチームまで成長させる話

アウトプットにはこだわりがあるものの、OKR1つ1つが重くなるにつれ数自体は以前よりかなり減ってきていました。

検証する内容も業務から離れなさそう(離れてもよいとは思う)なので、いい形にできればなぁと思います。

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

2020年1〜3月は仕事ではメルペイからメルカリのMicroservices Platformチームへの正式な異動・転籍が決まったタイミングでした。

振り返り対象の個人OKRはこの記事2019年10〜12月の振り返りと2020年 〜YAML Engineerとしての闘争〜で立てています。

個人OKR(特にObjective 1)は会社のOKRとは別でその基礎を固める意味合いのもので構成していました。

OKRの振り返り

3段階で見ていきます。

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

Objective 1

プラットフォーム開発の基礎力向上
※働きはじめて特に厳しそうな分野が見つかれば変更してフォーカスする

当初定めたものと業務上必要そうなものにずれはなかったので変更していません。

Key Result 1 【できた】

CKAを取得2020年3月までに取得する

3月に集中的に取り組んで達成できました。別の記事で詳しくまとめています。

CKAとCKADを受験した動機とよかったこと

CKA(とCKAD)を取得できても、新しいチームで自分が戦力になることは保証されません。しかし、これらすら取得できなかったら適性面で厳しいと言えるような内容だったり、実務に活きるような実践が積めたりしました。時間をかけて取り組んでよかったです。

Key Result 2 【できた】

サービスメッシュ、LBなどの動作の仕組みをKubernetesの文脈で説明できる

  • 『Istio Up and Runnning』読む
  • 技術書典8でKnativeに利用できるGatewayコンポーネントの話を書く

説明しました。お仕事でIstioのワークショップを開催したので、その過程でキャッチアップも兼ねました。

別の記事で詳しくまとめています。

技術書典応援祭の『KnativeとIngress Gateway』と『JavaScriptとSEO』の振り返り #技術書典

プラットフォームでマイクロサービスを開発するエンジニアに概要、メリット・デメリットを説明し、納得して使ってもらう(そこまでは至らなかった)というプロセスは視点を上げる上でも重要な経験に感じます。

Key Result 3 【微妙】

CloudNativeを実現するOSSを開発する(3PR以上)

  • issueを閉じる
  • テスト足す
  • 機能足す

issueをアサインしてもらってPRマージまで持っていけたのはこの1つだけです。

https://github.com/tektoncd/pipeline/pull/1875

他は普段通りの設定ファイルの追加で特に成長がありません。

https://github.com/syndbg/goenv/pull/116
https://github.com/syndbg/goenv/pull/110
https://github.com/syndbg/goenv/pull/109
https://github.com/syndbg/goenv/pull/108
https://github.com/syndbg/goenv/pull/107

成長していきたい分野ではあるものの、今は新しいチームで成果を出すのに必要そうなスキルに集中すべき時期です。

Objective 2

生きてる実感を得て心をワクワクさせる

Key Result 1 【できた】

嫁氏とゆったりした時間を過ごす

  • スターウォーズを観る
  • 低温調理できるようにする(from ワクワクリスト)

妻はスターウォーズ(とアベンジャーズ)が大好きなので映画を観てそのまま食事しました。

何かが理由で行くのをためらった気がするのですが、OKRに入れることでやめずに実行できてよかったです。

あとは低温調理。単に興味があったのと、Key Result 2との兼ね合いで飽きずに美味しく鶏肉を食べる必要がありBONIQを購入しました。

低温調理といえばAnovaの印象が強いかもしれませんが、比較した結果我がにはBONIQという結果になりました。

  • コンセントの変換器不要
  • Amazonで買える(今は中古しかなさそう)
  • クックパッドにメニュー豊富

が主な理由です。Anovaを買ってもたぶん満足していた気がします。

別で記事を書けたらと思いますが、特にルーロー飯とレバーのコンフィが絶品です。

6 packsチャレンジ中ひたすらBONIQで低温調理した鶏肉を食べていて、まったく飽きなかったのが何よりも大きな成果です。

あと、なんとなくこのノリでドラム式洗濯乾燥機導入できてよかったです。

Key Result 2 【できた】

趣味と闘争する

  • スノボする(from ワクワクリスト)
  • 腹筋を割る(from ワクワクリスト)
  • 土日のうち1時間をピアノに充てる(from ワクワクリスト)

ピアノは1月の最初こそやってたものの、Objective 1に押しつぶされたり、キーボードが置いてある部屋が寒かったりで諦めました。

スノボは何年かぶりに前々職の同僚と行けたので満足です。ただ、1日目に膝を打ち過ぎ、2日目はサウナなど1人旅になってしまったので膝を守る術を身に付けたいですね。

それはそれで楽しかった説もあります。

これら3つの中で特に時間を割いたのは「腹筋を割る」でした。結論としては成功と言ってもいいかなと思います。

1月の半ばからパーソナルトレーニングに通い、食事制限やランニングと合わせてがんばりました。

明確に目標体脂肪を宣言するともっとストイックになれたかもしれません。しかし、けっこうな自粛ムード、慣れないリモートワークの中での食事制限はこれ以上きつくすると挫けそうでした。

とりあえず豚カツ、カツカレー、天ぷら、皿うどん、焼肉、家系ラーメン、うな重、餃子、酢豚、良いコース料理、イタリアンプリン、タルト、チーズケーキなどが食べたいです。

筋トレや低脂質高タンパクな料理などの知見が増えたので別で記事にしようと思います。

OKR文脈では体脂肪率12%台になるまではがんばります。

Key Result 3 【できなかった】

ワクワクリストを整理する

  • 優先度
  • 何をしたら実現できるか
  • 費用
  • 期間

まったくできませんでした。ワクワクリストというのは、OKRを決めてその達成を追えば追うほどよくわからなくなってしまった「俺何するために生きてるんやっけリスト」のことです。

前回のO2 KR3で作成しました。

旅行系はGWが直近のチャンスかと思ってましたが、当分無理そうですね。技術系はきっとできることがあったり、実現に向かって進捗してることもあるので、次回もう一度このまま掲げます。

ログ

読書数、登壇数などの習慣目標は前回を最後にいったん追わないことにしました。

しかし、残しておくのはよいと思うのでセクション自体は残します。

読書

読んだ

元々インフラをやっていたわけではない人にとって優しい書き方で好感度が高かったです。

MEAP(Manning Early Access Program)なのでメールでアップデートが通知されるのもよかったです。

オライリーさんの方もやってくれたらなぁ。

細かくて読み進めている間に前に書いてあることを忘れました。

あるコンポーネントが落ちてるとき、何がダメで何が生きてるのかコンポーネント毎に書いてるのがよかったです。

CKAの準備タイミングで読んでました。内容はあまり覚えてないです。

内容覚えてる本はないかもしれないですね。

技術書典の方を読みました。開発合宿で同僚が入門してたのを見て、そういえばやってなかったなぁと。

人間の性質上、知らないうちに陥ってしまう罠を自覚するのは大事と思っています。

新刊の『SSLをはじめよう』を購入したらサービスしていただき、読みました。

けっこう長いこと積ん読になってたな…

サピエンス全史の人の本です。オーディブルで聴きました。

徴税官のイメージ変わります。オーディブル。

短いスパンの振り返り取り入れてみようと思いました。オーディブル。

罠避けたいシリーズです。オーディブル。

読んでる

『KnativeとIngress Gateway』なりIstioなりはネットワークの理解が必要です。

これまでSIerの営業で情報系の試験勉強をしたり、エンジニアとしてネットワークごしの通信をするコードを書いたりする中でピンと来たことはありませんでした。

しかし、ようやく基礎から勉強して実感がわく時期がきたので読みはじめました。

同僚のKubernetesセキュリティ関連の登壇をレビューするにあたり読みはじめました。

Kubernetesよりも相対的にDockerの方が馴染みがないので、その復習から入るのが助かります。

復習といっても知らなかったことが多い…

久々にエモい気持ちになった技術書です。

AmplifyでReact、Lambda、AppSync、API Gateway、Cognitoベースのアプリケーションを動かしながら作っていきます。

DXはLambdaみたいな運用の手間を減らす基盤だけでなく、開発を支える程よく抽象化されたライブラリ、裏でよく管理してくれるIaC、CLIが一体となって実現されるのだなぁと強く感じさせられました。

まだアーリーアクセスですが、最終版は提出される雰囲気です。

オライリー本の日本語版の監訳、できるのならやってみたいんですがどなたか伝手ありませんか…!

Design Docなど英語で書く機会が増えたのと、英語に限らず技術文脈で書くことは多いのでライティングは投資していきたい分野です。

技術自体のキャッチアップは当然やるとして、インフラ、プラットフォーム、SRE的な考え方だったり、チームが立脚する文化を学ぶことの大事さを感じる機会が増えました。

体が「活字」を求めているときに読みたい著者の1人の本です。

とても鮮明に僕らが立っている・立たされている精神のあり方が描写されています。

英語

チームでのやりとりは基本的にすべて英語になりました。

受験英語は好きだったものの、実際に仕事でガッツリ使うのは初めてなのでトレーニングをはじめました。

スピーキング

会社サポートでオンライン英会話のNativeCampを受講しています。カランメソッドと実践!仕事の英語というのを半分ずつ受けています。

  • 2月: 30回、12時間40分
  • 3月: 28回、11時間54分

25分/1レッスン * 2連続平日の朝1時間を週数日、土日に各1時間。レッスンが終わったら次のレッスンの予約をその場でとり、なるべく途切れないようにしています。

話しやすくなったようなそうでもないような、成長は実感しづらいです。

リスニング

Podcastを去年の夏頃から聴いてます。この辺が特に好きです。

あとはUdemyの技術系講座は基本英語なのでそれを受講しています。元のスピードの遅いのは1.25倍にして聴いてます。それより速いと頭に全然残りません…

最近少し聴き取れる割合が増えた気がします。

言語問わず話が長いと集中できない感はあるなぁと日本語のオーディブルを聴くようになって思いました。。

リーディング

会社でSafari Books Onlineを契約しているのはありがたいですね。

あと暇なときにエンジリッシュで単語を覚え直しています。中級単語とかでも真新しいのはないですが、記述もあるので定着はします。

ライティング

読んでいる本のセクションに書いた本を読んだり、Grammarlyでチェックしたり、DeepLで比べたりしています。

定量的な変化を感じたいのでTOEFLでも受けようかとも思うのですが、技術面のキャッチアップを優先します。

今後の話

仕事のオンボーディングは進んでいるので、中核となる技術のキャッチアップを中心に進めていきます。

Objective 1

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

Key Result 1

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

  • 技術書典9で『GCPで学ぶTerraform』を書く
  • 『実践Terraform』『Terraform Up & Running』を読んで理解が必要な見取り図を描く

Key Result 2

GCPの全体像を把握する

Key Result 3

『KnativeとIngress Gateway』の完成

  • レビューコメントをもらっている内容を一通り反映する
  • 今あるissueをすべて閉じる

Objective 2

生きてる実感を得て心をワクワクさせる

これ続けたいですね。

Key Result 1

ゆったりとした時間を過ごすための自分なりのルールを作る

食事制限したり、資格とったり、目標は達成できて人生進捗した気分になります。

でも、過多で息苦しくて、あんまり生きてる心地しないんですよね…

Key Result 2

趣味と闘争する

Key Result 3

ワクワクリストを整理する

  • 優先度
  • 何をしたら実現できるか
  • 費用
  • 期間

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

特に運営のみなさん、想定外の事態にも関わらず常にベストを考え、最後までやり遂げていただき頭が上がりません。本当にお疲れ様でした。

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

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

技術書典 応援祭で新刊『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜』を含む4冊を出展します #技術書典

『JavaScriptとSEO』はBoothでの販売を技術書典応援祭終了後に開始しました。

他はBoothでも引き続き販売しています!

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

『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

テーマ設定

今回のテーマはKnativeにおいてIstioに代替可能なGatewayのコンポーネントを比較するというものでした。

このテーマの根本にあったのは、昨年同僚から受けた「KnativeはIstioのVirtualServiceを使わずにどうやってトラフィック制御するのか」という問いに答えることです。当時は答えられませんでした。

前回の技術書典の振り返りでもつぎのように書いていました。

そもそもIstio(をはじめゲートウェイコンポーネントとして依存するもの)やKubernetes自体の知見なしに存在するプラットフォームではないのでその観点から自分の知識・経験は強化して臨む必要もあります。

締切がある中、1回の執筆で調査、理解できることには限りがあります。しかし、そこで新たに生じた課題や疑問を放っておかずに継続して向き合い続けられたのはよかったなぁと感じました。

回を追うごとに想定読者が減っていっている(Knative概論 -超えられない壁-> Knativeソースコードリーディング -> KnativeのIngress Gateway)気がしますが、より夏休みの自由研究感が増していってて愛情は深まっています。

Istioのキャッチアップ

最近、マイクロサービスを開発・運用するチームからマイクロサービスのプラットフォームを開発・運用するチームに移り、2月頃からIstio周りの仕事をしていました。

今回のテーマはIstioに代替可能なコンポーネントの比較ですが、そもそもIstioを学んだことがありませんでした。さらに、3月にはマイクロサービス開発者向けにIstioのワークショップを実施する必要があったので、一定の水準で高速キャッチアップする必要がありました。

この本ではそもそもKnativeがどうIstioを利用するのか、なぜKubernetesのServiceやIngressではダメなのかから考える必要があったため、Istioのキャッチアップは必須でした。執筆過程で本業にダイレクトに関係ある部分に取り組めたのは精神衛生上もよかったです。

また、チームの20%ルールのテーマにこの本の執筆を掲げ、調査内容をチームのGitHub issueに英語でまとめることにも取り組みました。

世には出ないものの、途中経過をアウトプットしながら進められるのもまた精神衛生上良いです。

経験上アウトプットよりもインプットに数倍時間がかかります。いざ書き始める頃には調査した内容を忘れることも多々あったので、このやり方は進捗にとってもプラスでした。

いいまとまりで発信しつつ、最終的に体裁を整え本にするくらいが理想かなぁとは思っています。

キャッチアップには特につぎの本や講座が効果的でした。

Manning社のアーリーアクセスプログラムは、本の更新が通知されるので好きです。出版はこういう形式が理想だなぁと思っています。

本も好きなときに読めていいのですが、動画はプロダクト操作のデモががっつり見られて理解が定着しやすく感じます。特にIstioの場合はKialiなどの可視化ツールとセットで解説されるのでより効果的でした。

執筆仲間

今回とうとう妻が『JavaScriptとSEO』で執筆デビューしました!

これまで、僕の書く本の原稿以外すべて(表紙絵、サークルカット、校閲、入稿、ダウンロードカードなど)を支えてもらっていたのですが、共に〆切に追われる仲間になりました。

締切直前はやや怖かったですが、とにかく嬉しいです!!

Challenge

時間

もし開催スタートが元のままであれば間に合っていませんでした。毎度精神が厳しいです。

何にチャレンジすれば緩和されるのかはよくわからないので、感想として書き残しておくことにします。

フォーマット

毎回TechBoosterさんのReVIEW-Templateを使わせていただいていて助かっています。

けど今度はカウプランさんのRe:VIEW Starterを試そうと思っています。

ReVIEW-Templateに不満があったわけではなく、妻が試していていい感じの見栄えになっていたためです。

コードをいい感じに折り返してくれてる雰囲気なのもポイントです。

妻の作品のサポート

今回はしっかりレビューする時間をとれませんでした。

妻はフロントエンドエンジニアということで、テーマもフロントエンド関連です。僕は普段馴染みがありません。かといってフロントエンドも実装していた時期もあるので何もわからないこともありません。

それゆえに、この部分をもっと説明してほしいだったり、何回か執筆しているだけに構成で気になる部分だったり、一緒に良くしていける部分が少なからずあります。

改訂版の印刷や、次回の新作でサポートできたらなぁと思います。

継続的改善

本を印刷するのが技術書典9が初ということで、『KnativeとIngress Gateway』はがっつり改定予定です。普段Knativeを運用している方にもインスピレーションの湧くコメントをすでにたくさんいただいています。

この辺りが増補改定される予定です。お楽しみに!

すでに電子版でご購入いただいている方はもちろん読んでいただけるようになります。

次回作について

技術書典9ではGCPでTerraformに入門するか実践するかの本を書きたいと思っています。

理由はこんな感じです。

  • 今業務ドメイン的にどちらも時間を投資して学ぶ価値がある
  • 社内にGCPもTerraformも強い人がたくさんいる(のでレビューされたい)
  • Lambda本以来のポップでキャッチーなテーマ(議論の余地あり)にしたい

今回もとりあえずGCPもTerraformも何もわからん状態なので、Professional Cloud Architectをとるところから始めます。

数字の整理

## 売上

サイト

3/7〜4/5分

  • JavaScriptとSEO: 41冊
  • KnativeとIngress Gateway: 22冊
  • Knativeソースコードリーディング入門: 7冊
  • Knativeの歩き方 第2版: 5冊
  • Goで学ぶAWS Lambda 第2版: 9冊

500円 × 41冊 + 1000円 × 43冊 = 63500円

Booth

3/1〜4/5分

  • JavaScriptとSEO: 期間中は販売していませんでした
  • KnativeとIngress Gateway: 19冊
  • Knativeソースコードリーディング入門: 2冊
  • Knativeの歩き方 第2版: 5冊
  • Goで学ぶAWS Lambda 第2版: 11冊

1000円 × 37冊 = 37,000円

原価

  • 参加費: 7480円

過去分

妻はすでに売上金であつ森を購入しています。

そして家の装備をパワーアップしました!家庭内燻製を実現し、低温調理をパワーアップさせます。

12月末にCKADを、3月末にCKAを受験して合格しました。この記事では受験の動機や受験してよかったことなどについて書きます。

なぜ受験したのか

Kubernetesを中心とするプラットフォーム開発に携わるための基礎を学び、深く学んでいくための見取り図(目次)を頭に入れたかったためです。

僕は2018年、決済サービスをGo、Kubernetes、GCP、gRPCを利用して開発する会社に転職しました。いずれも業務では未経験な状態でスタートし、特に苦手意識が強かったのがKubernetesです。Serverlessが好きで、書いたコードはワンコマンドでデプロイされてくれ!という気持ちでした。Dockerファイルは見たくも書きたくもない(ほぼ書いたことない、書けない)し、Kubernetes何もわからんかったです。

そういう状況で出会ったのがKnativeでした。サーバーレス × Kubernetesという文脈なので、趣味のサーバーレスを継続しつつ、業務に近い領域ということで興味を持ちました。

そこから何冊かKnativeの本を書いたり、登壇してアウトプットしながらKnativeを学んでいきました。その中でそもそもKnativeはKubernetesのカスタムリソース・カスタムコントローラーという仕組みで実現されているということを知り、Kubernetesに入門しました。

勉強していく中で、会社のMicroservices Platformチームが開発・運用する仕組みに興味を持つに至りました。マイクロサービスの開発者がアプリケーション開発に集中するための仕組みをいろいろと提供してくれたいたことを改めて実感し、僕も加わりたいと考えるようになりました。

ただ、単に技術スタックの深い知識と経験がないだけでなく、インフラエンジニアとしても働いたことはありません。どうにかしてキャッチアップが必要です。

そこで、これまでのインフラレイヤーをいい感じに抽象化したKubernetesを主軸にインフラ構成を学び、目の前のタスクに応じて深掘りをしていくと効率的にキャッチアップできるのではないかと考えました。その大まかな見取り図を整理する上でCKADやCKAのような試験はうってつけだったのです。

さらに、いずれも実際にkubectlを操作しながら問題を解き、時にデバッグもするので本を読んで鉛筆を転がして選択肢をマークして終わり、みたいなことにもなりません。相対的に知識は定着します。

これらを踏まえ半年くらいで両方を取得することにしました。

両方取得できたらMicroservices Platformチームで十分戦力になるということはないけれど、どちらもとれないようでは話にならないのだろうなぁという気持ちで自分にプレッシャーをかけました。

CKAD

準備

CKAを2019年10月〜12月に取得するというのがこの時期のプライベートOKRを立てたときのKey Result 2でした。

やったのは2種類です。

10月、11月の平日毎朝30分〜1時間本を読み直し、ServerlessDaysの諸々の準備が終わった12月半ば以降CKAD-exercisesを3周手を動かしながら解きました。

Kubernetes「超」完全ガイドは大幅にパワーアップするようで楽しみですね!これから手にされる方はバージョンにご注意ください。(※ツイートは4/1のものです)

Kubernetesの入門には『Kubernetes: Up and Running: Dive into the Future of Infrastructure』もよいと聞いていて、ちょうど第2版も出たところだったので並行して読んでいました。

最終的に準備期間がかなり限られ、CKAD-exercisesを何周かするしかできないと自覚した時点(12月初旬)でターゲットをCKAからCKADに変更しました。

本番

12月28日の朝に受験し、29日夜、神戸サウナ & スパという、僕がもっとも好きなサウナの1つで整った直後に結果を受け取りました。

ボーダーライン66%の69%でギリギリでした。問題見て「わからん…」みたいなものはなかったものの、時間は全然足りませんでした。

全然時間足りないのでYAMLは書くな。kubectlの命令的コマンドでがんばれ!みたいなのを散々聞いててこれなので、2時間19問は侮れません。

Podのeditできるケース・できないケースを理解してなくて試験中に混乱した覚えがあります。

まとめると神戸サウナ & スパは最高です。

よかったこと

普段マイクロサービスを開発する中で書いていた(コピペしていた)YAMLがほぼDeployment、Service、CronJob、Jobに偏っていて、kubectl操作に全然慣れていなかったことを認識できました。

特にkubectlのexecで実行中のPodに入ったり、busyboxなどで一時的にPodを作ってshell操作したりは「本を読んで知っていたが、実際に使ったことがなかったのでいざというときに手が動かなかった」状態でした。今ではデバッグにとてもよく使っています。

運用上自分で作らずSREに作成を依頼していたSecretなど、自分では操作していなかったこともたくさんあり、どういう情報が必要なのか、どう依頼されないと困るのかなども理解が進みました。(もちろんドキュメント化されています)

僕には気付いたら机上の勉強ばかりで手を動かさない時期がある弱点があるので、それを補いながら進められたのが何よりもよかったです。

CKA

準備

CKAを2020年1月〜3月に取得するというのがこの時期のプライベートOKRを立てたときのKey Result 1でした。

当初取り組もうと思っていたのはこの2つです。

kubernetes-the-hard-wayは1月に1周やって、証明書とネットワーク周り厳しいという感想を持ちました。

あとはCKAD-exercisesのようにcka-lab-practiceを何周かしようと思ったのですが、クラスタ立てたりするのは準備なかなか大変(回数あまりこなせそう)だなぁという気持ちになったところに出会ったのがUdemyのCertified Kubernetes Administrator (CKA) with Practice Tests
という講座です。

15分くらい講義を聞いてみてよさそうだったので、技術書典で新刊を出した3月5日頃から再開して取り組みました。

講義にはKatacodaを利用したPractice testが47種類とMock examが4種類付属しています。それぞれ5〜10分と30〜40分かけて取り組むもので、かなり練習になりました。試験直前の1週間にはMock examを3周取り組みました。いずれもテスト環境が用意され、指定されたDeploymentを作ったり、壊れたクラスタをデバッグしたり、クラスタを立てたりする実践的なものです。

アンケートに基づいてコンテンツが改定されているのもポイントで、Dockerやネットワークプラグインの仕組みや証明書の基礎講義も追加されていて痒いところに手が届く作りです。

作者も「CKAはこれだけやっていれば大丈夫」と言うだけあって、完成度が高かったです。

講義やテストで質問があれば、SlackやFacebookで質問ができます。Slackはかなり活発で作者含め作者の会社?の人たちがすぐさま質問に答えてくれ、合格者がたくさん報告していました。

あとは、クラスタ管理には『Managing Kubernetes: Operating Kubernetes Clusters in the Real World』がよいと教えてもらったので、1月上旬に読みました。

本番

3月28日の朝に受験し、3月29日の夜に結果を受け取りました。外出を自粛していたのでサウナには行っていません。

ボーダーライン74%の94%でした。3時間24問。今回は時間も40分以上あまり、特にわからない問題もなかったはずが何か間違っていたようです。

よかったこと

実務でクラスタのメンテナンスをするにあたり、kubectl drainやuncordonは必要なもののそこまで機会があるわけでありません。

taintやtolerationsの設定は本を読むだけではNode affinityとごっちゃになっていました。

それらをKatacodaのテスト環境で何度も試したことで、いざ実務でやるタイミングがきたときも困らずに取り組めました。

Udemyの講義で出てきたネットワークの仕組みや証明書の基礎は全然理解していなかったのと、最近は仕事でずっとIstioを触っているのでネットワークの基礎を学ぶモチベーションが高まったのもよかったことです。

CKAもよかったですが、教材がよかった感があります。

今後学びたいこと

きっと1〜3月の振り返りブログでも書きますが、ネットワークの基礎勉強もしつつ、GCPとTerraformに軸足を置きそうです。

無事Microservices Platformチームへの異動も確定したのでやっていきます。

2020年3月7日(土)から開催される技術書典 応援祭で4冊出展します!

『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜』

今回の新刊はKnativeのIngress Gatewayについてです。3回連続でKnative関連のお話になりました。

昨年末同僚に「なぜIstio(VirtualService)を使わずにKnativeはトラフィックスプリッティングのような機能を実現できるのか」と質問されて答えられなかったのがきっかけで調べることにしました。

Knativeは当初Ingress GatewayにIstioを採用(依存)しましたが、後にGlooをはじめ様々なコンポーネントで代替可能になりました。代替できる事実は知りつつも、なぜ代替できるのか、代替できるとはどういうことなのかを調べることはありませんでした。

しかし、「プラットフォームを開発・運用する」ことへの関心が高まり、(何層もある)Knativeより下のレイヤーを学びたい気持ちが強くなりました。本書はその一環です。Knative = Kubernetes Networkingとも説明されるKnativeのIngress Gateway周りの調査はKubernetesが提供しているService、Ingressの特徴や課題、そもそもロードバランサーとは何かのか、サービスメッシュやEnvoyとはどういう関係があるのか、といったネットワーク関連の入門にもうってつけでした。

「KnativeはなぜIngress Gatewayを交換できるのか?」という問いに答えることは、Envoyの設定をどう表現し、どう配信するかというデザインパターンを見い出すことに繋がります。

80ページ弱の自由研究に付き合っていただけたら幸いです!

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

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

7月の技術書典9で紙本を印刷するのを目指し、フィードバックを受けてブラッシュアップしていく所存です。

目次です。

第1章 Knative
1.1 概要
1.2 Serving
1.3 Eventing
1.4 まとめ

第2章 Gateway
2.1 ServiceとIngress
2.2 Gateway と Service Mesh
2.3 Envoy とコントロールプレーン
2.4 コントロールプレーンの実装例(Istio)
2.5 まとめ

第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 まとめ

第7章 Gloo
7.1 概要
7.2 Knativeのコンポーネント
7.3 Glooのコンポーネント
7.4 まとめ

第8章 まとめ
8.1 Gateway
8.2 Ambassador
8.3 Contour
8.4 Gloo
8.5 Kourier
8.6 Istio
8.7 最後に

『Knativeの歩き方 KubernetesからServerlessを訪ねて』

こちらは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のローカル実行

今後

回を追うごとにニッチな感じになってきた気がします。自分の興味のある分野の自由研究としてとても面白くはあるものの、技術書典9はポップでキャッチーなやつ書こうかなと思っています。