AFAIK, não há como fazer isso dessa maneira.
No entanto, encontrei uma solução alternativa que verifica todas as caixas para mim.
Eu atualizei o front controller do meu aplicativo para ler uma variável de ambiente, APP_MAINTENANCE
, e retornar uma resposta 503 Service Unavailable
se essa variável for TRUE
.
O patch do banco de dados é executado por meio de container_commands e é automático durante a implantação.
Agora, o procedimento de implantação é o seguinte, usando a API do Elastic Beanstalk :
- Use UpdateEnvironment para definir
APP_MAINTENANCE
paraTRUE
- Aguarde até que o ambiente esteja pronto (usando DescribeEnvironments )
- Use
UpdateEnvironment
para implantar a nova versão do aplicativo - Aguarde até que o ambiente esteja pronto
- Use
UpdateEnvironment
para definirAPP_MAINTENANCE
paraFALSE
.
Dessa forma, posso ter certeza de que nada está usando o banco de dados durante a atualização do banco de dados. Durante esse período (em torno de 3 minutos), o aplicativo não está disponível e qualquer solicitação é retornada com uma resposta 503
, o que é aceitável no meu caso de uso.
Qualquer cliente que receba essa resposta é convidado a tentar novamente em alguns minutos, seja uma pessoa real (uma mensagem amigável convidará a fazer isso) ou um consumidor de API (HTTP sugere que isso é uma falha temporária e que o cliente deve tentar mais tarde).