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_MAINTENANCEparaTRUE - Aguarde até que o ambiente esteja pronto (usando DescribeEnvironments )
- Use
UpdateEnvironmentpara implantar a nova versão do aplicativo - Aguarde até que o ambiente esteja pronto
- Use
UpdateEnvironmentpara definirAPP_MAINTENANCEparaFALSE.
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).