文章目錄
使用 Cloud Run Job 來處理 Error Reporting
原本打算透過之前筆記 為 GCP Cloud Run 加上呼叫 key 保護 的內容來處理 Error Reporting 的錯誤通知,我的實作方式是設定 Error Reporting 的 Notification 透過 webhook 的方式發送到 Cloud Run,處理結束後再透過 Error Reporting api 來將錯誤標記為已處理。
實作後發現 Error Reporting 的 Notification 會出現部份錯誤未成功發送的狀況(嘗試過 email 也有相同問題),我沒有找到確切的原因,猜測可能是 Error Reporting 在錯誤分群時會以分鐘為單位,這樣一來就變成我在一分鐘開始處理並標記 resolved 的錯誤 group,可能在同一分鐘內又有新的錯誤事件發生,造成錯誤 group 又被標記為 open ,但卻沒有再次發送通知。如果下一分鐘又重新通知也沒問題,但這時候又遇到 Error Reporting 的另個特性:open 中的錯誤 group 不會重複發送通知。
因為這個狀況,我決定改變策略:透過 Cloud Run Job 搭配定時的 trigger 來處理 Error Reporting 的錯誤通知,今天就來紀錄一下我的實作方式。
基本環境說明
- macOS Sonoma 14.6.1 (Apple M2 Pro)
- .NET SDK 8.0.401
- JetBrains Rider 2024.1.6
NuGet Library
- Google.Cloud.ErrorReporting.V1Beta1 3.0.0-beta05
使用方式
建立 Cloud Run Job 用的 container:使用
CloudRunJobErrorReporting
為 project nameCloud Run Job 不像 Cloud Run Service 可以使用 online editor,所以需要自行預先建立 container image
Programs.cs
Dockerfile
上傳 container image
建立 Artifact Registry:
Artifact Registry
–>Create repository
,必填項目只有Name
與Region
,其他預設即可也可以使用 Container Registry (舊版本),Artifact Registry 是新版本且有更多的功能
成功建立後取得 url (保存起來,後續 push image 會用到)
build container image
直接使用 docker buildx 來建立並上傳 image
這適合在 gcloud sdk 已經登入或是允許登入的環境使用 (像是本機開發環境就不適合登入 prod 的資訊)
docker buildx build --platform linux/amd64 ./ -t {artifact registry url}/{image name and tag} --push
建立 image 後,從 cloud shell 上傳
建立 image
docker buildx build --platform linux/amd64 ./ -t {artifact registry url}/{image name and tag} --load
打包壓縮 image
docker save {artifact registry url}/{image name and tag} |gzip > {tar name}.tar.gz
從 cloud shell 上傳 image 壓縮檔
)
在 cloud shell 中載入 image
docker load --input {tar name}.tar.gz
從 cloud shell 中 push image
docker push {artifact registry url}/{image name and tag}
使用上傳的 image 來建立 Cloud Run Job
IAM 與管理
–>服務帳戶
–>建立服務帳戶
服務帳戶詳細資料
設定服務帳戶名稱與服務帳戶 ID
將專案存取權授予這個服務帳戶 (選用)
需要
Cloud Run Invoker
與Error Reporting User
權限將這個服務帳戶的存取權授予使用者 (選用)
這不需要額外設定,保持預設值即可
設定 trigger
設定
Name
,Frequency
,Timezone
,Service Account
其他預設即可,以下使用*/5 * * * *
每五分鐘執行一次為範例
心得
概念上與 Cloud Run Service 類似,就我個人的使用經驗來看 Cloud Run Job 可以設定 trigger 來定時執行,不過 Cloud Run Job 也少了 online editor 的功能,在建立 container image 上相對麻煩
參考資訊
文章作者 Yowko Tsai
上次更新 2024-09-11
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。