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


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

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

目標

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

費用

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

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

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

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build API を有効にします。

    API を有効にする

デプロイモデル

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

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 ロケーションのリストをご覧ください。
    • 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 権限をご覧ください。

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

  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 プロジェクトは、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: スナップショットの数。

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

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

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

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

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

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

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

  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. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ