View a markdown version of this page

Verificações de status da aplicação - Amazon Elastic Compute Cloud

Verificações de status da aplicação

As verificações de status do aplicativo ajudam você a monitorar o desempenho e a integridade de seus aplicativos em execução no Amazon EC2. Com as verificações de status do aplicativo, você pode detectar e responder às deficiências de integridade do aplicativo monitorando seus aplicativos por meio de caminhos e portas configuráveis. Por exemplo, você pode usar as verificações de status do aplicativo para confirmar se o servidor web está escutando na porta esperada e aceitando novas conexões.

As verificações de status do aplicativo monitoram as respostas HTTP e HTTPS de seus aplicativos em caminhos e portas configuráveis. Elas são executadas a cada 60 segundos e se integram ao Amazon EC2 Auto Scaling, para que você possa automatizar a substituição de instâncias cujos aplicativos estão danificados.

Como funcionam as verificações de status do aplicativo

As verificações de status do aplicativo enviam solicitações HTTP ou HTTPS para um endpoint que escuta em uma porta de rede na sua instância a cada 60 segundos. AWS compara o código de resposta com o correspondente de código de status que você configurou. A verificação é marcada como comprometida após várias solicitações consecutivas com falha e íntegra novamente após várias solicitações consecutivas bem-sucedidas. Ambas as contagens são padronizadas para 2 e são configuráveis. Para obter mais informações, consulte Limites de avaliação.

nota

As verificações de status do aplicativo enviam a solicitação de verificação de integridade por HTTP/2.

A verificação do protocolo HTTPS não valida o certificado do servidor.

Durante a reinicialização, as verificações de status do aplicativo relatam uma falha até que a instância fique disponível novamente porque o aplicativo não pode responder às solicitações de verificação de integridade enquanto o sistema operacional está sendo reiniciado.

Arquitetura de rede

As verificações de status do aplicativo são originárias do serviço de verificações de status do aplicativo Amazon EC2. Para alcançar suas instâncias, AWS cria uma interface de rede elástica gerenciada (ENI) em sua VPC. AWS cria uma ENI por combinação de sub-rede de origem e grupo de segurança que tem instâncias associadas. AWS cria a ENI gerenciada quando uma verificação de status do aplicativo exige essa combinação pela primeira vez e a remove quando nenhuma verificação de status do aplicativo restante a exige. A ENI gerenciada não conta no limite de ENI da instância, mas conta na cota de interfaces de rede por região da sua conta, que é aplicada por zona de disponibilidade. Para obter mais informações, consulte as Amazon VPC cotas.

Por padrão, o Amazon EC2 oculta essas interfaces de rede gerenciadas do console e das operações de lista de APIs para contas que não tinham recursos gerenciados antes que essa configuração se tornasse disponível. Para alterar sua visibilidade, consulte Configurações de visibilidade de recursos gerenciados.

AWS cria uma interface de rede gerenciada para cada combinação de sub-rede de origem e grupo de segurança entre as instâncias associadas. O número de interfaces gerenciadas cresce com o número de combinações distintas de sub-redes e grupos de segurança que suas instâncias monitoradas usam. A consolidação de instâncias monitoradas em menos combinações de sub-redes e grupos de segurança reduz o número de interfaces gerenciadas. Por exemplo, 200 instâncias espalhadas por 2 sub-redes que usam um único grupo de segurança produzem 2 interfaces gerenciadas. As mesmas 200 instâncias usando 3 grupos de segurança nessas 2 sub-redes produzem até 6 interfaces gerenciadas. Cada interface corresponde a uma combinação de sub-rede e grupo de segurança.

As verificações de status da aplicação chegam às suas instâncias a partir de um ponto de acesso privado dentro da sua VPC. O escopo descreve a origem da verificação, não uma propriedade do endereço IP da sua instância. AWS cria a ENI gerenciada em uma sub-rede dentro da sua VPC e alcança a instância pelo caminho da rede privada.

Com caminhos de rede gerenciados pelo AWS, o tráfego de verificação de integridade se origina de instâncias gerenciadas do Amazon EC2 AWS na mesma zona de disponibilidade da instância de destino (ou na zona de disponibilidade principal para destinos da zona local). O tráfego viaja pela rede interna do AWS e não passa pela internet pública. Para obter mais informações, consulte Amazon VPC FAQs no site da Amazon Web Services.

Com caminhos de rede gerenciados pelo cliente, você escolhe as sub-redes de origem para poder executar verificações em uma zona de disponibilidade diferente da de destino. Para obter mais informações, consulte Monitoramento entre zonas de disponibilidade.

AWS caminhos de rede gerenciados e gerenciados pelo cliente

As verificações de status do aplicativo oferecem suporte a dois modos de integração que determinam quem seleciona as sub-redes de origem e os grupos de segurança para a ENI de verificação de integridade e as sub-redes e grupos de segurança de destino para as instâncias de destino.

AWS caminhos de rede gerenciados

AWS seleciona as sub-redes de origem e os grupos de segurança para a ENI de verificação de integridade e as sub-redes e grupos de segurança de destino para as instâncias de destino.

Caminhos de rede gerenciados pelo cliente

Você especifica as sub-redes de origem e os grupos de segurança para a ENI de verificação de integridade e as sub-redes e grupos de segurança de destino para as instâncias de destino.

Use caminhos de rede gerenciados pelo cliente quando precisar controlar de quais sub-redes e grupos de segurança se origina o tráfego de verificação de integridade, como quando sua VPC tem segmentação de rede rígida, regras de firewall ou requisitos de conformidade que restringem quais fontes podem alcançar os endpoints do seu aplicativo.

Você escolhe o modo incluindo ou omitindo o parâmetro --health-check-paths no comando create. Se você omitir o parâmetro --health-check-paths, AWS seleciona sub-redes e grupos de segurança de origem e destino (caminhos de rede gerenciados pelo AWS). Se você incluir o parâmetro --health-check-paths, você os gerencia (caminhos de rede gerenciados pelo cliente).

Versão de IP

Cada verificação de status do aplicativo é associada a uma única versão de IP (IPv4 ou IPv6). Para monitorar uma instância em IPv4 e IPv6, crie duas verificações de status de aplicativo separadas e associe ambas à instância.

As verificações chegam à instância de dentro da VPC para IPv4 e IPv6.

Verificar os valores de status

Cada verificação individual informa um dos seguintes status:

  • passed: a verificação foi concluída com êxito

  • failed: ocorreu falha na verificação. A resposta inclui o código de status HTTP retornado pela aplicação. Para obter orientações de interpretação e remediação, consulte Solução de problemas.

  • initializing: a verificação ainda não concluiu sua primeira avaliação

  • insufficient-data: a verificação não recebeu dados suficientes para determinar um resultado

  • not-applicable: a verificação não está associada à instância

O status geral do aplicativo relatado para a instância agrega todos os resultados de verificação individuais. O status geral tem um dos valores a seguir:

  • ok: todas as verificações aprovadas

  • impaired: uma ou mais verificações falharam

  • initializing: uma ou mais verificações ainda não concluíram sua primeira avaliação

  • insufficient-data: uma ou mais verificações relatam dados insuficientes

  • not-applicable: todas as verificações de status do aplicativo associadas são excluídas da agregação

  • suppressed: a avaliação da verificação do status do aplicativo é suprimida para a instância

Agregação

Você pode marcar cada verificação de status do aplicativo como incluída ou excluída do status geral da instância. Por padrão, uma verificação é included.

included

A verificação contribui para o status geral da instância e o Amazon EC2 Auto Scaling a usa.

excluded

A verificação relata seu status individual, mas não contribui para o status geral da instância, e o Amazon EC2 Auto Scaling não a usa. Use essa configuração para validar uma nova verificação na produção sem afetar o status geral ou acionar substituições do Amazon EC2 Auto Scaling. Esse é o fluxo de trabalho recomendado ao adicionar uma verificação a uma carga de trabalho de produção existente; consulte Testando uma nova verificação do status do aplicativo.

Comece a usar as verificações de status do aplicativo

Pré-requisitos

Antes de criar uma verificação de status do aplicativo, certifique-se de ter o seguinte:

  • Uma VPC com as instâncias que você deseja monitorar.

  • Um endpoint de aplicativo em cada instância que pode responder às solicitações HTTP ou HTTPS na porta e no caminho HTTP que você configurará.

  • Um grupo de segurança em cada instância de destino que permite tráfego de entrada na porta de verificação do grupo de segurança de origem usado pela verificação de status do aplicativo. Consulte Segurança e permissões.

Etapa 1: Configurar seu aplicativo de do

Configure o endpoint do aplicativo para responder às solicitações HTTP ou HTTPS na porta e no caminho HTTP que você especificará ao criar a verificação. Retorne um código de resposta incluído no seu comparador de códigos de status para indicar que o aplicativo está íntegro.

Certifique-se de que o grupo de segurança da instância de destino permita tráfego de entrada na porta de verificação do grupo de segurança de origem usado pela verificação de status do aplicativo. Para caminhos de rede gerenciados, AWS fornece o grupo de segurança de origem na criação da verificação. Para caminhos de rede gerenciados pelo cliente, você especifica o grupo de segurança de origem ao criar a verificação.

Etapa 2: criar uma definição de verificação

Use a AWS CLI para criar uma verificação de status do aplicativo.

Console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Instâncias, escolha Verificações de status do aplicativo.

  3. Escolha Criar verificação de status do aplicativo.

  4. Em Health check logic, configure o seguinte:

    • Protocolo: escolha HTTP ou HTTPS.

    • Porta: insira a porta na qual o aplicativo escuta.

    • Caminho (opcional): insira o caminho HTTP a ser solicitado, por exemplo /healthcheck.

    • Versão IP: escolha IPv4 ou IPv6.

    • Índice do dispositivo: o índice do dispositivo da interface de rede a ser verificado. O padrão é 0.

  5. Em Controles e limites, defina o Tempo limite e, opcionalmente, o Correspondente do código de status, o Limite de falha, o Limite de sucesso e o Período de carência de inicialização. O intervalo de verificação é fixado em 60 segundos.

  6. Em Agregação, escolha Incluído para que a verificação contribua com o status geral do aplicativo e acione o Amazon EC2 Auto Scaling, ou Excluído para relatar a verificação sem afetar o status geral.

  7. Em Caminhos de verificação de integridade, mantenha Não especificar caminhos de rede (recomendado/padrão) para permitir que o Amazon EC2 coloque as interfaces de rede de verificação de integridade nas sub-redes da sua instância, ou escolha Especificar caminhos de rede (avançado) para definir você mesmo a sub-rede de origem, o grupo de segurança e os destinos.

  8. (Opcional) Adicione uma tag de nome e outras tags.

  9. Escolha Criar verificação de status do aplicativo.

AWS CLI

Para usar caminhos de rede gerenciados pelo AWS, omita o parâmetro --health-check-paths e deixe o AWS selecionar sub-redes e grupos de segurança de origem e destino.

aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200"

Para usar caminhos de rede gerenciados pelo cliente, inclua o parâmetro --health-check-paths. Cada caminho de verificação de integridade contém uma origem (sub-rede e grupo de segurança para a ENI de verificação de integridade) e um ou mais destinos (sub-rede e grupo de segurança para as instâncias de destino).

aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200" \ --health-check-paths '[{"Source":{"SubnetId":"subnet-111","SecurityGroupId":"sg-aaa"},"Destinations":[{"SubnetId":"subnet-222","SecurityGroupId":"sg-bbb"}]}]'
Etapa 3: Associar a verificação às instâncias

Associe a verificação às instâncias que você deseja monitorar, por ID da instância ou por tag.

Console
  1. No painel de navegação, em Instâncias, escolha Verificações de status do aplicativo e selecione a verificação.

  2. Escolha Gerenciar associações de verificação de status, depois escolha Gerenciar associações por ID de recurso ou Gerenciar associações por tags.

  3. Para se associar a todas as instâncias em um grupo do Auto Scaling, escolha Gerenciar associações por tags e insira aws:autoscaling:groupName como a chave da tag e o nome do grupo do Auto Scaling como o valor.

  4. Selecione Associar.

AWS CLI

Por ID de instância:

aws ec2 associate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --instance-ids i-0123456789abcdef0

Por tag:

aws ec2 associate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --target-tag-associations Key=Environment,Value=production

Para se associar a todas as instâncias em um grupo do Auto Scaling, use a tag do sistema aws:autoscaling:groupName:

aws ec2 associate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --target-tag-associations Key=aws:autoscaling:groupName,Value=my-asg

As operações de associação e dissociação retornam resultados de sucesso e falha por instância. Se algumas instâncias não puderem ser associadas (por exemplo, porque a verificação já está associada), essas instâncias aparecerão nos resultados malsucedidos com um motivo.

Etapa 4: visualizar os resultados

Visualize o status de integridade da aplicação por instância.

Console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância e escolha a guia Status e alarmes.

  4. Em Verificações de status do aplicativo, revise o status geral e o status individual de cada verificação associada.

AWS CLI
aws ec2 describe-application-status \ --instance-ids i-0123456789abcdef0

A resposta inclui o status geral do aplicativo e, para cada verificação associada, o status da verificação e, para verificações malsucedidas, o código de status HTTP retornado pelo seu aplicativo.

Exemplo de resposta:

{ "ApplicationStatuses": [ { "InstanceId": "i-0123456789abcdef0", "ApplicationStatus": { "Status": "ok", "Details": [ { "ApplicationStatusCheckId": "asc-1234567890abcdef0", "Status": "passed", "Reason": { "Code": "ResponseCodeMatched", "StatusCode": 200, "Protocol": "HTTP" } } ] } } ] }

Para ver as definições de verificação (não o status por instância), use describe-application-status-checks. Esse comando retorna a configuração das verificações de status do seu aplicativo, incluindo configurações de protocolo, porta, caminho HTTP e correspondência de código de status.

Opções de configuração

As verificações de status do aplicativo aceitam vários parâmetros de configuração. Esta seção explica os parâmetros em que o comportamento não é evidente a partir do nome do parâmetro. Para obter a lista completa de parâmetros e regras de validação, consulte CreateApplicationStatusCheck e AssociateApplicationStatusCheck na Amazon EC2 API Reference.

Limites de avaliação

FailureThreshold

O número de solicitações consecutivas com falha antes que a verificação seja marcada como prejudicada. Padrão: 2.

SuccessThreshold

O número de solicitações consecutivas bem-sucedidas antes de a verificação ser marcada como íntegra novamente. Padrão: 2.

Timeout

O número de segundos a aguardar por uma resposta antes de a solicitação ser registrada como com falha. Imposta como um tempo limite forçado; se seu aplicativo não responder dentro dessa janela, a solicitação será registrada como uma falha, independentemente da eventual resposta. Padrão: 6 Intervalo válido: de 1 a 90.

Período de carência de inicialização

InitializationGracePeriodSeconds

O número de segundos a aguardar após uma instância ser iniciada antes de AWS começar a avaliar a verificação. Use esse parâmetro para dar tempo aos aplicativos para começar a escutar antes do início das verificações. Se o período de carência for muito curto, o Amazon EC2 Auto Scaling poderá substituir novas instâncias antes que a aplicação esteja pronta. Padrão: 300 Intervalo válido: de 1 a 600.

Escopo IP

IpScope

As verificações de status do aplicativo usam o escopo private; a verificação é executada de dentro da sua VPC. Para IPv4, isso corresponde ao endereço IP privado da instância. Para IPv6, AWS não classifica o endereço como público ou privado; a verificação aceita qualquer endereço IPv6 e o avalia de dentro da sua VPC.

Índice de dispositivos

DeviceIndex

O índice do dispositivo de rede na sua instância que AWS avalia para a verificação de integridade. Altere isso quando o dispositivo de rede principal da sua instância não for aquele que você deseja verificar. Padrão: 0.

A agregação, a versão IP e os caminhos de verificação de integridade (sub-redes de origem e destino e grupos de segurança) são abordados em suas próprias seções anteriores nesta página.

Configurações padrão

Com caminhos de rede AWS gerenciados, as verificações de status do aplicativo usam os seguintes padrões.

Configuração Padrão

Intervalo de verificação

60 segundos (fixo; não configurável)

Limite de falha

2 falhas consecutivas

Limite de sucesso

2 sucessos consecutivos

Tempo limite

6 segundos

Correspondência de códigos de status

200

Caminho HTTP

/

Versão de IP

ipv4

Escopo IP

privado

Índice de dispositivos

0

Período de carência de inicialização

300 segundos

Agregação

Incluído

Sub-redes de origem e grupos de segurança

Gerenciado pela AWS

Integração do Amazon EC2 Auto Scaling

O Amazon EC2 Auto Scaling encerra e substitui automaticamente as instâncias cujos relatórios gerais de status do aplicativo reportam impaired, desde que a verificação esteja incluída na agregação. Nenhuma configuração de grupo do Auto Scaling é necessária além de associar a verificação de status do aplicativo às instâncias do grupo.

O Amazon EC2 Auto Scaling usa o status geral da instância, não o status de verificação individual. As verificações marcadas excluded não conduzem ações do Amazon EC2 Auto Scaling. As verificações no estado suppressed não conduzem ações do Amazon EC2 Auto Scaling.

Use o parâmetro InitializationGracePeriodSeconds na verificação para permitir que novas instâncias iniciem antes que as verificações de status do aplicativo comecem. Se o período de carência for muito curto, novas instâncias poderão ser encerradas e substituídas pelo Amazon EC2 Auto Scaling antes que seu aplicativo esteja pronto para atender ao tráfego.

A InitializationGracePeriodSeconds da verificação define quanto tempo depois de uma instância ser iniciada antes que a verificação comece a avaliar o aplicativo. Configure-o para cobrir o tempo de inicialização do seu aplicativo, para que a verificação não relate impaired enquanto o aplicativo ainda estiver sendo inicializado. O período de carência da verificação de integridade do grupo do Auto Scaling é separado. Ele define quanto tempo após uma instância entrar em serviço antes que o Amazon EC2 Auto Scaling a encerre devido a uma falha na verificação de integridade.

Para obter mais informações sobre as verificações de integridade realizadas pelo Amazon EC2 Auto Scaling, consulte Verificações de integridade para instâncias em um grupo do Auto Scaling e Utilize verificações de status de aplicações com um grupo do Auto Scaling no Guia do usuário do Amazon EC2 Auto Scaling.

Lidando com implantação, aplicação de patches no local e substituições

Implantações, patches no local e outras operações de manutenção podem interromper ou reiniciar temporariamente seu aplicativo. Durante esse período, as verificações de status do aplicativo relatam uma falha porque o aplicativo não pode responder às solicitações de verificação de integridade. Se suas instâncias estiverem em um grupo do Auto Scaling com verificações de status do aplicativo incluídas na agregação, o Amazon EC2 Auto Scaling poderá encerrar e substituir essas instâncias, mesmo que a interrupção seja esperada.

Opção A: suprimir a verificação

Use a supressão para janelas de manutenção limitadas, nas quais você sabe a duração. A supressão é imposta no nível da instância. Você especifica uma duração ou a omite para suprimir a verificação até desativar a supressão.

AWS CLI
aws ec2 enable-application-status-check-suppression \ --instance-ids i-0123456789abcdef0 \ --duration-seconds 3600

A resposta retorna, para cada instância, quando a supressão começou e quando ela terminará. O sucesso parcial é possível; algumas instâncias podem não ser suprimidas e aparecer na resposta com um motivo.

Para retomar as verificações antes que a janela de supressão expire:

aws ec2 disable-application-status-check-suppression \ --instance-ids i-0123456789abcdef0

Enquanto suprimido, o status geral do aplicativo para a instância é relatado como suppressed. O Amazon EC2 Auto Scaling não atua em instâncias suppressed.

Opção B: excluir a verificação da agregação

Se você quiser que a verificação continue avaliando e relatando seu status individual, mas não afete o status geral nem acione ações do Amazon EC2 Auto Scaling, defina a configuração de agregação da verificação como excluded. Isso é útil para cenários de longa duração, como lançar uma nova versão de verificação ou validar uma alteração sem correr o risco de substituí-la, e para casos em que você deseja que a telemetria continue sem impacto operacional.

Para obter mais informações, consulte Agregação.

Opção C: Desassociar a verificação

Use a dissociação para remoção por mais tempo ou por tempo indeterminado.

aws ec2 disassociate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --instance-ids i-0123456789abcdef0

Se você associou por tag, remova a tag da instância para desassociar. Após a dissociação, o status geral do aplicativo para a instância é relatado como not-applicable.

Orientação de implantação

As implantações são o cenário de manutenção mais comum que requer supressão. Use a supressão quando sua ferramenta de implantação tiver um gancho de pré-implantação e um gancho de pós-implantação para que você possa suprimir a verificação antes do início da implantação e desabilitar a supressão após a conclusão da implantação.

O padrão geral é:

  1. No gancho de pré-implantação, chame enable-application-status-check-suppression para a instância, com uma duração que cubra a janela de implantação esperada.

  2. Execute a implantação.

  3. No gancho de pós-implantação, chame disable-application-status-check-suppression para a instância.

Se sua ferramenta de implantação não tiver ganchos, conduza a supressão a partir do pipeline de CI/CD que invoca a implantação.

Testando uma nova verificação do status do aplicativo

Você pode validar uma nova verificação do status do aplicativo na produção antes que ela comece a contribuir para o monitoramento em nível de instância. Defina a configuração de agregação como excluded quando você criar a verificação e confirme se ela reporta o status esperado e os códigos de resposta HTTP. Quando estiver pronto, altere a configuração para included para que a verificação contribua para o status geral da instância e se integre ao Amazon EC2 Auto Scaling.

  1. Crie a verificação com a configuração de agregação definida como excluded.

    aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200" \ --aggregation excluded
  2. Associe a verificação a uma instância de teste ou a um subconjunto da sua frota de produção.

  3. Aguarde pelo menos dois intervalos de verificação (aproximadamente dois minutos) para permitir que a verificação conclua uma avaliação inicial.

  4. Use describe-application-status para verificar se a verificação está relatando o status esperado e o código de resposta HTTP.

    aws ec2 describe-application-status \ --instance-ids i-0123456789abcdef0
  5. Se a verificação for relatada conforme o esperado, atualize a configuração de agregação para included para fazer com que a verificação contribua para o status geral da instância e conduza as ações do Amazon EC2 Auto Scaling.

    aws ec2 modify-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --aggregation included

Rede avançada

As verificações de status do aplicativo se originam de uma ENI gerenciada na sub-rede de origem e no grupo de segurança que você especifica (ou que AWS seleciona para você). Para cargas de trabalho que exigem maior disponibilidade do que a fornecida por uma configuração de fonte única ou para cargas de trabalho executadas em Zonas Locais ou Outposts, considere os padrões a seguir.

Monitoramento entre zonas de disponibilidade

Para redundância de Zona de Disponibilidade, é possível executar verificações de integridade em mais de uma Zona de Disponibilidade. Com caminhos de rede gerenciados pelo cliente, você define caminhos de verificação de integridade cujas origens estão em duas zonas de disponibilidade diferentes que alcançam as mesmas instâncias de destino, usando o parâmetro --health-check-paths. O monitoramento de duas zonas de disponibilidade mantém os relatórios de integridade de suas instâncias contínuos, mesmo que uma zona de disponibilidade fique indisponível.

O exemplo a seguir cria uma verificação com dois caminhos de verificação de integridade cujas origens estão em zonas de disponibilidade diferentes, ambas alcançando as mesmas instâncias de destino.

aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200" \ --health-check-paths '[{"Source":{"SubnetId":"subnet-source-az1","SecurityGroupId":"sg-healthcheck"},"Destinations":[{"SubnetId":"subnet-app-az1","SecurityGroupId":"sg-app"}]},{"Source":{"SubnetId":"subnet-source-az2","SecurityGroupId":"sg-healthcheck"},"Destinations":[{"SubnetId":"subnet-app-az2","SecurityGroupId":"sg-app"}]}]'

Zonas Locais

Para instâncias executadas em Zonas AWS Locais, a interface de rede elástica gerenciada (ENI) reside na AWS região principal, não na Zona Local. O tráfego de verificação de integridade entre a região principal e suas instâncias de Zona Local atravessa o link de serviço da Zona Local, o que pode gerar cobranças adicionais de transferência de dados.

Práticas recomendadas

  • Projete seu endpoint de integridade para refletir a integridade do aplicativo em execução nessa instância. Quando seu endpoint retorna a integridade com base no próprio aplicativo, o Amazon EC2 Auto Scaling substitui somente as instâncias que estão realmente comprometidas. Se a resposta do endpoint também depender de um recurso compartilhado, como um banco de dados ou um serviço downstream, um problema com esse recurso pode fazer a verificação falhar em várias instâncias ao mesmo tempo. Isso pode acionar uma substituição em toda a frota. Para obter orientação sobre como criar endpoints de verificação de integridade, consulte Implementação de verificações de integridade na Amazon Builders' Library.

  • Proteja-se contra falhas correlacionadas. Uma verificação incluída impulsiona a substituição do Amazon EC2 Auto Scaling. Uma verificação que falha em várias instâncias ao mesmo tempo pode desencadear uma onda de substituições. Defina uma política de manutenção de instâncias no seu grupo do Auto Scaling para limitar quantas instâncias são substituídas ao mesmo tempo. Para obter mais informações, consulte Política de manutenção de instância no Guia do usuário do Amazon EC2 Auto Scaling.

  • Alarme na contagem de instâncias prejudicadas. Crie um alarme do Amazon CloudWatch na métrica StatusCheckFailed_Application em toda a sua frota. Um aumento repentino em muitas instâncias indica uma dependência compartilhada, em vez de falhas de instâncias individuais, e dá tempo para responder antes que as substituições ocorram em cascata. Para obter mais informações, consulte Monitorar verificações de status do aplicativo.

  • Permaneça dentro da cota da sua interface de rede. As verificações de status do aplicativo criam interfaces de rede gerenciadas que são contabilizadas na cota de interfaces de rede por região. AWS impõe essa cota por zona de disponibilidade. Monitore seu uso para que uma frota crescente não atinja a cota. Se isso acontecer, AWS não poderá criar novas interfaces. Para obter orientações relacionadas ao alarme de cota, consulte Cotas.

  • Trate as permissões de verificação de status como controladas por alterações. As ações do IAM que criam, modificam, excluem, associam, desassociam e suprimem as verificações de status do aplicativo podem afetar a disponibilidade da instância. Essas ações determinam o que impulsiona a substituição do Amazon EC2 Auto Scaling. Trate ações como ec2:CreateApplicationStatusCheck, ec2:AssociateApplicationStatusCheck, ec2:ModifyApplicationStatusCheck, e ec2:EnableApplicationStatusCheckSuppression como controladas por mudanças, em vez de concedê-las como parte do acesso geral ao Amazon EC2. Para obter a lista completa de ações, consulte a Referência da API do Amazon EC2.

Solução de problemas

Quando uma verificação de status de um aplicativo indicar que está danificado, mas você espera que seu aplicativo esteja íntegro, verifique cada um dos seguintes itens:

  1. Acessibilidade de instâncias. Confirme se as verificações de status da instância e do sistema são ok.

  2. Regra de entrada do grupo de segurança. O grupo de segurança da instância de destino deve permitir tráfego de entrada na porta de verificação do grupo de segurança de origem usado pela verificação de status do aplicativo. Para caminhos de rede AWS gerenciados, AWS fornece o grupo de segurança de origem; para caminhos de rede gerenciados pelo cliente, use o grupo de segurança que você especificou como origem.

  3. Firewall do host. Qualquer firewall em nível de host (iptables, Firewall do Windows, firewall de host de terceiros) na instância deve permitir tráfego de entrada na porta de verificação.

  4. Endpoint do aplicativo. O aplicativo deve estar escutando na porta e no caminho que você configurou. Confirme com uma solicitação local da instância (curl http://localhost:PORT/PATH).

  5. Incompatibilidade de protocolos. Se a verificação estiver configurada como HTTPS, mas o endpoint servir somente HTTP (ou vice-versa), todas as chamadas falharão.

  6. Correspondência de código de status. Confirme se o código de resposta real do seu aplicativo está incluído na correspondência de código de status que você configurou.

  7. Caminho de rede. Se você configurou caminhos de rede gerenciados pelo cliente, confirme se a sub-rede de origem e o grupo de segurança têm conectividade com a sub-rede de destino. Use o VPC Reachability Analyzer para rastrear o caminho da rede.

  8. Cota de ENI disponível. AWS cria uma interface de rede elástica gerenciada (ENI) em sua conta para cada combinação de sub-rede de origem e grupo de segurança. Confirme se sua conta não atingiu a cota de interfaces de rede por região, que é aplicada por zona de disponibilidade. Se sua conta atingiu essa cota, AWS não é possível criar a ENI gerenciada e a verificação não pode ser executada. Para obter mais informações, consulte as Amazon VPC cotas.

Códigos de motivo

A resposta describe-application-status inclui um motivo para cada verificação. O motivo contém o código de status HTTP retornado pelo seu aplicativo (como um número), junto com o protocolo usado para a verificação. Uma verificação é marcada passed se o código de status retornado está incluído no seu comparador de códigos de status e failed caso contrário.

O motivo também inclui um código de motivo e, para resultados em nível de HTTP, o protocolo e o código de status HTTP retornado. O motivo contém os seguintes campos:

Code

O código do motivo para o resultado da verificação do status do aplicativo. Um dos seguintes valores:

  • ResponseCodeMatched: o código de status HTTP retornado pela verificação de integridade correspondeu ao configurado StatusCodeMatcher.

  • ResponseCodeMismatch: o código de status HTTP retornado pela verificação de integridade não correspondeu ao configurado StatusCodeMatcher.

  • ConnectionTimeout: a conexão com o destino atingiu o tempo limite.

  • ResponseTimeout: a verificação de integridade atingiu o tempo limite enquanto aguardava uma resposta do alvo.

  • ConnectionRefused: o alvo recusou a conexão de verificação de integridade.

  • ConnectionReset: a conexão de verificação de integridade foi redefinida antes do recebimento de uma resposta.

Para ResponseCodeMatched e ResponseCodeMismatch, o campo StatusCode contém o código de status HTTP retornado e o campo Protocol contém o protocolo usado para a verificação de integridade. Para erros de conexão, como ConnectionTimeout, ResponseTimeout, ConnectionRefused e ConnectionReset, os campos StatusCode e Protocol não estão presentes.

Protocol

O protocolo usado para a verificação de integridade. Um de HTTP ou HTTPS.

StatusCode

O código de status HTTP retornado pela verificação de integridade.

Use o código de status HTTP retornado para identificar por que uma verificação falhou. Alguns exemplos comuns:

Código de status HTTP Significado típico Correção comum

200

O aplicativo retornou uma resposta bem-sucedida.

Nenhum. Normalmente, esse é um status íntegro.

301, 302

O aplicativo retornou um redirecionamento. As chamadas de verificação de integridade não seguem redirecionamentos.

Aponte o caminho da verificação de integridade para o destino do redirecionamento ou adicione o código de redirecionamento ao seu comparador de códigos de status se você o considerar íntegro.

401, 403

O aplicativo exige autenticação ou acesso negado ao caminho de verificação de integridade.

Configure o caminho da verificação de integridade para não ser autenticado ou realize verificações de integridade em um caminho que não exija credenciais.

404

O caminho de verificação de integridade configurado não foi encontrado no aplicativo.

Confirme se o caminho corresponde a uma rota que seu aplicativo serve.

500

O aplicativo retornou um erro interno do servidor.

Investigue os registros do aplicativo na instância.

502, 503, 504

O aplicativo está acessível, mas relata problemas de upstream ou de capacidade.

Investigue a integridade, as dependências e a capacidade do aplicativo. Se o aplicativo retornar esses códigos durante a inicialização, aumente InitializationGracePeriodSeconds.

Para ver a estrutura completa de ApplicationStatusReason, consulte ApplicationStatusReason na Amazon EC2 API Reference.

Equívocos comuns

  • O grupo de segurança não permite tráfego de entrada da fonte de verificação de integridade na porta de verificação.

  • O aplicativo está vinculado a 127.0.0.1 e não está escutando na interface de rede.

  • O caminho da verificação de integridade retorna um redirecionamento (301, 302) em vez de uma resposta bem-sucedida, e o comparador do código de status não inclui o código de redirecionamento.

  • A verificação está configurada para HTTPS, mas o aplicativo serve apenas HTTP, ou vice-versa.

  • O aplicativo leva mais tempo para iniciar do que o valor de InitializationGracePeriodSeconds, e o Amazon EC2 Auto Scaling substitui a instância antes que ela esteja pronta.

Monitorar verificações de status do aplicativo

Você pode monitorar as verificações de status do aplicativo de três formas:

  • Amazon CloudWatch. A métrica StatusCheckFailed_Application reflete o status geral do aplicativo para a instância e pode gerar alarmes. A métrica é agregada por instância em todas as verificações associadas cuja configuração de agregação é included. O CloudWatch também publica uma métrica por verificação para cada verificação associada, chamada StatusCheckFailed_Application_application-status-check-id.

  • describe-instance-status. Retorna o status geral do aplicativo junto com outras informações de status da sua instância.

  • describe-application-status. Retorna resultados detalhados por instância, incluindo o status individual de cada verificação associada e o código de status HTTP retornado pela aplicação.

Use a métrica do CloudWatch para automação baseada em alarmes. Use describe-instance-status quando você já o consulta para saber o status da instância. Use describe-application-status para obter visibilidade detalhada por verificação.

Segurança e permissões

AWS cria e gerencia as interfaces de rede usadas para verificações de status do aplicativo por meio de uma função vinculada ao serviço. Nenhuma configuração do IAM é necessária para que o serviço crie essas ENIs. O perfil vinculado ao serviço usa a política gerenciada EC2ApplicationStatusChecksServiceRolePolicy da AWS.

Para criar, associar, descrever, excluir e suprimir você mesmo as verificações de status do aplicativo, seu usuário ou função do IAM precisa das permissões correspondentes do Amazon EC2. Consulte a Referência da API do Amazon EC2 para obter a lista completa de ações.

O grupo de segurança da instância deve permitir tráfego de entrada do grupo de segurança de origem da verificação de integridade na porta que você configurou. Com caminhos de rede AWS gerenciados, AWS fornece o grupo de segurança de origem; com caminhos de rede gerenciados pelo cliente, use o grupo de segurança que você especificou como origem.

Preços

As verificações de status do aplicativo são faturadas nos seguintes componentes:

  • Uma cobrança por hora de USD 0,01 para cada interface de rede elástica gerenciada (ENI), por zona de disponibilidade.

  • Os preços padrão do Amazon CloudWatch se aplicam às métricas de verificação do status do aplicativo.

Cotas

As verificações do status do aplicativo estão sujeitas às cotas de serviço do AWS. Para os nomes das cotas, valores padrão e descrições, consulte Endpoints e cotas do Amazon EC2 na AWSReferência geral.

Além das cotas de serviço do AWS que afetam as interfaces de rede gerenciadas, as verificações de status do aplicativo têm as seguintes cotas de serviço. Você pode visualizar seu uso e solicitar aumentos no console do Service Quotas.

Nessas cotas, um destino é uma única instância monitorada por uma verificação de integridade. Se mais de uma verificação de integridade monitorar uma instância, cada emparelhamento de instância e verificação de integridade contará como um destino separado. Uma associação é uma regra de tag única ou um único ID de instância que você associa a uma verificação de integridade. Cada regra ou ID de instância conta como uma associação, independentemente de quantas instâncias ela resolve.

Quota Padrão Ajustável

Verificações de integridade por conta

50

Sim, automaticamente

Associações por verificação de integridade

50

Sim, automaticamente

Associações por conta

200

Sim, automaticamente

Destinos por conta

5.000

Sim, a pedido

A maioria dos aumentos de cota é aprovada automaticamente. Um aumento nos destinos por conta exige uma solicitação e aprovação manual.

Importante

Se o número de destinos em sua conta exceder a cota de destinos por conta, os destinos acima do limite não serão monitorados e não relatarão o status do aplicativo. Para evitar lacunas no monitoramento, mantenha a contagem de destinos dentro da cota ou solicite um aumento.

Recomendamos que você crie um alarme do Amazon CloudWatch sobre o uso da cota de verificações de status do aplicativo para que você seja notificado antes de atingir uma cota. O Service Quotas publica métricas de uso no namespace AWS/Usage no CloudWatch, que você pode usar para criar o alarme.