Carpe Diem

備忘録

YAMLのような設定ファイルで環境変数を扱う

背景

christina04.hatenablog.com

ではconfig.yamlを読み込ませてサーバを起動するのですが、その中にSlackのAPIトークンを入れる箇所がありました。

config.yaml自体はConfigMapで渡しているのですが、中に記述されているAPIトークンは環境変数でSecretで管理できないかなぁと思ったのがきっかけです。

環境

  • go 1.18.2
続きを読む

macOSのスクリーンショットをJPEGでクリップボードに保持させる

背景

macOSではcmd+shift+ctrl+4スクリーンショットクリップボードに直接保持させることができます。

これを使ってSlackやらNotionやらに直接貼り付ける事がよくあるのですが、データ量が非常に大きいというデメリットがあります。

というのもmacOSでは

という設定になっているためです。
なのでちょっとピクセル数が多いと簡単に10MBなどの画像になってしまいます。

画像保存時にjpegにするという以下のコマンドもありますが、

$ defaults write com.apple.screencapture type jpg

これはディレクトリなどに保存するは有効ですが、クリップボードから直接ペーストする時はうまく働きません。

似たような問題にぶつかっている人は多々いますが、どれも解決策までたどり着いていませんでした。

そんな中、Automatorを使うことでやりたいことが”ほぼ”実現できたので紹介します。

続きを読む

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

背景

実装とAPIドキュメントはしばしば乖離して負債になりがちです。なので

  • 実装コードからAPIドキュメントを生成する
  • OpenAPI SpecのようにAPIスキーマから実装コードを生成する(スキーマ駆動)

といった方針をとることが多いです。

FastAPIは前者のパターンで、実装から自動でOpenAPI Specのドキュメントを生成できます。 後者は以前紹介したこともあります。

OpenAPI で REST API のスキーマ作成 - Carpe Diem

今回は多数のFastAPIベースのマイクロサービスをまとめたモノリポ構成において、ドキュメントを1つにまとめたいと思います。

環境

  • FastAPI v0.76.0
  • uvicorn v0.17.6
  • swagger-ui v4.11.0
続きを読む

Workload Identity Federationを図で理解する

概要

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

これにより

  • AWSからGCPリソースにアクセスする
  • GitHub ActionsからGCRにDocker imageをpushする
  • CircleCIでGKEのデプロイを行う

といった連携が鍵なしで実現できます。

ただ実装だけだとイメージしづらいので今回は図示してみました。

Workload Identity Federation

Workload Identity連携における登場人物は以下です。

左のWorkloadsがGCPリソースにアクセスしたいアプリケーションに当たります。

続きを読む

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

概要

BigQueryはIAMロールを設定する際にハマる事が多いので、アーキテクチャを理解しておくときちんと権限付与することができます。

BigQueryのアーキテクチャ

BigQueryのアーキテクチャは以下のように

  • ストレージ
  • コンピュート

の大きく2つに分かれています。

ref: An overview of BigQuery's architecture and how to quickly get started | Google Cloud Blog

そのため権限もこの2つを意識して設定する必要があります。

続きを読む

CircleCIのsshで困ったこと

概要

CircleCIにはビルドが失敗した際のデバッグ手段としてRerun Job with SSHが提供されてます。

これを押すとEnable SSHというステップが挟まれ、そこに書いてあるsshコマンドをターミナルで実行することでCircleCIで実行中のジョブ内に入ることができます。

ただその中でいくつかハマった点があるので対処法とともにまとめます。

環境

  • CircleCI 2.1
  • circleci/golang:1.17
続きを読む

CircleCIのDynamic Configで差分ビルド

概要

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

↑ではファイルを分割管理する方法を説明しました。

今回はpath filteringを使って差分ビルド(変更のあるディレクトリのみビルド)する方法を説明します。

環境

  • CircleCI 2.1
  • circleci/path-filtering 0.1.2

以下のようなモノリポ環境だったとします。

$ tree
.
├── LICENSE
├── README.md
├── go
│   ├── pkg
│   │   └── uuid
│   │       └── uuid.go
│   └── services
│       ├── service1
│       │   └── cmd
│       │       └── main.go
│       └── service2
│           └── cmd
│               └── main.go
├── go.mod
└── go.sum

差分ビルド要件

今回は

  • service1に変更があればservice1のみビルド
  • service2に変更があればservice2のみビルド
  • service1, service2が依存するpkgに変更があれば両方ビルド

という差分ビルドを実現したいとします。

続きを読む