概要
簡単に言うと、直接アクセスできないサーバ(Target)に対し、何かしら踏み台サーバ(Remote)を経由させることでまるで直接アクセスできるようにする仕組みです。
その際に踏み台サーバに対しては上図のようにsshプロトコルを使います。
続きを読むTerraformはInfrastructure as Codeを実現してくれるとても素晴らしいツールである一方、運用時に以下のような問題が発生します。
そのため実行環境を統一(CIと連携など)したり、GitHubでplan結果を貼ってレビュー→問題なければマージ→(自動)applyといった運用をしているチームも多いことでしょう。
しかしTerraformはplanで成功してもapplyでコケることはちょくちょくあるため、そのPRが正しい状態かどうかは実行するまで分かりません。
またCIと連携することで神権限を持ったクレデンシャルを外部サービスに預けることとなり、漏洩リスクが増大しサービスに致命的な被害をもたらす可能性もあります。
このような諸々の課題を解決していい感じに自動化してくれるのがAtlantisです。
GKEのPodといったWorkloadからGCPのリソース(GCS、PubSubなど)にアクセスする場合
の2通りあります。
それぞれの問題点の理解と、その解決策としてのWorkload Identityの説明・導入方法を紹介します。
Goでprotobufのコードを生成する際には公式のgolang/protbuf以外にgogo/protobufが候補に挙がると思います。
大きなメリットはパフォーマンスとカスタマイズ性です。
去年のベンチマークですが、公式より2.5~3倍近くパフォーマンスが良いことがわかります。
benchmark | iter | time/iter | bytes/op | allocs/op |
---|---|---|---|---|
BenchmarkGoprotobufMarshal-8 | 5000000 | 337 ns/op | 96 | 2 |
BenchmarkGoprotobufUnmarshal-8 | 3000000 | 533 ns/op | 200 | 10 |
BenchmarkGogoprotobufMarshal-8 | 10000000 | 132 ns/op | 64 | 1 |
BenchmarkGogoprotobufUnmarshal-8 | 10000000 | 187 ns/op | 96 | 3 |
2019-08-28 Results with Go 1.12.6 darwin/amd64 on a 2.8 GHz Intel Core i7 16GB
ref: GitHub - alecthomas/go_serialization_benchmarks: Benchmarks of Go serialization methods
続きを読む開発中にサーバレスポンスの内容を表示したい時があると思いますが
のそれぞれをログなどで表示する方法を紹介します。
クライアントでは受け取ったレスポンスはio.ReadCloser
です。
なので一度読み込むと以降は読み込めなくなるのでそこだけ注意が必要です。
io.Reader系で実処理ではreadする処理がほぼ必ず入るので、io.TeeReader を使うと良いです。
ref: Goのioパッケージのメソッドを図示 - Carpe Diem
続きを読む以前上の記事でGOMAXPROCS
はCPU数程度が適切に動くという話をしました。
これはこれで正しいのですが、一方でdockerのようにcgroupsでCPU Quotaを制限するケースではこれに当てはまらなくなります。
Kubernetesでいうと
Kubernetesのresource requests, limits - Carpe Diem
のようにlimitsを設定した場合ですね。
今回はその検証と対応方法についてまとめます。