今天會把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的邏輯, 較舊的就清除
本日任務
新增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

接著把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刪除也可以