Tutorial: Atualizar dependências de aplicações, corrigir um nó gerenciado e executar uma verificação de integridade específica da aplicação usando o console
Em muitos casos, um nó gerenciado deve ser reinicializado depois de ter sido corrigido com a atualização de software mais recente. No entanto, a reinicialização de um nó gerenciado em produção sem proteções implementadas pode causar vários problemas, como invocação de alarmes, registro incorreto de dados de métrica e interrupção de sincronizações de dados.
Esse tutorial demonstra como evitar problemas como esses usando o documento do AWS Systems Manager (documento do SSM) AWS-RunPatchBaselineWithHooks
para obter uma operação de aplicação de patches complexa e de várias etapas que realize o seguinte:
-
Impedir novas conexões com a aplicação
-
Instale as atualizações para o sistema operacional.
-
Atualizar as dependências do pacote da aplicação
-
Reinicie o daemon ().
-
Executar uma verificação de integridade específica da aplicação
Para este exemplo, configuramos nossa infraestrutura desta forma:
-
As máquinas virtuais de destino são registradas como nós gerenciados com o Systems Manager.
-
Iptables
é usado como um firewall local. -
A aplicação hospedada em seus nós gerenciados está sendo executada na porta 443.
-
A aplicação hospedada em seus nós gerenciados é uma aplicação
nodeJS
. -
A aplicação hospedada em seus nós gerenciados pelo gerenciador de processos pm2.
-
A aplicação já possui um endpoint de verificação de integridade especificado.
-
O endpoint da verificação de integridade da aplicação não requer autenticação do usuário final. O endpoint permite uma verificação de integridade que atenda aos requisitos da organização para estabelecer a disponibilidade. (Em seus ambientes, pode ser suficiente simplesmente verificar se a aplicação
nodeJS
está em execução e é capaz de receber solicitações. Em outros casos, também é possível verificar se uma conexão com a camada de armazenamento em cache ou com a camada de banco de dados já foi estabelecida.)
Os exemplos deste tutorial são apenas para fins de demonstração e não devem ser implementados inalterados em ambientes de produção. Além disso, tenha em mente que o recurso de ganchos de ciclo de vida doPatch Manager, um recurso do Systems Manager, com o documento AWS-RunPatchBaselineWithHooks
, pode suportar vários outros cenários. Aqui estão alguns exemplos:
-
Interrompa um agente de relatório de métricas antes de aplicar patches e reiniciá-lo após a reinicialização do nó gerenciado.
-
Desconecte o nó gerenciado de um cluster CRM ou PCS antes de aplicar patches e reconecte após a reinicialização do nó.
-
Atualize software de terceiros (por exemplo, aplicações Java, Tomcat, Adobe e outras) em máquinas do Windows Server depois que as atualizações do sistema operacional (SO) forem aplicadas, mas antes da reinicialização do nó gerenciado.
Para atualizar dependências de aplicações, corrigir um nó gerenciado e executar uma verificação de integridade específica da aplicação
-
Crie um documento do SSM para o script de pré-instalação com o conteúdo a seguir e nomeie-o como
NodeJSAppPrePatch
. Substituiryour_application
pelo nome da sua aplicação.Este script bloqueia imediatamente novas solicitações de entrada e fornece cinco segundos para que as já ativas sejam concluídas antes de iniciar a operação de patch. Para a opção
sleep
, especifique um número de segundos maior do que normalmente leva para que as solicitações recebidas sejam concluídas.# exit on error set -e # set up rule to block incoming traffic iptables -I INPUT -j DROP -p tcp --syn --destination-port 443 || exit 1 # wait for current connections to end. Set timeout appropriate to your application's latency sleep 5 # Stop your application pm2 stop
your_application
Para obter informações sobre como criar um documento do SSM, consulte Criar conteúdo de documento do SSM.
-
Crie outro documento SSM com o conteúdo a seguir para o script após a instalação, para atualizar as dependências da aplicação e dê a ele o nome
NodeJSAppPostPatch
. Substituir/your/application/path
pelo caminho para a sua aplicação.cd
/your/application/path
npm update # you can use npm-check-updates if you want to upgrade major versions -
Crie outro documento SSM com o seguinte conteúdo para o scipt do
onExit
para fazer backup da aplicação e executar uma verificação de integridade. Nomeie este documento do SSMNodeJSAppOnExitPatch
. Substituiryour_application
pelo nome da sua aplicação.# exit on error set -e # restart nodeJs application pm2 start
your_application
# sleep while your application starts and to allow for a crash sleep 10 # check with pm2 to see if your application is running pm2 pidyour_application
# re-enable incoming connections iptables -D INPUT -j DROP -p tcp --syn --destination-port # perform health check /usr/bin/curl -m 10 -vk -A "" http://localhost:443/health-check || exit 1 -
Criar uma associação no State Manager, um recurso do AWS Systems Manager para emitir a operação executando as seguintes etapas:
Abra o console AWS Systems Manager em https://console.aws.amazon.com/systems-manager/
. -
No painel de navegação, escolha State Manager e selecione Create association.
-
Para Name (Nome), forneça um nome para ajudar a identificar a finalidade da associação.
-
Na lista Document (Documento), escolha
AWS-RunPatchBaselineWithHooks
. -
Em Action (Ação), selecione Install (Instalar).
-
(Opcional) Em Snapshot Id (ID do snapshot), forneça um GUID que você gera para ajudar a acelerar a operação e garantir a consistência. O valor GUID pode ser tão simples quanto
00000000-0000-0000-0000-111122223333
. -
Para Pre Install Hook Doc Name (Nome do Doc do Hook antes da instalação), insira
NodeJSAppPrePatch
. -
Para Post Install Hook Doc Name (Nome do Doc do Hook após instalação), insira
NodeJSAppPostPatch
. -
Para On ExitHook Doc Name (No nome do documento ExitHook), insira
NodeJSAppOnExitPatch
.
-
Para Targets (Destinos), identifique os nós gerenciados especificando etiquetas, escolhendo os nós manualmente, escolhendo um grupo de recursos ou escolhendo todos os nós gerenciados.
-
Para Specify schedule (Especificar programação), especifique a frequência com que a associação deve ser executada. Por exemplo, a aplicação de patches em nós gerenciados uma vez por semana é uma cadência comum.
-
Na seção Rate control (Controle de taxa), escolha opções para controlar como a associação é executada em vários nós gerenciados. Verifique se apenas uma parte dos nós gerenciados é atualizada de cada vez. Caso contrário, toda ou a maior parte da sua frota poderá ficar offline de uma só vez. Para obter mais informações sobre como usar controles de taxa, consulte Sobre destinos e controles de taxa em associações do State Manager.
(Opcional) Em Opções de saída, para salvar a saída de comando em um arquivo, selecione a caixa Habilitar a gravação da saída no S3. Digite os nomes de bucket e prefixo (pastas) nas caixas de texto.
nota
As permissões do S3 que concedem a possibilidade de gravar os dados em um bucket do S3 são as do perfil da instância atribuído ao nó gerenciado, e não as do usuário do IAM que realiza essa tarefa. Para obter mais informações, consulte Configurar permissões de instância obrigatórias para o Systems Manager ou Criar um perfil de serviço do IAM para um ambiente híbrido. Além disso, se o bucket do S3 especificado estiver em uma conta da Conta da AWS diferente, verifique se o perfil da instância ou a função de serviço IAM associada ao nó gerenciado tenha as permissões necessárias para gravar nesse bucket.
-
Escolha Create Association (Criar associação).