ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

6月目標

たぶん半分もできないのはいつものこととして、いったん頭の中をダンプするのが大事なのだ

英語

  • Elsa ぼちぼちやってるけど効果でてるのかさっぱりわからん
  • abceed はなかなか点数があがらんくなってきた
  • DMM 英会話やめてパーソナルコーチに変えてみるのをやってみる。その中で英語学習全体についてのコーチングも受けるのでそれ次第かな
  • 仕事で話せなかったやつとかそれいいなーって思ったのをメモしてるのでそれ復習して使いこなせるようにするみたいなトレーニングを習慣化したいなー

セキュリティ

SRE

サイトリライアビリティワークブック ―SREの実践方法

サイトリライアビリティワークブック ―SREの実践方法

  • 発売日: 2020/06/15
  • メディア: 単行本(ソフトカバー)

資格

Community

  • Kubernetes Website の日本語翻訳 はちょいちょいあいてる時間に息抜きにしていこうかなと思います
    • もし自分が知らないことが当たればラッキーだけど、まぁ学習というよりコミュニティ貢献という感じで
  • SRE.fm #2 "Production Ready" をテーマでゲストを打診中。これも実はコミュニティに恩返しをしたいと思ってはじめたというのもあるのです

仕事

  • EKS 移行
  • Progressive Delivery
  • Team のいろいろ
  • Global のいろいろ

生活

  • 味噌汁がつねにある生活がめっちゃいいので続けたい
  • 10km ラン 思考のデフラグになっていいので続けたい
  • 米抜き継続

おわりに

6月までがんばり継続、7月はゆっくりする。

IaC Maturity Model と学習ステップ #srefm

はじめに

先日、ノリと勢いで企画した SRE.fm を行い、ゆるふわに Terraform や IaC の話をしました。

sre-fm.connpass.com

実際にやってみて、質問への回答を行う中で、IaC に関わるひとたちのマジョリティと自分たちには大きな隔たりがあるような感覚を持ちました。そういった中で、質問の1点1点に答えるというよりも、大局的な理解であったり、その本質的な要素であったり、段階に分けた学習ステップ等を言語化することが必要なのではないか、と(その後の二次会で)たどり着きました。

「IaC は当たり前になった」というのは Infra Study Meetup #1「Infrastructure as Code」 での Mizzy さんの言葉で、これに関しては大きく同意するものの、この「当たり前」は「誰でもしている状態になった」「できていないのはありえない」というものではなく、"Basic" - 基本となった、という意味合いが近いと思います。(簡単 - Easy という意味ではない)これはやる意義や方向性に関してはある程度揺るぎないものになってきた一方で、それを成し遂げる方法が簡単になったわけではないと思いますし、基本になったからこそ、より多くのひとが関心を持つようになりました。だからこそ、学習ステップの言語化がより重要になってくるのではないかと思います。

おことわり

というわけで本記事ではこういった IaC にまつわるいろいろの言語化に試みますが、全文章に(たぶん)(しらんけど)がついてると思って読んでください。

筆者は SRE Team で2年ほど IaC を行ってますが、すでにできているものを運用しながら覚えていきました。2年前は Terraform をちょこっと自分で動かしたことある程度でした。あと、Terraform と AWS がメインなので、そちらに視点が偏っていると思います。自分も学習に苦労した気がしつつ、もう忘れてしまっているので、再現性を持たせるためにも言語化することにしました。

あと後述する IaC Maturity Model だと Level 4 にいます。

IaC Maturity Model

@chaspy なんか IaC のレベル感とかをステップごとに分ければいいんかなー

@qsona よさそう。IaC Maturity Model

こういうノリで段階を区分けして、自分が今どの段階にいて、次はどこを目指すべきかを示すと学習の手助けになるかもしれません。

  • Level 0 インフラリソースを全て Manual で作成しており、一切コード化されていない
  • Level 1 インフラリソースが Code 化されているが、plan や apply は localmachine もしくは共有サーバ上で manual で行っている
  • Level 2 インフラリソースの変更が CI/CD Pipeline の中で実行されている
  • Level 3 インフラリソースの変更が Pull Request Based で実行結果のレビューができる
  • Level 4 複数のチームが自律的に各チームの関心のあるインフラリソースを、レビューを通じて変更、適用ができる
  • Level 5 複数の組織がそれぞれの IaC リポジトリを持ち、各チームで維持・運営ができている

その他関連しそうなことをまとめてテーブルにしてみました。

Level Automation Scope
0 No Personal
1 No Personal
2 Yes Team
3 Yes Team
4 Yes Multiple Team
5 Yes Organization

ここで重要なのは Scope の概念です。Effective DevOps がなぜ組織に着目したのか。それはツールを利用してソフトウェア開発のスピードを高めるには、どうしても組織でそれをうまく扱う方法を考える必要があるからです。IaC Maturity Model は組織のスケールに対してどのように適用していくかの段階を言語化したものになります。

Effective DevOps ―4本柱による持続可能な組織文化の育て方

Effective DevOps ―4本柱による持続可能な組織文化の育て方

IaC の難しさ

さて、学習ステップをどう考えていくかの前に、IaC の難しさに目を向けてみたいと思います。

IaC の難しさはその"運用"にあると思います。つまり複数人で運用するための仕組み作りです。Level2 以降の部分にあたります。

実際、ただコードに起こすだけならそんなに難しくありません。既存リソースのインポートは泥臭い作業が必要ですが、もうそれは(なるべく自動化しながら)愚直にやるしかありません。新規リソースの作成もサンプルを通じて HCL 定義を書いて Apply するだけです。

この"運用の難しさ"を考える点がこれまでなかなか言語化されてこなかった点だと思います。

運用を想像する難しさ

運用を想像するために、主要な要素をいくつかあげてみましょう。

State Unit

インフラリソースをどの単位で適用していくのか、その分割単位のことです。

これは特に Level3 から Level4 に移るときに考慮する必要があります。

monolithic な state であることの問題点は、対象のリソースが多くなることで、Plan や Apply に時間がかかる点や、その影響範囲が大きくなってしまい、変更がしづらくなってしまう点です。

これを"適切"に分割する、という答えが組織によるところで、多くのひとが(僕も含め)悩まれる点だと思います。これに関しては

  • 原則 state 間の依存を作らない
    • 作る場合は1方向にする
    • データソースで持ってくる
    • リソース名や ID をベタに書く
  • オーナーシップを効かせるために、チームで扱う単位で分割する

というのが私見です。

Branch Strategy

開発と本番をどのように分け、どのように適用しているのかを Branch Strategy とともに想像する必要があります。これは前述の State をどう分けるかにも密接に関わってくるため、少し複雑です。

よくみるパターンとしては

1. リリースブランチパターン(コードは共通)
  • master merge で Staging へ Apply, release branch merge で Production へ Apply
    • CI の中で vars で切り替えるか、workspace を利用する
    • フローが1本化されるため、かなり厳密な開発本番一致が求められる
    • 例外をどう扱うか(sandbox を別に作るとか)がポイント
    • 規模がある程度大きいとキツくなると思う。(Resource 200+ とか)
2. GitHub Flow パターン(コードはディレクトリ・state もわける)
  • この場合、Feature Branch では Plan のみになるため、master 必ず apply される
  • 開発と本番をディレクトリでコードを分割する service_a/staging service_b/production
    • まぁ分割しなくても workspace を使えばできなくはないか。。。
  • 開発本番一致を厳密に求めないものの、diff で確認できる

弊社は現状後者のパターンを取っています。変数が多いのでまとめると

Pattern リリースブランチ 開発本番でコードは 開発本番でstateは
1 Yes 同じ 違う
2 No 違う 違う

Branch Strategy に合わせて State も分割されるため、その場合は実行時間が長くならないよう、変更検知をして変更があったものだけを plan, apply する仕組みや、1PR で複数の state を変更させないような仕組みが必要になってくるでしょう。

IaC の罠

IaC はインフラを Software のように扱うことで、Software 開発のプラクティスを利用できる、という言説がありますが、注意すべき点がいくつかあります。

通化

ソフトウェアではよく Function を共通化したり、モジュールを使って再利用性を高めたりしますよね。IaC ではそれは影響範囲を広くすることに他ならないので、極力避けたほうが無難です。

特に Terraform の module を DRY のために使うと、その内容を変更しようとしたときに大変ですし、何より一段層が増えることで単純に可読性が悪くなります。

Terraform の module は"強制化したいもの" - 社内で決められたパラメータがある、これだけは絶対に必要なものである、そういったものを module 化するのが好ましく、必要になるまで使わないほうがいい、というのが私見です。

Repeat Yourself ですね。

ロジック

本当にまったく同じリソースを大量に必要になってくるなら必要ですが、ループや分岐といったロジックはどうしても必要になるまで使わないほうがいいです。

これも同じくそのコードを読み取るのに認知負荷がかかるからです。

IaC をどう捉えるか

Infrastructure を Code で表現できるようになったことで、Software 開発でよく使われる方法がすべて好ましいかというとそうではないことを述べました。

これまでの経験を踏まえて、ポイントをまとめてみます。

  • IaC はインフラを宣言的に表現することができる
    • 容易に内容が把握できる(grep ができる)
    • コピペもできる
    • バックアップにもなる
  • IaC はインフラの API のラッパーである
    • API でできることを宣言的に書けるように Provider がしているものにすぎない
    • 結局対象のリソースが何で、それを API でどう扱えるかを知る必要がある
  • IaC をチームで運用する上でもっとも大事なのは認知負荷を下げることである
    • Software Engineer は grep とコピペは得意
    • いらないリソースは消す、いるリソースは増やす、それをシンプルにやるのが良い
      • それがロジックや共通化、依存を極力避けたい理由
    • なおさらインフラに詳しくない Software Engineer まで扱えるようにするためには、Simple さをキープすることが重要

このあたりは実は誰も教えてくれなかったことなのかもしれないなーと、今思います。

IaC の学習ステップ

さて、いよいよどのように学習していけばいいか、Level ごとに考えていきましょう。再掲します。

  • Level 0 インフラリソースを全て Manual で作成しており、一切コード化されていない
  • Level 1 インフラリソースが Code 化されているが、plan や apply は localmachine もしくは共有サーバ上で manual で行っている
  • Level 2 インフラリソースの変更が CI/CD Pipeline の中で実行されている
  • Level 3 インフラリソースの変更が Pull Request Based で実行結果のレビューができる
  • Level 4 複数のチームが自律的に各チームの関心のあるインフラリソースを、レビューを通じて変更、適用ができる
  • Level 5 複数の組織がそれぞれの IaC リポジトリを持ち、各チームで維持・運営ができている
Level Automation Scope
0 No Personal
1 No Personal
2 Yes Team
3 Yes Team
4 Yes Multiple Team
5 Yes Organization

Level 0 -> 1

  • Terraform といった IaC ツールそのものの理解
    • 概念の理解:state, provider, init, plan, apply, import, refresh
    • 実際にサンドボックスで動かしてみる。S3 を作るとか。EC2 を作るとか
  • コード管理したい対象のリソースの理解
    • AWS であればまずどういうリソースがあるのか?何をどこまで管理すればいいのか?
    • それらを API でどのように扱いたいか?
    • 本当にコード管理すべきか?複数人チームで扱うか?変更頻度はどうか?
      • 1度作って1年間変更しないものならしなくていいかもしれない
    • 対象のリソースは Provider が提供しているか
      • あれば動かしてみたり、パラメータを眺めてみたりする
  • 実際に GUI で作ったものを Import、変更をしてみる
  • あとは気合で全部 Import する

Level 1 -> 2

  • CI/CD ツールの理解
    • どれを選んでもさほど差はないので、お好みのものでいいと思います
    • CircleCI, Travis CI, Github Actions
    • AWS CodeBuild, CodeDeploy は使ったことないです)
  • Branch Strategy を考える
  • CI 用のユーザの権限を考える
    • 本当は最小権限が良いのはわかってるが、強い権限をあげがち

Level 2 -> 3

  • Level 2 と 3 はあんまり大差ないかも
  • 今なら tfnotify が便利そうです
  • レビュー観点の整理
    • とはいえ文法はだいたい plan で落ちる
    • apply してこけるものもあるが、そういう前提で、リスクなく失敗できる環境作りに注力したほうが無難

Level 3 -> 4

  • State 分割単位を考える
  • はじめからここまで想定しておけば、インポートの段階から分けておいても良い
  • plan 実行長期化を避けるための変更検知の導入
  • 他のチームで使ってもらうための勉強会等の実施
    • ドキュメント
    • 頻繁に作るリソース - microservices ごとに RDS を作るとか - があれば tf file を scaffold する script を用意してあげるとか

Level 4 -> 5

到達してないので分かりません。たぶん Module 使ったり、Terraform Cloud 使ったりするのが便利なんだと思う。


おわりに

こう考えると、IaC そのものが登場するのはほとんど Level 0 ->1 の間であり、それ以外はチームでどのように扱うか、という点に難しさがあることが分かると思います。

本記事がこれから IaC をはじめるひとや、現状の運用に悩んでいるひとの学習指針になれば幸いです。

謝辞

今回、この記事を書くにいたり、SRE.fm にいきなりのお願いにも関わらず協力いただいた @ryok6t さん、@_inductor_ さんに心から感謝します。この場で話したおかげで、自分自身の思考の整理にもなりましたし、この記事のアウトプットにつながりました。

このアウトプットのきっかけをくれた同僚の@sona さんに心から感謝します。いつもイシュー度の高い問題を提起してくれるおかげで、僕自身も考えるきっかけになっています。

Quipper において Infrastructure as Code を高いレベルで構築、維持してくれた SRE Team の卒業生、および現 SRE Team メンバーに心から感謝します。僕が今このような知見を持つに至ったのはもともとお手本になる基盤があり、そこから学ぶことができたからです。特に現同僚の@suzuki-shunsuke さんの高い技術力にいつも助けられています。

Terraform-jp slack コミュニティ のスタッフ、および参加メンバーに心から感謝します。いつも有用な情報交換や相談に乗っていただけたおかげで理解を深めることができています。

突撃!隣の Terraform の際に突撃させていただいた Kyash の@lamanotrama さん、Mercari の @deeeet さん、@dtan4 さんに心から感謝します。他社事例を知ることで非常に多くの学びを得ることができました。

InfraStudy にて基調講演を発表された Mizzy さんに心から感謝します。心に残る言葉でシメていただいたおかげで、本記事を書くことができました。

おまけ:質問の回答

その場で回答しましたが、ひとはライブアーカイブを再度見ない生き物であることがわかっているので、僕の意見にはなりますが、ここで回答をまとめておきます。

https://app.sli.do/event/bk0aqupz/live/questions

Terraformのレビューに関して、どのような観点でレビューしてらっしゃるのでしょうか?

  • そもそもこのリソースがなぜ必要か、というサービスレベルの観点
  • 対象のリソースが正しく作られそうか、ほかに必要なリソースはないかというリソースレベルの観点
    • 意図通り作られそうか。どのように通信されるのか、とか
    • tag がちゃんとついてるか、とか
  • あんまり HCL 自体のレビューはしない
  • apply で落ちることもあるけど、はやく失敗したほうがいいかなという考え
  • ざっと見てえいっとやってバーンするのが多い

tfstate の分割単位はどの単位でしょうか

  • 各サービスのチーム単位
  • 共通部分、VPC やネットワークは SRE が見ている

Terraform Workspaces を使っていますか?使っている/使っていないに関わらず、その選択をした理由をお聞かせください。

  • 誰も使ってなかったと思う
  • 開発本番を完全一致させていれば、開発本番の切り替えにつかることもできる
  • たぶん大量の同一リソースを複数のテナントで使ってもらうときとかに有効な気がする

state を分割して、かつシェルスクリプトで実行時間を短縮しているかとは思いますが、複数 state にまたがる変更の plan/apply の実行時間は気になりませんか?(並列に実行したりしてるんでしょうか)

  • 並列実行してます
  • 変更検知して変更があるやつだけ実行するのが一般的だと思います

Terraform以外で気になっているインフラ管理系ツールはありますか?(ex CDK,Pulumiとか)

  • chaspy は特にない
  • 開発者が好きな言語でかけてテンションがあがるならそれでいいと思う
    • (テンションがあがるのは大事)
    • ツール自体はなんでもいいはずなので
    • Provider 相当の部分がちゃんと公式の A{PI に追従しているかは気にした方がいいと思う

クレデンシャル情報の管理はどうしていますか?

  • CI で実行する AWS の credential という意味なら CircleCI の環境変数

インポート作業にどれぐらいの期間かかりましたか?

  • kubota さん向け、3ヶ月だそうです

medium.com

module分割する場合、役割単位、サービス単位どちらが良いのでしょうか

  • サービス単位をお勧めします
  • チーム単位というか

俗人化問題はどうやって解決してるんだろうか。

  • たぶん kubota さんに対するもの
  • なんだっけ。。。

CICDは会社さんによってまちまちでしょうけど、実際のところどうでしょうか?

  • どうなんでしょう
  • まちまちな感じですね
  • お好みで良いと思います

新規プロダクトや少人数チームで IaC がどの程度必要なのか

  • Team Level で扱うなら検討した方がよさそうです
  • この質問も今回のモデルを考えるためのヒントになりました。ありがとうございます。

「dryに書く」という表現イマイチわかってないのですが、具体的にどんな感じなのでしょうか

  • Don't Repeat Yourself といって、ソフトウェア開発で同じことを複数書くことを避けよ、という考えがあります
  • ある Role の EC2 インスタンスDNS record の module を作って、それをペタペラ複数作るとか、ですね

workspaceを使わない場合、環境毎のリソース名の違いはどのように吸収しているのでしょうか

  • ディレクトリと State を分けてます
  • inductor さんは vars でわけて、CI で injection してました
  • コードレベルじゃなく、CIのところでなんとかしたほうがいいよね、って結論になったはず

tfstateを分けないとplanやapplyの速度は遅くなりませんか?

  • なると思います
  • 100 とか 200 とかなると分けざるを得ないと思います

dev/prdなどでtfstateを分割したときに共有のresourceをどう管理するか悩んでます。 flagを持たせたり変数で制御したりしてるのを見ますがif文を使うのは負けな気がして。

  • リソースを共有しないほうがいいと思います
  • if 文もやめたほうがいいと思います

使っているTerraform Providerにはどんなものがありますか

  • AWS
  • GCP
  • Datadog が話題にでましたね
  • 僕はほかに Deadman's snitch や pingdom も使ってます

qiita.com

Terraform本体とProviderのバージョンアップ運用はどうしていますか。アップデート頻度も気になります。

  • 基本は最新に追従したほうがいい、ためるとつらい
  • chaspy は githubwatch して最新版でたらバージョン書き換えて PR 作るジョブを使ってます
    • plan みて問題なければマージ
    • 差分あれば修正

CircleCIのほうが多機能な気がしますが、GithubActionsは今後も使っていきたいですか?

  • inductor さん、actions は ssh できないとか制限があるところが好み、という話だったと思う

Jenkinsはどう稼働してますか?自前でサーバを準備ですかね 笑

  • EC2 ですね

おすすめのゲーミングベッドを教えて下さい。

  • 僕このときいなかったな。。。

IaC のテストステップはどんな分類があるでしょうか?(構文チェック、ユニットテストなど)

  • 僕このときいなかったな。。。
  • ユニットテストは書かないですね
  • lint は tflint がある?
  • tf fmt は CI でみてる
  • ポリシーテストとかやってる事例はありますが、このメンバーは誰もしてなかった気がする

hcl2 の制御構文、関数型由来の function と for_each/count を用いて宣言的に書けるのは module 作るときに結構有用だと思うのですが、そのあたりどうでしょうか?

  • 有用だと思います!

5月進捗

5月が終わる。

4月、"がんばらない"を決めていたはずだが、5月はなんだかんだ頑張ってしまった。なんとか生きている。光を浴びるのは大事だし、電波がない状態を確保することも大事なので、週の半分以上は 10km 弱のジョギングをしたりした。

今期から Lead Software Engineer という Role になった。チームを前に進めるという Role である。これに対して何をすればいいのか、そもそもチームを前に進めるとは何か、ということに随分悩んだ。Engineering Manager と期待値調整という意味でどういう振る舞いが期待されているのかを言語化したりした。そして今は腹落ちして落ち着いている。5月はずっとこのことが頭にあったように思う。言葉にできてよかった、と思う。

同じ Role である iOS Team の Member と 1on1 をしたり、その Role にあった卒業生と 1on1 したり。チームでの言語(自然言語。日本語とか英語)の問題について Android Team の Engineer と 1on1 したり。内輪の勉強会で壁打ちしてもらったり。とにかく周囲のひとに助けてもらった。言葉にして、練って、こういうことか、ってなって、最終的には探してたもんはこんなシンプルなもんだったんだ、というところに落ち着いた。時間を割いて付き合ってくれたみんなに本当に感謝している。

もともと、チームで結果を出すことには強い関心があった。しかしそれ以前に、個人で結果を出すことが最初は本当にダメで、話にならないレベルで、それがようやく少しマシになってきて、本当は関心があったこともなんだかあったのかどうだかわかんなくなったりして、今やっとチームのことに"ちゃんと"取り組めるようになったのは前に進んだような、なんだか不思議な気持ちである。

いろんなひとと話して落ち着いたのは、この Role、肩書きに実質的な意味はない。なくていいならないでいいものだ。けれど、チームは違えどみんなだいたい同じようなミッション・ロールを持っていることがわかった。曖昧なように見えて、実はそうでもなかったりしたことがわかった。技術なのかなんなのかで、チームの達成を支えるんだけど、決して自分がボトルネックにならない形であることが、なんとなく共通解であることがわかった。

チームメンバーは本当に、本当に全員自分より圧倒的に優秀で、それぞれ得意なものがあって、多様性をうまく結果につなげることができつつあるチームで本当に感謝しかない。自分はどちらかというとコードを書く早さはむしろ遅いほうだし、注意力も高くないし、技術を学習するスピードもそんなに早くない。英語も特段できるわけでもない。General に広めになんでも興味を持てることや、チームでどうあるべきかに興味があることや、他の業種とのコラボレーションにちょっとだけ興味が強いことだけが数少ない強みで、それをなんとかバリューにつなげられたのかな?と思ってもいいかな、という1年だった。

"チームジャーニー"がたまたま積んであって、このタイミングで読んで、"リーダー"はひとにつくけれど、"リード"は物事につく。分野ごとにリードを立てるというのが非常に自分の考えや今のチームに当てはまって、しっくりきた。すごい恵まれた環境だと思う。

自分はひっそりと、各メンバーが1.2倍のバリューを出せるような何かをして、薄い存在になって、いなくてもそうなるような、そういうことをやるロールなんだな、と納得している。

今日"斜め"の関係である、開発チームの Engineering Manager と 1on1 して、「同じ成功体験はしてはならない」という厳しくも薄々考えつつ目を背けていた言葉をもらった。一度成功したことを、もう一度自分自身がそのパターンを当てはめて実現するのは、価値がない。価値がないとまでは言わないが、それはチームとしての価値は薄い。それを他のひとができるようにしないといけないんじゃない?という話をした。まったくもってその通りである。自分自身が Individual Contributor として達成したい欲求を幾分が抑える必要がある。これはなかなか難しい話である。でも早いうちにそれに気づけてよかったと思う。

次自分がどこに集中していくのか、まだ視界はぼんやりしているけれど、これまでの2年とはまた違うことをやるんだと思う。大きく広げた風呂敷をどう包んでいくかとまた考えないといけない。 そしてまた自分もメンバーから学べることは無限にある。そういうループにいられる環境を自分自身で少しずつ良いものにしていく、と思えばとても健康な話だと思う。

やることがたくさんあって、いいことだ。

「英文法の鬼100則」を読んだ

読んだ。めっちゃ良かった。

英文法の鬼100則 (アスカカルチャー)

英文法の鬼100則 (アスカカルチャー)

  • 作者:時吉 秀弥
  • 発売日: 2019/11/14
  • メディア: 単行本(ソフトカバー)

自分は典型的な英語できるようになりたいけどなれない日本人で、ダメだとわかりつつよくこういう本を買っては積んだりわかった気になったりしてきたんだけど、この本は本当にスッキリした。

語学って、完全なルール化は無理だよねってあるところで諦めてしまって、実際それはその通りなんだけど、それでも「イメージ」でおそらく8割9割がたまかなえるような説明がされていて、非常に説得力があった。

認知言語学」というものがあることもはじめて知った。英語の気持ち、と表現されていたのが面白い。

軽い情報が前、言いたいことを先に言う、という大原則や、文型を力の方向と解釈しなおしたり。前置詞の持つイメージだったり。これまでの中学・高校で学んだ、ある意味表層的な理解から一歩深いところに踏み込める面白い体験だった。もっと早く読みたかったなあ、と思える本は貴重だ。

「丸暗記、禁止。」と帯にあるように、原則やイメージを覚えて応用して、最低限の知識で使いこなせるようになろうということだが、それでも100のトピックがあり、読みながらほうほうーとは思ったものの、その原則すら覚えられてないので、時々辞書的に引き直そうと思う。

今後はスピーキングだけではなく、ライティングもちゃんとやっていきたいと思っているので、そのときに文法的にこれはどう捉えればいいんだっけ?ってときに役に立ちそうだ。

年になかなかない、手元においておきたいと思える1冊でした。

生きているだけでえらい

4月が終わった。

自分の人生で好きなことは4つあって、好きなひとと会うこと、旅に出ること、本を読むこと、お酒を飲むことで、そのうち半分がコロナで消えてしまい、メンタルに支障をきたしていた。

仕事そのものは特にリモートでも問題なく、意図したものも意図してないものもあるが、チーム内のコミュニケーションに関しても以前より増えている。まぁそれとは別にオンラインラーニングの需要が高まっていてSite Realiabiltiy 担当としては非常にカオスな状況ではあるのはそれでしんどいけど。

あとは自律神経のバグりかたも酷くて、もともと夜遅く作業することも結構あったんだけど、通勤がなくなることでそれが酷くなって、22時−2時とかに気絶してしまいそのあと眠れない、そして昼眠くなるみたいなことになっていた。そのせいで、もはや惰性となっていてよくなかったのではあるが、英会話を DMM の1日の最終の時間(25:30)にすることが多かった状況だったので、英会話自体もできなくなってしまった。短期間で築きあげた習慣や生活は崩れるのも一瞬だ。

なんとか自律神経バグに関しては後半には修正することができた。太陽を浴びる、太陽が出てる時間にジョギング、夜お風呂に浸かって読書、そして何より"がんばらない"こと。

今月は徹底的にがんばらないと決めた。せっかく続けていた英会話も、上記の事情もあったが、正直伸びが逓減していたのもあったので思い切って休会した。仕事も、仕事に必要な勉強も、とにかく生きているだけでえらいということで休んだ。

そうすると23時頃にぼーっと何もしないをしていると、お風呂につかって副交感神経が優位になっているからか眠くなり、そのまま一度朝方4時とか5時には起きつつも、二度寝したり。あるいは5時に起きて早朝の6時から9時に作業して、みんなが起き始める9時−11時とかをジョギングや風呂の時間にしたりなどすることで、つまり生活のリズムを正しくし、仕事の時間を他のメンバーとずらすことで仕事を効率的に進められるなどのメリットも見えてきた。

一方で、Stay Home な"生活”をなんとか辛抱することはできても、生きている意味を失いつつあり、いまや仕事と食事しかない。なんとかプライベートで会話できる友人と少なくない時間ビデオチャットをすることでなんとか生きる意味をつないでいる。

正直本音で言うなら「接触」を気をつけてること、自衛を気をつけること、免疫を高めること、などを気をつければ外出していいんじゃないの?と思っている。一方でこれを社会に政府がメッセージとして出すとカオスになり感染拡大するのもまたわかる。旅がしたい。まぁ1人で旅をしてもなんだかんだひととは接するので、やはりよくないといえばそうなのだろう。

趣味で半年ほど前にはじめたカメラも、もともとひとが好きで、ひとを撮るのが好きではじめたこともあって、その機会が事実上消滅してしまい一切の興味がなくなってしまい、これまたお金の使い先もなくなってしまった。グッバイレンズ沼

そして登山も。これからは毎週登るぞと友人に触発された矢先にこの流れだったので結局行けていない。ソフトウェアエンジニアリングという意味ではインドアだが、(そしてそれはプライベートと言えなくもない地続きな存在ではあるが)プライベートでは自分はアウトドアだったのだなと実感する。

じゃあ家でたくさん飲酒してるのかというと意外にそんなこともなくて、そんなに量は飲んでいない。もともと依存症だと思うので毎日飲んでいるのは変わらず、でも外で飲んでた分がまるまるなくなり、家で飲んでた分も特段増えていない、むしろ減っているかもしれない。酒に関してはもちろん酒の味そのものもおいしくて好きだけれど、やっぱり酒とともにあるひととの会話が好きだったりして、その楽しさが飲酒量を増やすという側面はあったのだろう。まぁこれからの在宅、量より質を極めていくのは悪くないが。

こうやって結構自分はダメージを受けているし、この状況が1年や2年続くことにも絶望しているが、人間の適応能力はすごいものなので、これがまた当たり前になって、なんとか生きていくのだろうとは思う。

家にいる良い点としては、ひたすら部屋が片付いていき、収納の工夫を少しずつ進めているのはいい点だ。自炊をしているのもあり、キッチンまわりの収納をはじめて工夫したりしている。この家にはもうすぐ4年で6月に契約更新だが、在宅中心になった今、特に引っ越すインセンティブがなくなったのでもう2年更新することに決めた。まぁ部屋の快適さを追求していくなら引っ越したくなるのいかもしれないが、とりあえずは。

そういえば4月の前半は左手首が痛かったんだが、キーボートとリストレスト、MAgic Trackpad、PC スタンドを購入し、自宅での作業環境を充実させると驚くほどになくなった。良質なキーボードというものは偉大だし、リストレスト以外は会社の補助で購入できてありがたいばかりである。

さて頑張らないといったものの、いつまでも頑張らないままでいるのもそれはそれで死と同義なので、5月は少しがんばりを再開しようと思っている。それは別のエントリーで書こうと思う。

HashiCorp Certified: Terraform Associate を取った

はじめに

とった。多分日本人初。

  • 試験は問題、試験官との会話ともに英語
    • まぁわかんなかったら chat できるから大丈夫
  • 受験は自室等からどこでも。
  • Exam を Purchase(77USD ぐらい)したあと、任意のタイムスロットを予約する
    • どうも PDT あたりのタイムゾーンでの活動時間が選べたよう
    • というわけで 2020-04-22 JST 23:30 から受けた
  • 部屋に1人だとか机がきれいだとか受験のルールはここにのっってる Online proctoring: Candidate portal FAQ | Questionmark
    • 試験は Question Mark という外部サイトで行われる
  • スケジュール登録すると案内のメールがくる
    • ちなみに初回登録遺jにはこなかったので一度キャンセルして再登録したらきた
    • キャンセルはペナルティはなし
  • 基本的には選択かテキストボックスに入れる形式で、問題形式はここにある通り。長い記述なんかはない。Sample Questions - Terraform Associate Certification | Terraform - HashiCorp Learn
  • 15分前になるとメールで送られてくる url から試験管に接続できる。ほぼジャストぐらいに入ったが5分ぐらい待たされた
    • つながると zoom が起動する。試験は zoom で行われる
  • 最初は身分証明書(パスポートか運転免許書)の提示、ディスプレイ切ったか、部屋やデスクをカメラで確認などして、同意項目みて同意するみたいなんをする
  • 試験は60分だが、まぁ25分ぐらいで終わった
  • 終わるとすぐに結果が出る。なんと結果はは70% て pass ボーダーラインは不明。ギリだったかもね。
    • 体感は 85% ぐらいいったと思うんだけどなぁ
    • なお分野別の正答率は開示されるが、どの問題が間違ったかはわからない
  • 事前勉強は馴染みのない Terraform Cloud のところ Understand Terraform Cloud and Enterprise capabilities Review Guide をみた Exam Review - Terraform Associate Certification | Terraform - HashiCorp Learn
    • あとは Accociate やしまぁいけるやろうと踏んだ
    • 結果ギリ
  • 終わったあと、今後の改善のためか Survey があるが、ここで採点サイトの不具合で Next button あ表示されずオペレーター刃盥回し、待たされまくりで40分ほど余計2時間を使ってイライラした

まとめ

今はあんまりオススメしないかも。とりあえず試験までなら問題なくいけると思うが、ちょっともろもろの試験のための Web サイトが不安点がチラホラ見える。 難易度は Associate としては妥当。一応2年仕事で terraform 使ってる人間であれば Cloud や Enterprise のところだけ抑えれば突破できる 一方初級者がこれをクリアするのはそれはそれで難しそうなので、この試験対策が基礎の勉強になるみたいになればいいねと思った まぁ AWS の Associate みたいな感じなんじゃないかなあ(AWS 資格受けたことないから知らんけど。。。) ドヤ顔するためのバッヂは10日以内に届くらしい。はよ。

結果

といいつつギリギリ(ボーダー知らんけど)というていたらくである。まぁダメでもともとの人柱チャレンジだったので。。。通ってよかった。

f:id:take_she12:20200423030023p:plain

Learn Envoy - Incremental Blue/Green Deploys

www.envoyproxy.io

ゆっくり読んできたが実は最後である。

  • header based routing で、header をみてこっちに流す、みたいなことができる例
  • Weighted Load Balancing の例。そのまんま、割合に応じて流す cluster を振り分けられる
  • Best Practice: deploy と release を分離すること
    • CI/CD によって Deploy はするが、(その新バージョンのアプリには)トラフィックを流さない、というアプローチをとる
    • これにより、徐々に / Gradually に試すことができるし、もし障害があっても影響を少なくし、ロールバックを簡単にできる
  • Header based routing を行うことで、Production 環境でテストができることも意味する

おわりに

ujihisa さんすごいなあと思いました。

www.youtube.com