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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. デプロイモデル

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

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

    Cloud Scheduler ジョブは Cloud Run 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: エンタープライズ インスタンス、Cloud Run functions、Cloud Scheduler をインストールする Google Cloud プロジェクト ID。
      • GCP_REGION: エンタープライズ インスタンス、Cloud Run functions、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 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 Run functions と Cloud Scheduler のジョブを作成、管理できます。

    この手順を行う場合、サービス アカウントには次の権限が必要です。

    • file.instances.get
    • file.snapshots.list
    • file.snapshots.create
    • file.operations.get
    • file.snapshots.delete
    • cloudfunctions.functions.invoke

    詳細については、Filestore IAM 権限または Cloud Run functionsの 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
      

    エンタープライズ インスタンスを作成する

    1. 使用するエンタープライズ インスタンスの環境変数をまだ作成していない場合は、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: エンタープライズ インスタンスをインストールする 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 ZONAL --project=$PROJECT_ID --location=$GCP_REGION
      

    詳細については、インスタンスの作成をご覧ください。

    App Engine を作成する

    このセクションでは、Google Cloud プロジェクト用に App Engine を作成します。これにより、このチュートリアルの後半で Cloud Scheduler ジョブを作成できます。

    Google Cloud プロジェクトに設定できる App Engine は 1 つのみで、リージョンは後で変更できません。

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

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

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

    Cloud Run 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: スナップショットの数。

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

    ラボのリポジトリのクローンを作成し、ディレクトリを入力します。

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

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

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

      Cloning into Filestore-Snapshot-Scheduler
      
    2. ディレクトリを入力します。

      cd Filestore-Snapshot-Scheduler
      

    Cloud Run functions を作成する

    Cloud Shell で、Cloud Run 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 スナップショットを検証する

    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.

    次のステップ