Implantar um aplicativo Quarkus em Aplicativos de Contêiner do Azure
Nesta unidade, você cria o ambiente de Aplicativos de Contêiner do Azure usando a CLI do Azure.
Configurar o Dockerfile para o aplicativo Quarkus
Container Apps é usado para implantar aplicativos em contêineres. Portanto, primeiro você precisa colocar o aplicativo Quarkus em contêiner em uma imagem do Docker. Este processo é fácil porque o plugin Quarkus Maven já gerou alguns Dockerfiles em src/main/docker
.
Use este comando para renomear um desses Dockerfiles, Dockerfile.jvm, para Dockerfile e movê-lo para a pasta raiz:
mv src/main/docker/Dockerfile.jvm ./Dockerfile
Substitua o conteúdo após o comentário longo no Dockerfile pelo seguinte:
FROM registry.access.redhat.com/ubi8/openjdk-17:1.18
ENV LANGUAGE='en_US:en'
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
Este Dockerfile espera que o aplicativo Quarkus seja empacotado como um arquivo quarkus-run.jar . Esse nome é o nome padrão para o aplicativo Quarkus quando ele é empacotado como um arquivo JAR. Você precisa ter certeza de que o aplicativo Quarkus está empacotado como um arquivo JAR. Para fazer isso, execute o seguinte comando Maven:
./mvnw package # On Mac or Linux
mvnw.cmd package # On Windows
Este comando empacota o aplicativo Quarkus em um arquivo JAR e gera um arquivo quarkus-run.jar na pasta target/quarkus-app .
Criar o ambiente de Aplicativos de Contêiner e implantar o contêiner
Agora que o Dockerfile está no local certo, você pode criar o ambiente de Aplicativos de Contêiner e implantar o contêiner usando um único comando da CLI do Azure. Execute o seguinte comando na raiz do projeto:
az containerapp up \
--name "$AZ_CONTAINERAPP" \
--environment "$AZ_CONTAINERAPP_ENV" \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--ingress external \
--target-port 8080 \
--source .
Este comando faz várias coisas:
- Cria um ambiente de Aplicativos de Contêiner se ele não existir
- Cria um registro do Azure se ele não existir
- Cria um espaço de trabalho do Log Analytics se ele não existir
- Cria a imagem do Docker e a envia por push para o registro do Azure
- Implanta a imagem do Docker no ambiente de aplicativos de contêiner
O az containerapp up
comando leva algum tempo para ser executado. Você verá uma saída semelhante à seguinte:
Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus
Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"
Your container app caazure-deploy-quarkus has been created and deployed! Congrats!
Validar a implementação
Você pode validar se a implantação foi bem-sucedida de várias maneiras. A maneira mais fácil é pesquisar seu grupo de recursos no portal do Azure. Você deve ver recursos semelhantes aos seguintes:
Você também pode verificar a implantação executando o seguinte comando. Ele lista todos os recursos criados pelo az containerapp up
comando.
az resource list \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Você deve ver uma saída semelhante a esta:
Name ResourceGroup Location Type Status
---------------------------------- ---------------------- ---------- ----------------------------------------- --------
caea3a6e0afeacr rgazure-deploy-quarkus eastus Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.App/containerApps
caeazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3 rgazure-deploy-quarkus eastus Microsoft.OperationalInsights/workspaces
Executar o aplicativo Quarkus implantado
Agora você pode executar o aplicativo Quarkus implantado. Primeiro, você precisa obter a URL do aplicativo. Você pode obtê-lo executando o seguinte comando:
export AZ_APP_URL=$(
az containerapp show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--query "properties.configuration.ingress.fqdn" \
--output tsv \
)
echo "AZ_APP_URL=$AZ_APP_URL"
A sua candidatura está pronta em https://<app-name>.azurecontainerapps.io/
. Observe o https
protocolo. Esse protocolo é usado porque o aplicativo é implantado com um certificado TLS. Para testar o aplicativo, você pode usar cURL:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
https://$AZ_APP_URL/api/todos
Recupere os dados usando uma nova solicitação cURL:
curl https://$AZ_APP_URL/api/todos
Este comando retorna a lista de todos os itens pendentes do banco de dados:
[
{
"description" : "Take Quarkus MS Learn",
"details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
"done" : true,
"id" : 1
},
{
"description" : "Take Azure Container MS Learn",
"details" : "Take the ACA Learn module",
"done" : false,
"id" : 2
},
{
"description" : "Configuration",
"details" : "Congratulations, you have set up your Quarkus application correctly!",
"done" : true,
"id" : 3
}
]
Se você executar esse comando, poderá transmitir os logs para seu contêiner ao criar novas tarefas:
az containerapp logs show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--follow
Execute mais comandos cURL. Você deve ver os logs rolando no terminal.
curl https://$AZ_APP_URL/api/todos
Nota
Também pode abrir o URL num browser para devolver a lista de itens de tarefas.