Salvar e carregar snapshots de ambientes

Cloud Composer 1 | Cloud Composer 2

Nesta página, explicamos como salvar e carregar o estado do ambiente usando snapshots do ambiente.

É possível usar snapshots com o Cloud Scheduler para salvar automaticamente os snapshots do seu ambiente. Para mais informações, consulte Configurar snapshots programados.

Sobre snapshots de ambiente

Os snapshots de ambiente armazenam o estado do seu ambiente. É possível salvar e carregar snapshots de ambiente sob demanda.

Você pode usar snapshots para:

  • Restaure o ambiente para um estado anterior. Crie backups do ambiente usando snapshots e, em seguida, carregue um dos snapshots para restaurar o ambiente. Por exemplo, é possível reverter uma operação de atualização que instala pacotes PyPI ou substitui as opções de configuração do Airflow, mesmo após a atualização do ambiente.

  • Fazer upgrades e copiar ambientes lado a lado Crie um snapshot de um ambiente atual, crie um novo ambiente que use a mesma versão ou uma mais recente do Cloud Composer e aplique o snapshot a esse novo ambiente. Esse procedimento é semelhante à migração. Pause os DAGs antes de criar o snapshot para evitar execuções duplicadas.

Como os snapshots são armazenados

Um snapshot do ambiente é um conjunto de arquivos que descreve o estado do ambiente e armazena o backup dos dados dele.

É possível criar vários snapshots do seu ambiente. Os snapshots de ambiente não são incrementais. É possível usar qualquer snapshot de maneira independente.

O Cloud Composer não exclui snapshots quando você exclui o ambiente.

Por padrão, o Cloud Composer armazena snapshots na pasta snapshots/, no bucket do seu ambiente. Também é possível especificar um local personalizado ao criar um snapshot.

Considerações de segurança para snapshots

Para reduzir esse risco de segurança, armazene informações confidenciais usadas pelos DAGs do Airflow, como chaves ou senhas, no Secret Manager. Para mais informações, consulte Configurar o Secret Manager para seu ambiente.

Verifique as permissões de segurança do bucket do seu ambiente. Se você armazenar snapshots do ambiente em um bucket personalizado, verifique se as permissões de acesso para ele estão configuradas corretamente no projeto. Ao atribuir permissões, verifique se a conta de serviço do ambiente tem permissões suficientes para salvar e carregar snapshots do bucket.

Quais dados são salvos nos snapshots

O Cloud Composer salva os seguintes dados em snapshots:

  • Modificações da configuração do Airflow.
  • Variáveis de ambiente.
  • Lista de pacotes PyPI personalizados, como requisitos.
  • Um backup do banco de dados do Airflow, incluindo estados de tarefas executadas e histórico de execuções do DAG.
  • Um backup das pastas /dags, /data e /plugins do bucket do ambiente.
  • Chave fernet do Environment:
  • Outras informações sobre a configuração do ambiente, como os parâmetros de escala e desempenho dele. O Cloud Composer não usa essas informações ao carregar snapshots.

Quais dados são carregados dos snapshots

O Cloud Composer carrega os seguintes dados de snapshots:

  • Modificações da configuração do Airflow.
  • Variáveis de ambiente.
  • Pacotes PyPI personalizados (a menos que você opte por pular a instalação).

  • O conteúdo do banco de dados do Airflow, incluindo os estados das tarefas executadas e o histórico de execuções do DAG.

  • O conteúdo das pastas /dags, /data e /plugins do snapshot é carregado no bucket do ambiente.

  • A chave fernet do snapshot é usada para criptografar novamente os dados do snapshot com a própria chave fernet do ambiente. A chave Fernet do ambiente permanece inalterada.

Embora o Cloud Composer armazene algumas informações sobre a configuração do ambiente em snapshots, ele não é usado ao carregar snapshots. Os seguintes parâmetros do ambiente não mudam quando você carrega um snapshot:

  • Configuração do ambiente, como escala de ambiente e parâmetros de desempenho.
  • Configuração de rede do Environment.
  • Conteúdo do bucket do ambiente fora das pastas /dags, /data e /plugins.
  • Rótulos de ambiente

Todas as configurações aplicadas na infraestrutura do Cloud Composer sem usar a API Cloud Composer podem ser perdidas ao carregar um snapshot.

Sobre operações parcialmente concluídas

Ao carregar um snapshot, a operação pode ser bem-sucedida, com falha ou parcialmente concluída:

  • Operações bem-sucedidas carregam todos os dados do snapshot.
  • As operações com falha não introduzem alterações.
  • As operações parcialmente concluídas carregam um subconjunto de dados do snapshot. Essas operações são informadas como com falha, mas a mensagem de erro indica quais dados foram carregados. Por exemplo, se os pacotes PyPI estiverem instalados, mas as substituições de opção de configuração do Airflow não funcionarem, a mensagem de erro indicará isso.

Para uma operação parcialmente concluída, tente carregar o mesmo snapshot novamente. O Cloud Composer pula as etapas que foram bem-sucedidas na tentativa anterior. Por exemplo, se uma operação falhou em um tempo limite, mas o banco de dados foi carregado corretamente, a próxima tentativa não carrega o banco de dados novamente.

Antes de começar

  • Os snapshots são compatíveis com o Cloud Composer 2 versão 2.0.9 e posterior. O Cloud Composer 1 é compatível com o salvamento de snapshots do ambiente na versão 1.18.5.

  • Os snapshots não criam um ambiente. Se você quiser carregar um snapshot de um ambiente para outro, primeiro crie um novo ambiente e, em seguida, carregue o snapshot nele.

  • Não é possível carregar snapshots em ambientes que estão no estado de erro. Não é possível corrigir esses ambientes carregando um snapshot. Ainda é possível carregar um snapshot atual para um novo ambiente.

  • Só é possível carregar snapshots na mesma versão ou em versões mais recentes do Cloud Composer ou do Airflow. Por exemplo, não é possível carregar um snapshot do Cloud Composer 2.0.2 para um ambiente com o Cloud Composer 2.0.1. Como outro exemplo, não é possível carregar um snapshot do Airflow 2.2.3 para o Airflow 2.1.4.

  • Os snapshots não mudam a versão do Cloud Composer. Se você fizer upgrade do seu ambiente para uma versão posterior do Cloud Composer e carregar um snapshot de uma versão anterior, seu ambiente ainda manterá a versão atual do Cloud Composer. Por exemplo, carregar um snapshot do Cloud Composer 2.0.1 para o Cloud Composer 2.0.2 não reverte o ambiente para o Cloud Composer 2.0.1.

  • O tamanho máximo do banco de dados do Airflow compatível com snapshots é de 20 GB. Se o banco de dados do ambiente precisar de mais de 20 GB, reduza o tamanho do banco de dados do Airflow antes de salvar um snapshot.

  • Se você salvar snapshots em um local fora do bucket do ambiente, a conta de serviço do seu ambiente precisará ter permissões de leitura e gravação para o local especificado. Por exemplo, o papel Administrador de objetos do Storage tem essas permissões. É possível aplicá-la a um projeto ou a um bucket específico.

Salvar um snapshot do ambiente

O Cloud Composer salva snapshots do ambiente em uma subpasta em relação à pasta especificada. O nome da pasta contém o código do projeto, o local e o nome do ambiente e o carimbo de data/hora em que o snapshot foi salvo. Por exemplo, /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.

Console

Para criar um snapshot do seu ambiente:

  1. No Console do Google Cloud, acesse a página Ambientes.

    Acessar "Ambientes"

  2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente será aberta.

  3. Clique em Salvar snapshot.

  4. Na caixa de diálogo Salvar snapshot, selecione onde armazenar o snapshot:

    • Para armazenar o snapshot na pasta /snapshots no bucket do ambiente, selecione Usar pasta de snapshot no bucket do ambiente (padrão).

    • Para armazenar o snapshot na pasta personalizada, selecione Usar pasta personalizada em outro bucket e especifique um local.

  5. Clique em Save.

gcloud

O comando gcloud beta composer environments snapshots save salva um snapshot do ambiente.

  • O argumento snapshot-location especifica uma pasta em que o snapshot é salvo. Por padrão, os snapshots são salvos na pasta /snapshots no bucket do ambiente. Por exemplo, gs://us-central1-example-916807e1-bucket/snapshots. Também é possível especificar qualquer outra pasta.

Para salvar um snapshot do seu ambiente, execute:

gcloud beta composer environments snapshots save \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-location "SNAPSHOTS_FOLDER"

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • Opcional: SNAPSHOTS_FOLDER com o URI de uma pasta de bucket em que o snapshot será armazenado. Se você omitir esse argumento, o Cloud Composer salvará o snapshot na pasta /snapshots no bucket do ambiente.

O exemplo a seguir usa o local padrão:

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1

O exemplo a seguir salva em uma pasta personalizada:

gcloud beta composer environments snapshots save \
  example-environment \
  --location us-central1 \
  --snapshot-location "gs://example-bucket/environment_snapshots"

API

  1. Crie uma solicitação de API environments.SaveSnapshot.

  2. No campo da solicitação, especifique a pasta em que o snapshot será salvo no campo snapshotLocation.

{
  "snapshotLocation": "SNAPSHOTS_FOLDER"
}

Substitua:

  • SNAPSHOTS_FOLDER pelo URI de uma pasta do bucket em que o snapshot será salvo.

Exemplo:

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot

{
  "snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}

Terraform

Não é possível salvar e carregar snapshots de ambiente do Terraform.

Salvar e carregar snapshots são ações realizadas em um ambiente. Os snapshots resultantes não fazem parte da definição de um ambiente. Como o Terraform gerencia apenas a configuração do ambiente do Cloud Composer, não é possível salvar ou carregar snapshots dele.

Carregar um snapshot do ambiente

Considere a situação a seguir. Por exemplo, o catch-up é ativado e o Airflow executa um DAG em um cronograma entre o momento em que o snapshot foi criado e o momento em que ele foi carregado. Nesse caso, depois que o snapshot é carregado, o Airflow não tem informações sobre a execução do DAG. Portanto, o Airflow executa o DAG novamente para os mesmos dados e tempo.

Como outro exemplo, considere um DAG que é executado em uma programação diária. Você cria um snapshot, o Airflow executa esse DAG e, depois disso, carrega o snapshot no mesmo dia. Nesse caso, o Airflow executa o DAG novamente, mesmo que a detecção esteja desativada.

Console

Para carregar um snapshot no ambiente do Cloud Composer 2, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Ambientes.

    Acessar "Ambientes"

  2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente será aberta.

  3. Clique em Carregar snapshot.

  4. Na caixa de diálogo Carregar snapshot, clique em Procurar.

  5. Selecione uma pasta para armazenar o snapshot. O nome da pasta lista o ID do projeto, o local do ambiente e o carimbo de data/hora em que o snapshot foi salvo. Por exemplo, /snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.

  6. (Opcional) Para pular a instalação de pacotes PyPI personalizados do snapshot, selecione Pular a instalação de pacotes PyPI. Se você carregar um snapshot de um ambiente com pacotes PyPI personalizados instalados, o Cloud Composer não instalará esses pacotes.

  7. Clique em Carregar e aguarde até que o Cloud Composer carregue o snapshot.

gcloud

O comando gcloud beta composer environments snapshots load carrega um snapshot para o ambiente.

  • O argumento --snapshot-path especifica uma pasta em que o snapshot está localizado.

    O nome da pasta lista o código do local do projeto, o ambiente e o carimbo de data/hora em que o snapshot foi salvo. Por exemplo, gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.

  • (Opcional) O argumento --skip-pypi-packages-installation pula a instalação de pacotes PyPI personalizados do snapshot. Se você carregar um snapshot de um ambiente com pacotes PyPI personalizados instalados, o Cloud Composer não instalará esses pacotes.

gcloud beta composer environments snapshots load \
  DESTINATION_ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-path "SNAPSHOT_PATH"

Substitua:

  • DESTINATION_ENVIRONMENT_NAME pelo nome do ambiente em que você quer carregar o snapshot;
  • LOCATION pela região em que o ambiente está localizado;
  • SNAPSHOT_PATH pelo URI de um bucket e depois pelo caminho para o snapshot.

Exemplo:

gcloud beta composer environments snapshots load \
  example-environment \
  --location us-central1 \
  --snapshot-path "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00"

API

  1. Crie uma solicitação de API environments.LoadSnapshot.

  2. No campo snapshotPath do corpo da solicitação, especifique o URI de um bucket, seguido pelo caminho para o snapshot. O nome da pasta lista o código do projeto, o local do ambiente e o carimbo de data/hora em que o snapshot foi salvo. Por exemplo, gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.

  3. (Opcional) No corpo da solicitação, no campo skipPypiPackagesInstallation, especifique se o Cloud Composer precisa pular a instalação de pacotes PyPI personalizados a partir do snapshot. Se você carregar um snapshot de um ambiente com pacotes PyPI personalizados instalados, o Cloud Composer não instalará esses pacotes.

    Este campo é opcional. Se você omitir esse campo, o Cloud Composer instalará pacotes PyPI do snapshot.

{
  "snapshotPath": "SNAPSHOT_PATH"
}

Substitua:

  • SNAPSHOT_PATH pelo URI de uma pasta de bucket em que o snapshot será armazenado.

Exemplo:

// POST https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment:loadSnapshot

{
  "snapshotPath": "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00",
  "skipPypiPackagesInstallation": "False"
}

Terraform

Não é possível salvar e carregar snapshots de ambiente usando o Terraform.

Salvar e carregar snapshots são ações realizadas em um ambiente. Os snapshots resultantes não fazem parte da definição de um ambiente. Como o Terraform gerencia apenas a configuração do ambiente do Cloud Composer, não é possível salvar ou carregar snapshots dele.

A seguir