Skip to content

GCP Secret Manager プロバイダーを追加 #16

Description

@polidog

要件

前提: #15cmd/+internal/ へのパッケージ再編)完了後の構成を前提とする。

  • internal/provider/gcp/gcp.gogcpProvider struct を実装し、internal/provider/ の Provider interface(Name() string, Sync(opts Options, entries []Entry) error)を満たす
  • init() 関数内で registerProvider("gcp", ...) を呼び出し自己登録する
  • cmd/env-sync/main.go_ "github.com/ptyhard/env-sync/internal/provider/gcp" を blank import して registry に登録する
  • 認証: Application Default Credentials(GOOGLE_APPLICATION_CREDENTIALS 環境変数または ADC 自動解決)を使用
  • 必須環境変数: GCP_PROJECT_ID(Secret Manager の対象 GCP プロジェクト ID)
  • Entry.Secret == true の場合は Secret Manager に secret として作成・更新(projects/{project}/secrets/{key}/versions にバージョン追加)
  • Entry.Secret == false のエントリはスキップしてログ出力(Secret Manager は秘匿値専用のため)
  • Entry.Environments が指定された場合、labels {"environment": "<env>"} を secret に付与する
  • opts.DryRun == true の場合は API 呼び出しをスキップしてログのみ出力
  • テストは internal/provider/gcp/gcp_test.go に追加(他の provider と同じパッケージに配置)
  • go.mod / go.sumcloud.google.com/go/secretmanager 依存を追加
  • env-sync.yaml サンプルに provider: gcp の使用例を追記

完了条件

  • env-sync.yamlprovider: gcp または provider: [vercel, gcp] と設定したとき、GCP Secret Manager に環境変数が同期される
  • GCP_PROJECT_ID が未設定の場合、明示的なエラーメッセージが表示される
  • Entry.Secret == false のエントリはスキップされ、警告ログが出力される
  • --dry-run フラグ使用時は API 呼び出しなしで対象キー一覧がログ出力される
  • go test ./... がすべてパスする(internal/provider/gcp/gcp_test.go を含む)
  • go build ./... がエラーなしで通る

確認手順

  1. go build ./... を実行してビルドエラーがないことを確認
  2. go test ./... を実行して全テストがパスすることを確認
  3. GCP プロジェクトと ADC が設定された環境で GCP_PROJECT_ID=<project> env-sync run --provider gcp --dry-run を実行し、対象変数がログに出力されることを確認
  4. 実際の GCP 環境で dry-run なしに実行し、Secret Manager コンソールでシークレットが作成・更新されることを確認
  5. GCP_PROJECT_ID 未設定で実行し、エラーメッセージが出ることを確認

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions