このドキュメントは、スケジュールされた Filestore スナップショットについて学習または作成する IT 意思決定者、バックアップ管理者、障害復旧(DR)管理者を対象としています。
目標
- Cloud Functions と JSON 構成ファイルを構成する。
- Cloud Scheduler ジョブを作成する。
- スケジュール設定された Filestore スナップショットを作成してラベルを付けます。
- スナップショット作成プロセスをモニタリングします。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build API を有効にします。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build API を有効にします。
デプロイモデル
次の図は、Filestore スナップショットの Cloud Functions をサポートするデプロイモデルを示しています。
Cloud Scheduler ジョブは Cloud Functions と連携して、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
: Filestore Enterprise インスタンス、Cloud Function、Cloud スケジューラをインストールする Google Cloud プロジェクト ID。GCP_REGION
: Filestore Enterprise インスタンス、Cloud Function、Cloud Scheduler をインストールする Google Cloud リージョン。APP_ENGINE_REGION
: App Engine をインストールする App Engine ロケーション リスト内のリージョン。次の要件を考慮してください。- Google Cloud プロジェクトは、1 つの App Engine インスタンスしか持つことができません。App Engine リージョンを後で変更することはできません。
- Cloud Scheduler ジョブと App Engine インスタンスは、同じリージョンに配置する必要があります。
- たとえば、Cloud Scheduler リソースで
us-central1
を使用している場合は、App Engine でもus-central
を使用します。 - App Engine は、一部のリージョンに対して一意の命名規則が適用されます。詳細については、App Engine ロケーションのリストをご覧ください。
- たとえば、Cloud Scheduler リソースで
FUNCTION_NAME
: Cloud Functions に付ける名前。SCHEDULER_NAME
: Cloud Scheduler に付ける名前。SCHEDULER_EXPRESSION
: Cloud Scheduler cron 式(例:10 0 * * *
)。詳細については、cron ジョブ スケジュールの構成をご覧ください。SCHEDULER_TZ
: Cloud Scheduler のタイムゾーン。tz database のタイムゾーンのリストの名前形式(例:America/Los_Angeles
)。SERVICE_ACCOUNT_NAME
: 新しく作成されたサービス アカウント名(例:scheduler-sa
)。
サービス アカウントを作成する
このセクションでは、専用のサービス アカウントを作成します。このアカウントを使用して、Cloud Functions と Cloud Scheduler のジョブを作成、管理できます。
この手順を行う場合、サービス アカウントに次の権限が必要です。
file.instances.get
file.snapshots.list
file.snapshots.create
file.operations.get
file.snapshots.delete
cloudfunctions.functions.invoke
詳細については、Filestore IAM 権限または Cloud Functions 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
Filestore Enterprise インスタンスを作成する
使用する Filestore Enterprise インスタンスの環境変数をまだ作成していない場合は、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
: Filestore Enterprise インスタンス名SHARE_NAME
: Filestore Enterprise インスタンスの共有名NUMERIC_IN_GB
: Filestore Enterprise インスタンスの共有サイズ(1024 ~ 10240 の数値で256 単位で増やす)。VPC_NAME
: Filestore Enterprise インスタンスをインストールする VPC ネットワーク名
まだ作成していない場合は、Filestore インスタンスを作成します。
gcloud filestore instances create $FILESTORE_INSTANCE_ID --network name=$NETWORK_NAME --file-share=capacity=$FILESTORE_SHARE_SIZE,name=$FILESTORE_SHARE_NAME --tier ENTERPRISE --project=$PROJECT_ID --location=$GCP_REGION
詳細については、インスタンスの作成をご覧ください。
App Engine を作成する
このセクションでは、Google Cloud プロジェクトの App Engine を作成します。これにより、このチュートリアルの後半で Cloud Scheduler ジョブを作成できます。
Google Cloud プロジェクトは、1 つの App Engine のみを使用できます。リージョンは後で変更できません。
まだ作成していない場合は、Cloud Shell で App Engine を作成します。
gcloud app create --region=$APP_ENGINE_REGION --project=$PROJECT_ID
JSON 構成ファイルを作成する
Cloud Functions の制限により、JSON 構成ファイルには最大 8 個の Filestore インスタンスを指定できます。スナップショットのスケジュールを設定する Filestore インスタンスが 8 つ以上ある場合は、追加の 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 Functions の関数を作成する
Cloud Shell で、Cloud Functions の関数のソリューションを作成します。
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 インスタンスに 1 つ以上のスケジューラを持つ 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] ページに移動します。
作成したジョブの行で、[
アクション] > [ジョブ実行を強制] をクリックします。[更新] をクリックします。
- ジョブが正常に実行されると、[前回の実行結果] 列に、最後に成功したジョブのタイムスタンプが表示されます。
ジョブが失敗した場合は、次の操作を行います。
[Cloud Functions] ページに移動します。
作成した関数の行で、
[アクション] > [ログを表示] をクリックします。エラー メッセージを確認し、それに応じてトラブルシューティングを行います。
Google Cloud コンソールで、[Filestore インスタンス] ページに移動します。
[インスタンス] リストでインスタンスを選択し、次の名前形式のスナップショットがあることを確認します。
sched-RETENTION_NAME-DATE-TIME
例:
sched-daily-20220315-120640
クリーンアップ
このチュートリアルで使用したリソースに対して Cloud Platform アカウントで課金されないようにするには、リソースを含むプロジェクトを削除します。プロジェクトを削除する
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
- Filestore スナップショットの詳細を確認する。
- Filestore のバックアップについて学習する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center を確認する。