Filestore Enterprise のスナップショットのスケジュールを設定する


このドキュメントでは、Cloud Scheduler を使用して Filestore スナップショットのスケジュールを設定し、保護する方法について説明します。

このドキュメントは、スケジュールされた Filestore スナップショットについて学習または作成する IT 意思決定者、バックアップ管理者、障害復旧(DR)管理者を対象としています。

目標

  • Cloud Run functions と JSON 構成ファイルを構成します。
  • Cloud Scheduler ジョブを作成する。
  • スケジュールされた Filestore スナップショットを作成してラベルを付けます。
  • スナップショット作成プロセスをモニタリングします。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.

    Enable the APIs

デプロイモデル

次の図は、Filestore スナップショットの Cloud Run 関数をサポートするデプロイモデルを示しています。

Filestore スナップショットの Cloud Run functions をサポートするデプロイモデル。

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: Filestore Enterprise インスタンス、Cloud Run 関数、Cloud スケジューラをインストールする Google Cloud プロジェクト ID。
    • GCP_REGION: Filestore Enterprise インスタンス、Cloud Run 関数、Cloud Scheduler をインストールする Google Cloud リージョン。
    • APP_ENGINE_REGION: App Engine をインストールする App Engine ロケーション リスト内のリージョン。次の要件を考慮してください。
      • Google Cloud プロジェクトには App Engine インスタンスを 1 つだけ配置できます。App Engine のリージョンは後で変更できません。
      • Cloud Scheduler ジョブと App Engine インスタンスは同じリージョンに存在する必要があります。
        • たとえば、Cloud Scheduler リソースで us-central1 を使用している場合は、App Engine でも us-central を使用します。
        • App Engine は、一部のリージョンに対して一意の命名規則が適用されます。詳細については、App Engine のロケーションの一覧をご覧ください。
    • FUNCTION_NAME: Cloud Run 関数に付ける名前。
    • 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 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 権限をご覧ください。

サービス アカウントを作成するには、次の手順を行います。

  1. 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
    
  2. サービス アカウントを作成します。

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
    
  3. サービス アカウントにロールをバインドします。

    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 インスタンスを作成する

  1. 使用する 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 ネットワーク名
  2. 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 プロジェクトには App Engine を 1 つだけ配置できます。リージョンは後で変更できません。

  • App Engine をまだ作成していない場合は、Cloud Shell で作成します。

    gcloud app create --region=$APP_ENGINE_REGION --project=$PROJECT_ID
    

JSON 構成ファイルを作成する

Cloud Run 関数の制限により、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: スナップショットの数。

リポジトリのクローンを作成する

ラボのリポジトリのクローンを作成して、ディレクトリに移動します。

  1. Cloud Shell でラボ リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
    

    出力は次のようになります。

    Cloning into Filestore-Snapshot-Scheduler
    
  2. ディレクトリに移動します。

    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 インスタンスに 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 スナップショットを検証する

  1. Google Cloud コンソールで、[Cloud Scheduler] ページに移動します。

    Cloud Scheduler に移動

  2. 作成したジョブの行で、 [アクション] > [ジョブ実行を強制] をクリックします。

  3. [更新] をクリックします。

    • ジョブが正常に実行されると、[前回の実行結果] 列に、最後に成功したジョブのタイムスタンプが表示されます。
    • ジョブが失敗した場合は、次の操作を行います。

      1. [Cloud Functions] ページに移動します。

        Cloud Functions に移動

      2. 作成した関数の行で、 [アクション] > [ログを表示] をクリックします。

      3. エラー メッセージを確認し、それに応じてトラブルシューティングを行います。

  4. Google Cloud コンソールで、[Filestore インスタンス] ページに移動します。

  5. [インスタンス] リストでインスタンスを選択し、次の形式の名前のシャドウコピーがあることを確認します。

    sched-RETENTION_NAME-DATE-TIME
    

    例: sched-daily-20220315-120640

クリーンアップ

このチュートリアルで使用したリソースに対して Cloud Platform アカウントで課金されないようにするには、リソースを含むプロジェクトを削除します。

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ