O Azure Functions fornece suporte integrado para desenvolver, implantar e gerenciar aplicativos de funções conteinerizadas em aplicativos de contêiner do Azure. Isto torna mais fácil executar e gerir o Azure Functions utilizando o portal de gestão integrado do Azure, em comparação com a execução independente do Azure Functions em ambientes de contentores como o Azure Kubernetes Service (AKS). Além disso, ao aproveitar os recursos fornecidos pelos Azure Container Apps, você pode utilizar facilmente funcionalidades como KEDA, Dapr, Envoy, dimensionamento, monitoramento, segurança e controle de acesso para suas Funções do Azure.
[Referência]
Hospedagem de aplicativos de contêiner do Azure do Azure Functions
Crie suas primeiras funções em contêineres no Azure Container Apps
Abaixo estão as variáveis de ambiente relacionadas à criação de recursos do Azure Container Apps. Aqui, você especifica vários nomes e locais de instalação para os recursos que criará, bem como o nome e a tag da imagem do contêiner.
# Azure Container Apps resource names export LOCATION=eastus export RESOURCE_GROUP_NAME=yoshio-rg export CONTAINER_REGISTRY_NAME=cajava2411 export CONTAINER_ENVIRONMENT=YoshioContainerEnvironment export STORAGE_NAME=yoshiojavastorage export AZURE_FUNCTION_NAME=yoshiojavafunc # Container image name and tag export C_IMAGE_NAME=tyoshio2002/java-function-on-aca export C_IMAGE_TAG=1.0
Primeiro, crie um projeto Maven para Azure Functions para Java. Este projeto Maven foi projetado para criar Azure Functions usando Java 21. Use o comando mvn archetype:generate para criar o projeto, modificando os parâmetros conforme necessário.
mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=com.microsoft.azure \ -DarchetypeArtifactId=azure-functions-archetype \ -DgroupId=com.yoshio3 \ -Dpackage=com.yoshio3 \ -DartifactId=yoshiojavafunc \ -DappName=Java-Azure-Functions \ -DappRegion=$LOCATION \ -DjavaVersion=21 \ -Dversion=1.0-SNAPSHOT \ -Ddocker
A execução do comando acima criará automaticamente uma estrutura de diretório e Function.java conterá código de exemplo para uma função do Azure com um gatilho HTTP. Também será criado um Dockerfile, que contém a configuração para execução do Azure Functions em um ambiente de contêiner Docker.
├── Dockerfile ├── host.json ├── local.settings.json ├── pom.xml └── src ├── main │ └── java │ └── com │ └── yoshio3 │ └── Function.java └── test └── java └── com └── yoshio3 ├── FunctionTest.java └── HttpResponseMessageMock.java
Crie o projeto Maven e execute o Azure Functions localmente. Execute os comandos a seguir para iniciar o Azure Functions com o gatilho HTTP.
mvn clean package mvn azure-functions:run
Quando as Funções do Azure estiverem em execução, abra outro terminal e execute o comando a seguir para enviar uma solicitação ao gatilho HTTP. Você deverá receber uma resposta dizendo "Olá, mundo".
curl "http://localhost:7071/api/HttpExample?name=World" # Output: Hello, World
Use o Dockerfile gerado automaticamente para criar a imagem do contêiner do Azure Functions. Execute o seguinte comando para construir a imagem.
docker build -t $C_IMAGE_NAME:$C_IMAGE_TAG -f ./Dockerfile .
Após a conclusão da compilação, execute o seguinte comando para verificar se a imagem foi criada.
docker images | grep $C_IMAGE_NAME # Output: tyoshio2002/java-function-on-aca 1.0 bcf471e6f774 9 hours ago 1.46GB
Depois que a imagem for criada, execute o comando a seguir para testar a imagem do contêiner do Azure Functions localmente. O contêiner do Azure Functions usa internamente a porta HTTP 80, portanto você irá mapeá-lo para a porta 8080 para acesso local. Depois que o contêiner for iniciado, execute o comando curl para enviar uma solicitação ao gatilho HTTP do Azure Functions. Se tudo estiver funcionando corretamente, você deverá receber "Hello, World".
docker run -p 8080:80 -it $C_IMAGE_NAME:$C_IMAGE_TAG curl "http://localhost:8080/api/HttpExample?name=World" # Output: Hello, World
Primeiro, faça login no Azure usando a CLI do Azure. Execute o seguinte comando para fazer login.
az login
Crie um grupo de recursos no Azure. Este grupo de recursos será usado para agrupar recursos relacionados ao Registro de Contêiner do Azure e aos Aplicativos de Contêiner do Azure.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Crie um Registro de Contêiner do Azure e faça login. O Registro de Contêiner do Azure é um registro de contêiner privado para enviar imagens de contêiner.
az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic az acr login --name $CONTAINER_REGISTRY_NAME
Recupere o nome do servidor do Azure Container Registry criado. O nome do servidor estará no formato $CONTAINER_REGISTRY_NAME.azurecr.io.
CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)
Para enviar por push a imagem de contêiner criada localmente para o Registro de Contêiner do Azure, marque a imagem usando o comando tag. Após a marcação, use o comando push para enviar a imagem.
docker tag $C_IMAGE_NAME:$C_IMAGE_TAG $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG docker push $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG
Para criar e gerenciar aplicativos de contêiner do Azure na CLI do Azure, registre as extensões e os provedores de recursos necessários.
az upgrade az extension add --name containerapp --upgrade -y az provider register --namespace Microsoft.Web az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Crie um ambiente para aplicativos de contêiner do Azure. Este comando define a configuração necessária para hospedar aplicativos de contêiner do Azure.
az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION
O Azure Functions requer uma conta de armazenamento ao criar uma instância do Aplicativo de Funções. Portanto, crie uma conta de armazenamento de uso geral para Azure Functions.
az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS
Crie uma instância da função Java Azure em aplicativos de contêiner do Azure. Execute o seguinte comando para criar a instância. Como a Função do Azure é criada usando Java 21, especifique --runtime java.
az functionapp create --name $AZURE_FUNCTION_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --environment $CONTAINER_ENVIRONMENT \ --storage-account $STORAGE_NAME \ --workload-profile-name "Consumption" \ --max-replicas 15 \ --min-replicas 1 \ --functions-version 4 \ --runtime java \ --image $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG \ --assign-identity
Finalmente, configure o acesso seguro do Azure Functions ao Azure Container Registry. Habilite a identidade gerenciada pelo sistema para Azure Functions e atribua a função ACRPull para acesso.
FUNCTION_APP_ID=$(az functionapp identity assign --name $AZURE_FUNCTION_NAME --resource-group $RESOURCE_GROUP_NAME --query principalId --output tsv) ACR_ID=$(az acr show --name $CONTAINER_REGISTRY_NAME --query id --output tsv) az role assignment create --assignee $FUNCTION_APP_ID --role AcrPull --scope $ACR_ID
Finalmente, recupere o URL da função de gatilho HTTP da Função Azure implementada. Utilize o comando az functionapp function show para obter os detalhes da função Azure Functions.
az functionapp function show --resource-group $RESOURCE_GROUP_NAME --name $AZURE_FUNCTION_NAME --function-name HttpExample --query invokeUrlTemplate # Output: "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample"
Você pode então enviar uma solicitação para a URL recuperada usando o comando curl para confirmar se o Azure Functions está funcionando corretamente.
curl "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World" # Expected Output: Hello, World
Se tudo estiver configurado corretamente, você receberá uma resposta dizendo "Olá, mundo", confirmando que sua Função do Azure está funcionando conforme o esperado.
Neste guia, você aprendeu como:
Ao seguir estas etapas, você pode implantar com sucesso uma função Java Azure em aplicativos de contêiner do Azure, aproveitando os benefícios da conteinerização e dos recursos de gerenciamento integrado do Azure. Se você tiver mais dúvidas ou precisar de ajuda com etapas específicas, fique à vontade para perguntar!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3