Nesta página, descrevemos como programar experimentos no Fault Injection Testing e como usar serviços de programação externos para automatizar os testes de resiliência.
Ao programar experimentos, você pode automatizar os processos de teste e executar experimentos durante períodos que minimizam o impacto nos usuários, como:
- Horários de pico ou janelas de manutenção planejadas.
- Dias de jogos ou exercícios de engenharia do caos programados regularmente.
- Pipelines de teste automatizados (CI/CD) para verificar a resiliência antes da implantação.
A programação de experimentos ajuda a estabelecer a validação contínua da tolerância a falhas dos sistemas sem exigir intervenção manual para cada execução.
Como os experimentos programados funcionam
O Fault Injection Testing não inclui um serviço de programação integrado. Em vez disso, você programa experimentos integrando o Fault Injection Testing a um serviço de programação externo, como o Cloud Scheduler.
Para programar um experimento, configure o programador externo para chamar a API Fault Injection Testing ou executar um comando gcloud em um horário específico. Para oferecer suporte a essa integração, o Fault Injection Testing fornece o parâmetro startOnCreateEnabled. Quando definido como true, esse parâmetro informa ao sistema para iniciar o experimento automaticamente logo após a criação.
Como selecionar destinos para experimentos programados
Os recursos de destino de um experimento programado são definidos no modelo de experimento, não na configuração de programação. Veja como o Fault Injection Testing processa os destinos:
- Ao criar um modelo de experimento, você define o tipo de falha e os critérios de seleção dos recursos de destino. Os exemplos de recursos incluem instâncias de VM específicas, recursos com tags correspondentes ou recursos em uma zona específica.
- Ao configurar o programador externo, o payload da API faz referência ao modelo de experimento.
- No horário programado, o programador externo aciona a criação do experimento. Em seguida, o Fault Injection Testing avalia as regras de seleção de destino no modelo naquele momento para determinar quais recursos são afetados.
Se o modelo segmentar VMs com base em uma tag, o experimento programado afetará as VMs que tiverem essa tag no momento exato em que o experimento for executado.
Configurar um experimento programado
Antes de continuar, verifique se você tem o papel roles/faulttesting.operator ou roles/faulttesting.admin.
Configurar uma programação usando o Google Cloud console e o Cloud Scheduler
Embora não seja possível criar programações diretamente no console do Fault Injection Testing, ele fornece os parâmetros necessários para configurar um job no Cloud Scheduler.
- No Google Cloud console, acesse a página Modelos de experimento.
- Selecione um modelo para conferir os detalhes.
Na página de detalhes, anote o seguinte:
- O payload JSON, que inclui
"startOnCreateEnabled": true. - O URL do endpoint de API REST para criar um experimento.
Você vai usá-los no Cloud Scheduler.
- O payload JSON, que inclui
No Google Cloud console, acesse a página Cloud Scheduler e clique em Criar job.
Defina a programação e o fuso horário do job.
Em Tipo de destino, selecione HTTP.
Defina o URL como o URL do endpoint de API REST na página de detalhes Modelos de experimento.
Defina o método HTTP como POST.
No campo Corpo, insira o payload JSON:
{ "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID", "startOnCreateEnabled": true, "description": "DESCRIPTION" }Configure a autenticação para o job. Consulte as práticas recomendadas para recomendações de conta de serviço.
Clique em Criar.
Configurar uma programação usando a Google Cloud CLI
Se você estiver usando scripts ou ferramentas que executam comandos de shell, poderá programar experimentos configurando o Cloud Scheduler ou seu próprio programador para executar o comando gcloud alpha fault-testing experiments create com a flag --start-on-create-enabled.
Execute o comando a seguir para criar e iniciar imediatamente uma instância de experimento:
gcloud alpha fault-testing experiments create EXPERIMENT_ID \
--experiment-template=TEMPLATE_ID \
--location=REGION \
--start-on-create-enabled \
[--description="DESCRIPTION"] \
[--project=PROJECT_ID]
EXPERIMENT_ID: um identificador exclusivo para a execução do experimento. Como esse comando é automatizado, o script precisa gerar um ID exclusivo para cada execução. Por exemplo, você pode anexar um carimbo de data/hora:scheduled-exp-$(date +%s).TEMPLATE_ID: o ID do modelo de experimento pré-configurado.REGION: aregião em que Google Cloud o experimento é executado.--start-on-create-enabled: essa flag informa ao Fault Injection Testing para iniciar o experimento imediatamente após a criação.DESCRIPTION: (opcional) uma descrição da execução do experimento.PROJECT_ID: (opcional) o Google Cloud ID do projeto.
Gerenciar execuções de experimentos
Cada execução programada cria uma instância de experimento nova e distinta. É possível gerenciar essas instâncias usando os comandos a seguir:
Para listar todas as execuções de experimentos:
gcloud alpha fault-testing experiments list --location=REGIONPara conferir detalhes de uma execução específica:
gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGIONPara interromper um experimento em execução:
gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
Práticas recomendadas
Ao programar experimentos, considere as seguintes práticas recomendadas:
- Usar uma conta de serviço dedicada. Ao configurar o programador (como o Cloud Scheduler), associe-o a uma conta de serviço dedicada. Conceda a essa conta de serviço apenas as permissões mínimas necessárias para gerenciar experimentos, como
roles/faulttesting.operatorouroles/faulttesting.adminno seu projeto. - Gerar IDs de experimentos exclusivos. Ao acionar experimentos usando scripts, verifique se o script gera um ID de experimento exclusivo para cada execução para evitar conflitos de nomes de recursos.
- Usar nomes ou descrições descritivos. Cada execução programada cria uma nova instância de experimento. Ela não reinicia nem substitui experimentos anteriores. Use nomes ou descrições descritivos para ajudar a rastrear as execuções até a programação.
- Monitorar falhas de programação. Os acionadores externos podem falhar devido a problemas de rede, expiração de credenciais ou cotas de API. Configure o monitoramento e os alertas nos jobs do programador para notificar se um job não for executado ou receber uma resposta de erro.
- Coordenar com janelas de exclusão. Verifique se os experimentos programados não se sobrepõem às janelas de exclusão ativas. Se um experimento programado for acionado durante uma janela de exclusão, o Fault Injection Testing vai bloquear a execução, e o experimento não será iniciado.