iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
自我挑戰組

和AI學習gcp - 建立對話代理系列 第 13

Day13: Artifact Registry 遷移

  • 分享至 

  • xImage
  •  

今天會把gcr轉移到ar

gcr: google container registry

ar: artifact registry

GCR 是舊時代的產物(已進入維護模式),而 Artifact Registry 是它的進化版,也是目前的業界標準。

特性 GCR (Google Container Registry) Artifact Registry (AR)
地位 舊版 (Legacy),即將淘汰。 新版 (Current),官方推薦。
支援格式 僅限 Docker 鏡像 Docker、npm、Python (PyPI)、Java (Maven)、Go、Helm 等。
權限控制 專案級別。只要有 Storage 權限,就能讀取所有鏡像。 資源級別 (IAM)。可以針對單一儲存庫設定權限,更安全。
儲存架構 放在 artifacts.PROJECT-ID.appspot.com (背後是 GCS)。 獨立的區域化儲存庫 (例如 asia-east1-docker.pkg.dev)。
虛擬儲存庫 不支援。 支援 (可同時整合遠端與本地端套件源)。
清理機制 較難自動化管理。 內建更強大的「清理規則(Cleanup Policies)」。
儲存費 0.026USD/GB/月 0.1 USD/GB/月
每掃描一個新的鏡像約 0.26USD(預設關閉)

除了ar取代gcr勢在必行外, 因為ar的收費也較gcr要高, 我會新增在ar只保留最新的三個build的邏輯, 較舊的就清除

本日任務

  1. 新增artifact registry repo (由terraform定義)
  2. 搬移現有的image進入ar
  3. 更新image路徑
  4. 更新build指令
  5. 刪除現有gcr image

新增ar repo (artifact_registry.tf)

resource "google_artifact_registry_repository" "bank_ai" {
  location      = var.region
  repository_id = "bank-ai"
  format        = "DOCKER"

  # AR 掃描預設關閉,避免額外費用
  cleanup_policy_dry_run = false

  cleanup_policies {
    id     = "keep-3-most-recent"
    action = "KEEP"

    most_recent_versions {
      keep_count = 3 // 保留最新三個image
    }
  }

  cleanup_policies {
    id     = "delete-old"
    action = "DELETE"

    condition {
      tag_state = "ANY"
    }
  }
}

在iam中新增role給sa可以讀取ar的鏡像

resource "google_project_iam_member" "sa_ar_reader" {
  project = var.project_id
  role    = "roles/artifactregistry.reader"
  member  = "serviceAccount:${local.chatbot_bff_sa_email}"
}

並且更新 crawler, cloudrun的對象為ar

因為今天的內容只會動到iam, 和gcr, ar, 我不想把整個專案跑起來 不用make up 改用一次性命令

terraform -chdir=terraform apply \
  -var=project_id=chat-bot-484615 -var=region=asia-east1 -var=assets_bucket_name=bank-ai-excel-assets-chat-bot-484615 \
  -target=google_artifact_registry_repository.bank_ai \
  -target=google_project_iam_member.sa_ar_reader \
  -auto-approve

從gcp的搜尋欄位 搜尋artifact, 去到artifact registry的頁面

可以看到剛新增的repo出現了 而gcr的舊有內容也在(gcr在google搬移的政策下移來ar中)

不過可以看到剛定義的bank-ai 區域在Taiwan, 這樣傳輸就會在同一區域不會有額外收費

另外可以看到scanning預設是disabled

https://ithelp.ithome.com.tw/upload/images/20260813/20154359Vz6RHVUpDe.png

接著把gcr的image移動到bank-ai

crane copy gcr.io/chat-bot-484615/bank-crawler:latest \
  asia-east1-docker.pkg.dev/chat-bot-484615/bank-ai/bank-crawler:latest

crane copy gcr.io/chat-bot-484615/bank-vectorize:latest \
  asia-east1-docker.pkg.dev/chat-bot-484615/bank-ai/bank-vectorize:latest

不過可能會遇上一些權限問題 直接觸發build來在bank-ai新增image也可以

接著刪除gcr上的image

gcloud container images delete gcr.io/chat-bot-484615/bank-crawler:latest --force-delete-tags --quiet
gcloud container images delete gcr.io/chat-bot-484615/bank-vectorize:latest --force-delete-tags --quiet

手動在gcp上把gcr.io刪除也可以


上一篇
Day12 :Metadata 分類設計
下一篇
Day 14 Firebase Auth與身份驗證整合
系列文
和AI學習gcp - 建立對話代理14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言