本文適用於 IT 決策者、備份管理員和災難復原 (DR) 管理員,協助他們瞭解或建立排程 Filestore 快照。
部署模式
下圖顯示支援 Filestore 快照 Cloud Run 函式的部署模型。
Cloud Scheduler 工作會與 Cloud Run 函式協調,排定及產生 Filestore 快照和記錄檔。快照會儲存在 Filestore 共用區。
已知限制
準備為 Filestore 執行個體設定快照排程器時,請考量下列限制:
- 即使排程器快照數量超過保留政策設定檔中定義的數量,或保留政策設定檔更新後保留的快照數量較少,此函式也只會在需要時刪除單一快照。
- 如果您在 JSON 設定檔中減少
snapshots
的數值,系統不會自動刪除執行個體中的多餘快照。變更設定後,您必須手動刪除多餘的快照。 - 由於快照 ID 的長度上限為 75 個半形字元,因此保留政策名稱的長度上限為 50 個半形字元。
準備環境
在本節中,您將設定環境變數、複製存放區,並建立本教學課程所需的應用程式和檔案。
設定環境變數
- 請在 Cloud Shell 中輸入下列指令:
gcloud components update
在 Cloud Shell 中建立下列變數:
export PROJECT_ID=PROJECT_ID export GCP_REGION=GCP_REGION export APP_ENGINE_REGION=APP_ENGINE_REGION export FUNCTION_NAME=FUNCTION_NAME export SCHEDULER_NAME=SCHEDULER_NAME export SCHEDULER_EXPRESSION="SCHEDULER_EXPRESSION" export SCHEDULER_TZ=SCHEDULER_TZ export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
更改下列內容:
PROJECT_ID
:您要安裝企業例項、Cloud Run 函式和 Cloud Scheduler 的 Google Cloud 專案 ID。- :您要安裝企業例項、Cloud Run 函式和 Cloud Scheduler 的 Google Cloud 區域。
GCP_REGION
APP_ENGINE_REGION
:App Engine 位置清單中的區域,您要在該處安裝 App Engine。請考量下列需求條件:- 一個 Google Cloud 專案只能有一個 App Engine 執行個體,且之後無法變更 App Engine 區域。
- Cloud Scheduler 工作和 App Engine 執行個體必須位於相同區域。
- 舉例來說,如果 Cloud Scheduler 資源使用
us-central1
,請使用對應的 App Engineus-central
。 - App Engine 會對部分地區採用獨特的命名慣例。 詳情請參閱 App Engine 位置清單。
- 舉例來說,如果 Cloud Scheduler 資源使用
FUNCTION_NAME
:您要為 Cloud Run 函式指定的名稱。SCHEDULER_NAME
:您要授予 Cloud Scheduler 的名稱。SCHEDULER_EXPRESSION
:Cloud Scheduler Cron 運算式,例如10 0 * * *
。詳情請參閱「設定 Cron 工作時間表」。SCHEDULER_TZ
:Cloud Scheduler 的時區,格式為 tz 資料庫時區清單中的名稱,例如America/Los_Angeles
。SERVICE_ACCOUNT_NAME
:新建立的服務帳戶名稱,例如scheduler-sa
。
建立服務帳戶
在本節中,您將建立專屬服務帳戶,以便建立及管理 Cloud Run 函式和 Cloud Scheduler 工作。
執行這項程序時,服務帳戶需要下列權限:
file.instances.get
file.snapshots.list
file.snapshots.create
file.operations.get
file.snapshots.delete
cloudfunctions.functions.invoke
詳情請參閱 Filestore IAM 權限或 Cloud Run 函式 IAM 權限。
如要建立服務帳戶,請按照下列步驟操作:
在 Cloud Shell 中,為快照排程器建立專用角色,並授予必要權限:
gcloud iam roles create snapshot_scheduler --project $PROJECT_ID --permissions file.instances.get,file.snapshots.list,file.snapshots.create,file.operations.get,file.snapshots.delete,logging.logEntries.create,cloudfunctions.functions.invoke --stage GA
建立服務帳戶:
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
將角色繫結至服務帳戶:
gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --role projects/$PROJECT_ID/roles/snapshot_scheduler
建立企業執行個體
如果您尚未為要使用的企業執行個體建立環境變數,請在 Cloud Shell 中建立下列變數:
export FILESTORE_INSTANCE_ID=FILESTORE_INSTANCE_ID export FILESTORE_SHARE_NAME=SHARE_NAME export FILESTORE_SHARE_SIZE=NUMERIC_IN_GB export NETWORK_NAME=VPC_NAME
更改下列內容:
FILESTORE_INSTANCE_ID
:企業執行個體名稱SHARE_NAME
:企業執行個體共用名稱NUMERIC_IN_GB
:企業執行個體共用大小,介於 1024 到 10240 之間,以 256 為單位遞增VPC_NAME
:要安裝企業版執行個體的虛擬私有雲網路名稱
如果沒有,請先建立 Filestore 執行個體:
gcloud filestore instances create $FILESTORE_INSTANCE_ID --network name=$NETWORK_NAME --file-share=capacity=$FILESTORE_SHARE_SIZE,name=$FILESTORE_SHARE_NAME --tier ZONAL --project=$PROJECT_ID --location=$GCP_REGION
如需詳細資訊,請參閱建立執行個體。
建立 App Engine
在本節中,您將為Google Cloud 專案建立 App Engine。這樣您就能在本教學課程稍後建立 Cloud Scheduler 工作。
一個 Google Cloud 專案只能有一個 App Engine,且之後無法變更區域。
如果沒有,請在 Cloud Shell 中建立 App Engine:
gcloud app create --region=$APP_ENGINE_REGION --project=$PROJECT_ID
建立 JSON 設定檔
由於 Cloud Run functions 的限制,JSON 設定檔最多可有八個 Filestore 執行個體。如要排定超過八個 Filestore 執行個體的快照建立時間,請使用額外的 Cloud Scheduler 工作。
在 Cloud Shell 中建立名為
request.json
的新檔案,並根據您的環境編輯內容:{ "retention_policy": "RETENTION_NAME", "instances": [ {"instance_path": "projects/PROJECT_ID/locations/GCP_REGION/instances/FILESTORE_INSTANCE_ID/", "snapshots": NUMBER_OF_SNAPSHOTS } ] }
更改下列內容:
RETENTION_NAME
:快照名稱 保留類型,會成為快照名稱的一部分,例如daily
。NUMBER_OF_SNAPSHOTS
:快照數量。
複製存放區
複製實驗室存放區,然後輸入目錄:
在 Cloud Shell 中,複製實驗室存放區:
git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
輸出結果會與下列內容相似:
Cloning into Filestore-Snapshot-Scheduler
輸入目錄:
cd Filestore-Snapshot-Scheduler
建立 Cloud Run 函式
在 Cloud Shell 中,建立 Cloud Run 函式解決方案:
gcloud functions deploy $FUNCTION_NAME --region $GCP_REGION --runtime=python39 --trigger-http --source scheduler/ --timeout 540 --service-account $SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --entry-point main --project $PROJECT_ID
例如:
gcloud functions deploy scheduler_func --region us-central1 --runtime=python39 --trigger-http --source scheduler/ --timeout 540 --service-account scheduler-sa@project1.iam.gserviceaccount.com --entry-point main --project project1
建立 Cloud Scheduler 工作
Cloud Scheduler 工作必須位於與 App Engine 區域對應的區域。
在 Cloud Shell 中,使用相同 Filestore 執行個體上的一或多個排程器,建立 Cloud Scheduler 工作:
gcloud scheduler jobs create http $SCHEDULER_NAME --schedule "$SCHEDULER_EXPRESSION" --uri "https://$GCP_REGION-$PROJECT_ID.cloudfunctions.net/$FUNCTION_NAME" --http-method POST --message-body-from-file ../request.json --oidc-service-account-email $SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --time-zone $SCHEDULER_TZ --project $PROJECT_ID
在下列範例中,每日排程會在晚上 8 點執行:
gcloud scheduler jobs create http daily_scheduler --schedule "0 20 * * *" --uri "https://us-central1-project1.cloudfunctions.net/scheduler_func" --http-method POST --message-body-from-file ../request.json --oidc-service-account-email scheduler-sa@project1.iam.gserviceaccount.com --time-zone America/Los_angeles --project project1
驗證排定的 Filestore 快照
前往 Google Cloud 控制台的「Cloud Scheduler」頁面。
在您建立的工作資料列中,依序按一下「
Actions」(動作) >「Force a job run」(強制執行工作)。按一下 [更新]。
- 如果工作順利執行,「上次執行結果」欄會顯示上次成功執行工作時的時間戳記。
如果工作失敗,請按照下列步驟操作:
前往「Cloud functions」頁面。
在您建立的函式資料列中,依序點選「
Actions」(動作) >「View logs」(查看記錄)。找出錯誤訊息,並視情況排解問題。
前往 Google Cloud 控制台的「Filestore instances」(Filestore 執行個體) 頁面。
在「Instances」(執行個體) 清單中選取執行個體,並確認該執行個體有符合下列命名格式的快照:
sched-RETENTION_NAME-DATE-TIME
例如:
sched-daily-20220315-120640
。