Programar snapshots do Filestore Enterprise

Este documento mostra como usar o Cloud Scheduler para programar e proteger snapshots do Filestore.

Este documento é destinado a tomadores de decisões de TI, administradores de backup e de recuperação de desastres (DR, na sigla em inglês) que querem aprender a criar snapshots programados do Filestore.

Modelo de implantação

O diagrama a seguir mostra o modelo de implantação que oferece suporte a funções do Cloud Run de snapshots do Filestore.

Modelo de implantação compatível com funções do Cloud Run de snapshots do Filestore.

O job do Cloud Scheduler coordena com as funções do Cloud Run para programar e gerar snapshots do Filestore e arquivos de registro. Os snapshots estão disponíveis no compartilhamento do Filestore.

Limitações conhecidas

Ao se preparar para configurar um programador de snapshots para instâncias do Filestore, considere as seguintes limitações:

  • A função exclui apenas um snapshot quando necessário, mesmo que haja mais snapshots do programador do que o definido no arquivo de configuração da política de retenção ou se o arquivo de configuração da política de retenção for atualizado para manter menos snapshots do que antes.
  • Se você diminuir o valor numérico de snapshots no arquivo de configuração JSON, os snapshots redundantes da instância não serão excluídos automaticamente. Se você mudar a configuração, será necessário excluir manualmente os snapshots redundantes.
  • Como o limite para o ID do snapshot é de 75 caracteres, o nome da política de retenção tem um limite de 50 caracteres.

Preparar o ambiente

Nesta seção, você configura as variáveis de ambiente, clona o repositório e cria os aplicativos e arquivos necessários para este tutorial.

Defina as variáveis de ambiente

  • No Cloud Shell, digite este comando:
gcloud components update
  • No Cloud Shell, crie as seguintes variáveis:

    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
    

    Substitua:

    • PROJECT_ID: o ID do projeto Google Cloud em que você quer instalar a instância empresarial, a função do Cloud Run e o Cloud Scheduler.
    • GCP_REGION: a Google Cloud região em que você quer instalar a instância empresarial, a função do Cloud Run e o Cloud Scheduler.
    • APP_ENGINE_REGION: uma região da lista de locais do App Engine em que você quer instalar o App Engine. Considere os seguintes requisitos:
      • Um projeto do Google Cloud pode ter apenas uma instância do App Engine, e a região do App Engine não pode ser alterada depois.
      • O job do Cloud Scheduler e a instância do App Engine precisam estar na mesma região.
        • Por exemplo, se os recursos do Cloud Scheduler usarem us-central1, use o equivalente do App Engine us-central.
        • O App Engine aplica uma convenção de nomenclatura exclusiva para algumas regiões. Para mais detalhes, consulte a lista de locais do App Engine.
    • FUNCTION_NAME: o nome que você quer dar à função do Cloud Run.
    • SCHEDULER_NAME: o nome que você quer dar ao Cloud Scheduler.
    • SCHEDULER_EXPRESSION: a expressão cron do Cloud Scheduler. Por exemplo, 10 0 * * *. Para mais informações, consulte Configurar programações de cron job.
    • SCHEDULER_TZ: seu fuso horário para o Cloud Scheduler, no formato de nome da lista de fusos horários do banco de dados tz. Por exemplo, America/Los_Angeles.
    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço recém-criada, por exemplo, scheduler-sa.

Criar uma conta de serviço

Nesta seção, você cria uma conta de serviço dedicada, que permite criar e gerenciar a função do Cloud Run e o job do Cloud Scheduler.

Ao fazer esse procedimento, a conta de serviço precisa das seguintes permissões:

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

Para mais informações, consulte Permissões do IAM do Filestore ou Permissões do IAM das funções do Cloud Run.

Para criar a conta de serviço, faça o seguinte:

  1. No Cloud Shell, crie um papel dedicado para o programador de snapshots com as permissões necessárias:

    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. Crie a conta de serviço:

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
    
  3. Vincule o papel à conta de serviço:

    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
    

Criar uma instância empresarial

  1. Se você ainda não criou variáveis de ambiente para uma instância empresarial que quer usar, no Cloud Shell, crie as seguintes variáveis:

    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
    

    Substitua:

    • FILESTORE_INSTANCE_ID: o nome da instância empresarial
    • SHARE_NAME: o nome do compartilhamento da instância empresarial
    • NUMERIC_IN_GB: o tamanho do compartilhamento da instância empresarial, um número entre 1.024 e 10.240, em incrementos de 256.
    • VPC_NAME: o nome da rede VPC em que você quer instalar a instância empresarial
  2. Se você ainda não tiver uma, crie uma instância do 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
    

Para saber mais, consulte o artigo Criar instâncias.

Criar um App Engine

Nesta seção, você vai criar um App Engine para seu projetoGoogle Cloud . Isso permite criar um job do Cloud Scheduler mais tarde neste tutorial.

Um projeto do Google Cloud pode ter apenas um App Engine, e a região não pode ser alterada depois.

  • Se você ainda não tiver um, crie um no Cloud Shell:

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

Criar o arquivo de configuração JSON

O arquivo de configuração JSON pode ter até oito instâncias do Filestore devido a uma limitação das funções do Cloud Run. Se você tiver mais de oito instâncias do Filestore para programar snapshots, use mais jobs do Cloud Scheduler.

  • No Cloud Shell, crie um arquivo chamado request.json e edite o conteúdo de acordo com seu ambiente:

    {
                "retention_policy": "RETENTION_NAME",
                "instances": [
                    {"instance_path": "projects/PROJECT_ID/locations/GCP_REGION/instances/FILESTORE_INSTANCE_ID/",
                        "snapshots": NUMBER_OF_SNAPSHOTS
                    }
                ]
    }
    

    Substitua:

    • RETENTION_NAME: o nome do tipo de retenção de snapshot, que faz parte do nome do snapshot. Por exemplo, daily.
    • NUMBER_OF_SNAPSHOTS: o número de snapshots.

Clonar o repositório

Clone o repositório do laboratório e entre no diretório:

  1. No Cloud Shell, clone o repositório do laboratório:

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

    O resultado será assim:

    Cloning into Filestore-Snapshot-Scheduler
    
  2. Insira o diretório:

    cd Filestore-Snapshot-Scheduler
    

Criar a função do Cloud Run

No Cloud Shell, crie a solução de função do 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

Exemplo:

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

Criar um job do Cloud Scheduler

O job do Cloud Scheduler precisa estar em uma região equivalente à região do App Engine.

No Cloud Shell, crie um job do Cloud Scheduler com um ou mais schedulers na mesma instância do Filestore:

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

No exemplo a seguir, o programador diário é executado às 20h:

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

Validar os snapshots programados do Filestore

  1. No console Google Cloud , acesse a página Cloud Scheduler.

    Acessar o Cloud Scheduler

  2. Na linha do job que você criou, clique em Ações > Forçar a execução de um job.

  3. Clique em Atualizar.

    • Se o job for executado sem erros, a coluna Resultado da última execução vai mostrar um carimbo de data/hora do último job concluído.
    • Se o job falhar, faça o seguinte:

      1. Acesse a página Cloud Functions.

        Acessar o Cloud Functions

      2. Na linha da função que você criou, clique em Ações > Conferir registros.

      3. Procure uma mensagem de erro e resolva o problema de acordo com ela.

  4. No console do Google Cloud , acesse a página Instâncias do Filestore.

  5. Na lista Instâncias, selecione sua instância e verifique se ela tem um snapshot com o seguinte formato de nome:

    sched-RETENTION_NAME-DATE-TIME
    

    Por exemplo, sched-daily-20220315-120640