AgentSkillsCN

project-architecture

项目结构与数据流——适用于实现、修改与调试时的参考。涵盖GitHub API、Vertex AI、Perplexity AI的集成。

SKILL.md
--- frontmatter
name: project-architecture
description: プロジェクト構造とデータフロー。実装、修正、デバッグ時に参照。GitHub API、Vertex AI、Perplexity AI連携。
user-invocable: false
allowed-tools: Read, Grep, Glob

Project Architecture

Data Flow

code
1. github.py   → GitHubからリポジトリ情報取得 → list[RepoInfo]
2. profile.py  → Geminiでプロファイル生成    → dict
3. research.py → Perplexity AIで求人検索+マッチング分析 → JobSearchResult

Infrastructure (Blue-Green)

code
                              ┌─ /        → GCS静的サイト (ランディングページ)
Internet → Cloud LB (HTTPS) ──┤
                              └─ /app/*   → Cloud Run (job-recommender) [Blue]
                                                  ↓
                                            VPC Connector → Vertex AI / Perplexity AI

Local Dev → IAM認証プロキシ → Cloud Run (job-recommender-green) [Green]
コンポーネントリソース用途
ランディングページgs://${project_id}-landing-page静的HTML(Bot対策、CDN有効)
アプリ (Blue)job-recommender本番環境(LB経由、allUsers)
アプリ (Green)job-recommender-green検証環境(IAM認証、ローカルプロキシ)

認証: GitHub OAuth(Blue/Green別アプリ、GreenはローカルCallback)

Key Files

FilePurpose
app.pyStreamlit UI、エントリーポイント
services/github.pyPyGithub、RepoInfoデータクラス
services/profile.pyVertex AI初期化、プロファイル生成
services/research.pyPerplexity AI、JobRecommendationデータクラス
terraform/インフラ定義 (Cloud Run + LB)

Key Resources (Terraform)

ResourcePurpose
google_cloud_run_v2_service.appBlue本番(ingress: LB経由のみ、IAM: allUsers)
google_cloud_run_v2_service.greenGreen検証(ingress: ALL、IAM: 制限付き)
google_compute_backend_service.appBlue用バックエンド
google_compute_region_network_endpoint_groupServerless NEG (Blue用)
google_compute_url_mapLBルーティング(Blue環境のみ)
google_artifact_registry_repositoryDockerイメージ保存
google_cloudbuild_triggermain/dev Push時の自動ビルド

CI/CD (Cloud Build)

パイプライン

code
main Push → Cloud Build Trigger → Docker Build → Artifact Registry Push

GitHub接続手順 (2nd gen)

  1. GCP Console で接続作成

    code
    Cloud Build → Repositories → 2nd gen → CREATE HOST CONNECTION
    → GitHub選択 → ブラウザで認証
    
  2. リポジトリをリンク

    code
    接続作成後 → LINK REPOSITORY → リポジトリ選択
    
  3. リポジトリIDを取得

    bash
    gcloud builds repositories describe <repo-name> \
      --connection=<connection-name> \
      --region=asia-northeast1 \
      --format="value(name)"
    

    形式: projects/{project}/locations/{region}/connections/{connection}/repositories/{repo}

  4. terraform.tfvarsに設定

    hcl
    cloudbuild_repository_id = "projects/xxx/locations/asia-northeast1/connections/xxx/repositories/xxx"
    

重要ポイント

  • service_account必須: 2nd genリポジトリのTriggerにはservice_account指定が必須(未指定だとエラー400)
  • データソース非対応: google_cloudbuildv2_connection/google_cloudbuildv2_repositoryのデータソースは未サポート → 変数でID指定

Blue-Green Deployment

環境構成

環境Service名アクセス方法IngressIAM
Bluejob-recommenderLB経由INTERNAL_LOAD_BALANCERallUsers
Greenjob-recommender-greenローカルプロキシALL制限付き

デプロイ検証フロー

code
1. devブランチにpush → Cloud BuildでGreen環境にデプロイ
2. Green検証: ./scripts/proxy-green.sh でローカルからIAM認証でアクセス
3. 問題なければmainにマージ → Blue環境にデプロイ
4. 問題時: ./scripts/rollback.sh で前リビジョンに戻す

スクリプト

スクリプト用途
scripts/proxy-green.shローカルからGreen環境にプロキシ接続(IAM認証)
scripts/rollback.shBlueの前リビジョンにトラフィック切り替え