Implantar um aplicativo Quarkus nos Aplicativos de Contêiner do Azure

Concluído

Nesta unidade, você criará o ambiente dos Aplicativos de Contêiner do Azure usando a CLI do Azure.

Configurar o Dockerfile para o aplicativo Quarkus

Os Aplicativos de Contêiner do Azure são destinados à implantação de aplicativos conteinerizados. Portanto, primeiro será necessário colocar o aplicativo Quarkus em uma imagem do Docker. Esse processo é fácil porque o plug-in 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 do aplicativo Quarkus quando ele é empacotado como um arquivo JAR. Você precisa verificar se o aplicativo Quarkus está empacotado como um arquivo JAR. Para fazer isso, execute o comando Maven a seguir:

./mvnw package    # On Mac or Linux
mvnw.cmd package  # On Windows

Esse comando empacota o aplicativo Quarkus em um arquivo JAR e gera um arquivo quarkus-run.jar na pasta target/quarkus-app.

Criar o ambiente dos 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 comando a seguir 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:

  • Criará um ambiente dos Aplicativos de Contêiner se ele não existir
  • Criará um Registro do Azure se ele não existir
  • Criará um workspace do Log Analytics se ele não existir
  • Compilará a imagem do Docker e a enviará por push para o Registro do Azure
  • Implantará a imagem do Docker no ambiente dos Aplicativos de Contêiner

O comando az containerapp up levará algum tempo para ser executado. Você deverá 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 implantação

Você poderá verificar 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ê deverá ver recursos semelhantes ao seguinte:

Screenshot that shows the deployed application.

Você também poderá verificar a implantação executando o comando a seguir. Ele lista todos os recursos criados pelo comando az containerapp up.

az resource list \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

Você deverá 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 é preciso obter a URL do aplicativo. Você poderá 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"

Seu aplicativo está pronto em https://<app-name>.azurecontainerapps.io/. Observe o protocolo https. 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

Esse comando retorna a lista de todos os itens da lista de pendências 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 este comando, poderá transmitir os logs para o contêiner ao criar novas tarefas pendentes:

az containerapp logs show \
    --name "$AZ_CONTAINERAPP" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --follow

Execute mais comandos cURL. Você deverá ver os logs rolando no terminal.

curl https://$AZ_APP_URL/api/todos

Observação

Você também pode abrir a URL em um navegador da Web para retornar a lista de itens de tarefas pendentes.