Carpe Diem

備忘録

2022-01-01から1年間の記事一覧

OpenAPI Specベースのモノリポのドキュメントを1つにまとめる

背景 実装とAPIドキュメントはしばしば乖離して負債になりがちです。なので 実装コードからAPIドキュメントを生成する OpenAPI SpecのようにAPIスキーマから実装コードを生成する(スキーマ駆動) といった方針をとることが多いです。 FastAPIは前者のパター…

Workload Identity Federationを図で理解する

概要 GCPのWorkload Identity連携はサービスアカウントで秘密鍵を作らずともGCPリソースへのアクセス権を他の環境(オンプレ、別パブリッククラウド)に付与することができます。 これにより AWSからGCPリソースにアクセスする GitHub ActionsからGCRにDocke…

BigQueryのIAM設定をアーキテクチャから理解する

概要 BigQueryはIAMロールを設定する際にハマる事が多いので、アーキテクチャを理解しておくときちんと権限付与することができます。 BigQueryのアーキテクチャ BigQueryのアーキテクチャは以下のように ストレージ コンピュート の大きく2つに分かれていま…

CircleCIのsshで困ったこと

概要 CircleCIにはビルドが失敗した際のデバッグ手段としてRerun Job with SSHが提供されてます。 これを押すとEnable SSHというステップが挟まれ、そこに書いてあるsshコマンドをターミナルで実行することでCircleCIで実行中のジョブ内に入ることができます…

CircleCIのDynamic Configで差分ビルド

概要 CircleCIのDynamic Configでconfig.ymlを分割管理する - Carpe Diem ↑ではファイルを分割管理する方法を説明しました。 今回はpath filteringを使って差分ビルド(変更のあるディレクトリのみビルド)する方法を説明します。 環境 CircleCI 2.1 circlec…

CircleCIのDynamic Configでconfig.ymlを分割管理する

背景 CircleCIを使っているのですが 多数のリポジトリを管理している config.ymlが肥大化している。けれど殆どは似たような記述 といった背景がある上で、新しいjobやworkflowを各リポジトリに適用していく際に コピペ漏れが起きやすい レビューがつらい と…

FastAPIでPath Operationに def と async def どちらを使うべきか

背景 FastAPIでは以下のようにデコレータ関数を使うことでHTTPサーバのpathを設定することができ、これをPath Operationと呼びます。 from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"} @app.ge…

技術ブログを書くための心構えやツール

概要 技術ブログを書くための心構えや使っているツールを紹介します。 心構え まずは意識していることから 人に説明できなきゃ理解してるとは言えない 教えることは二度学ぶこと 人に教えるにはn倍理解してないといけない など色々いい方はありますが、誰か…

Cloud PubSubのOrdering Keyで考慮すること

概要 以下のような購入時のドメインイベントをメッセージング基盤に非同期で渡してから順番通りに実行したい、となった時に便利なのが順序保証をしてくれるPubSubのordering keyです。 購入処理 各マイクロサービスへの状態変更リクエスト 行動ログ追記 購入…

MongoDB Causal Consistency Session

概要 MongoDB Write Concern - Carpe Diem MongoDB Read Concern - Carpe Diem でデータの耐久性・一貫性・分離性・最新性などを保証する方法について説明しました。 しかし、これらの設定だけでは Causal Consistency - Carpe Diem で紹介した因果関係の一…

Causal Consistency

概要 Eventual Consistency(結果整合性)はレプリケーションラグにより「自分が書き込んだデータが読めない」といったような因果関係がおかしくなるケースがあります。 そこでより一貫性の強いものとしてCausal Consistency(因果一貫性)があります。 ※Cas…

MongoDB Read Concern

概要 前回 MongoDB Write Concern - Carpe Diem にてWrite Concernについて説明しました。 今回はRead Concernについて説明します。Read Concernはデータの分離性・一貫性・最新性を考慮する際に気をつけるべき設定です。 環境 MongoDB 3.6+ 前提知識 Point-…

MongoDB Write Concern

概要 MongoDBはデータがどこまで書き込まれたらクライアントにackを返すかという設定ができます。 その設定をWrite Concernといい、メモリまで保存されたのかディスクまで保存されたのか・何台のデータノードにデータが書き込まれたらといった指定が可能です…

ターミナルエミュレータをAlacrittyに

概要 これまでデフォルトのTerminal.appを使っていましたが たまに重い 設定をファイルで管理したい True Color対応してない などの不満が出てきたので、上記課題を解決できるRust製のAlacrittyに移行してみました。 環境 Alacritty + tmux + vimの環境です…

SSHにYubikeyを使う

背景 OpenSSH 8.2からU2F/FIDO2デバイスを用いたハードウェア認証に対応しており、仮に秘密鍵が漏洩しても鍵の生成時に利用したデバイス(Yubikeyなど)がないとsshできなくなるというセキュアな対応が実現できます。 以前はOpenPGPに委譲させたり、PIVで対…

YubikeyにGPGの副鍵を転送する

概要 前回作ったGPGの副鍵をYubikeyに移してセキュアに管理できるようにします。 環境 Yubikey 5C NFC(Firmware: 5.4.3) GPG 2.2.32 前提知識 Yubikey 5が持つ機能 Yubikey 5には以下の機能があります。 ref: ワンタイムパスワードトークンYubiKey |(株)ソ…

GPGで主鍵と副鍵を作成する

背景 Yubikeyを新しくしたのでGPGの運用もYubikeyに寄せようと思ったのがきっかけです。 環境 GPG 2.2.32 前提知識 主鍵と副鍵 GPGには主鍵と副鍵の関係があります。またそれぞれ秘密鍵と公開鍵のペアになっています。 これは鍵が漏洩した際にローテーション…

Bigtableで複数クラスタ構成におけるデータ整合性の保証

背景 Bigtableはレプリケーションを有効にしたマルチクラスタ構成にすることで負荷分散、高可用性を保証することが可能です。 一方でマルチクラスタにすることで 単一行のトランザクションが効かなくなる 書き込み後読み取り操作でレプリケーション遅延によ…

Bazel を使う上での Tips

概要 Bazelを導入する過程で学んだTipsをまとめます。 環境 Bazel v4.2.2 Tips bazeliskを使う Bazelのバージョンを環境別に管理したい場合、bazelbuild/bazeliskを使うのが良いです。 .bazelversionに以下のようなバージョンを書いておけばそのバージョンで…

Bazelを使ってみる その6(テスト)

概要 Bazel解説第6弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem Bazelを使ってみる その4(gRPCのビルド)…

fatal: could not read Username for 'https://github.com': terminal prompts disabledが出たら

概要 CIツールでプライベートリポジトリをgo getしようとするとたまに遭遇する fatal: could not read Username for 'https://github.com': terminal prompts disabled の対応方法をまとめます。 原因 go getはデフォルトだとHTTPSで通信しようとしますが、…

Bazelを使ってみる その5(リモートキャッシュ)

概要 Bazel解説第5弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem Bazelを使ってみる その4(gRPCのビルド)…

Bazelを使ってみる その4(gRPCのビルド)

概要 Bazel解説第4弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem 今回はgRPCをビルドしてみます。 gRPCは2…

GitHub ActionsでConventional Commitsを満たしているかチェックする

概要 Conventional Commits というコミットメッセージの規約があります。 これを守ることで 意味のあるコミット粒度&メッセージになる あとから振り返りやすい Change Logsなどで自動化ツールを活用しやすい といったメリットを享受できます。 しかし新しい…