Azure Functions fournit une prise en charge intégrée pour le développement, le déploiement et la gestion d'applications de fonctions conteneurisées sur Azure Container Apps. Cela facilite l’exécution et la gestion d’Azure Functions à l’aide du portail de gestion Azure intégré, par rapport à l’exécution indépendante d’Azure Functions dans des environnements de conteneurs comme Azure Kubernetes Service (AKS). De plus, en tirant parti des fonctionnalités fournies par Azure Container Apps, vous pouvez facilement utiliser des fonctionnalités telles que KEDA, Dapr, Envoy, la mise à l'échelle, la surveillance, la sécurité et le contrôle d'accès pour vos fonctions Azure.
[Référence]
Hébergement Azure Container Apps d'Azure Functions
Créez vos premières fonctions conteneurisées sur Azure Container Apps
Vous trouverez ci-dessous les variables d'environnement liées à la création de ressources Azure Container Apps. Ici, vous spécifiez différents noms et emplacements d'installation pour les ressources que vous allez créer, ainsi que le nom et la balise de l'image du conteneur.
# 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
Tout d’abord, créez un projet Maven pour Azure Functions pour Java. Ce projet Maven est conçu pour créer des fonctions Azure à l'aide de Java 21. Utilisez la commande mvn archetype:generate pour créer le projet, en modifiant les paramètres si nécessaire.
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
L'exécution de la commande ci-dessus créera automatiquement une structure de répertoires et Function.java contiendra un exemple de code pour une fonction Azure avec un déclencheur HTTP. Un Dockerfile sera également créé, qui contient la configuration pour exécuter Azure Functions dans un environnement de conteneur Docker.
├── Dockerfile ├── host.json ├── local.settings.json ├── pom.xml └── src ├── main │ └── java │ └── com │ └── yoshio3 │ └── Function.java └── test └── java └── com └── yoshio3 ├── FunctionTest.java └── HttpResponseMessageMock.java
Créez le projet Maven et exécutez Azure Functions localement. Exécutez les commandes suivantes pour démarrer Azure Functions avec le déclencheur HTTP.
mvn clean package mvn azure-functions:run
Une fois les fonctions Azure exécutées, ouvrez un autre terminal et exécutez la commande suivante pour envoyer une requête au déclencheur HTTP. Vous devriez recevoir une réponse disant "Bonjour tout le monde".
curl "http://localhost:7071/api/HttpExample?name=World" # Output: Hello, World
Utilisez le Dockerfile généré automatiquement pour créer l’image du conteneur Azure Functions. Exécutez la commande suivante pour créer l'image.
docker build -t $C_IMAGE_NAME:$C_IMAGE_TAG -f ./Dockerfile .
Une fois la construction terminée, exécutez la commande suivante pour vérifier si l'image a été créée.
docker images | grep $C_IMAGE_NAME # Output: tyoshio2002/java-function-on-aca 1.0 bcf471e6f774 9 hours ago 1.46GB
Une fois l'image créée, exécutez la commande suivante pour tester l'image du conteneur Azure Functions localement. Le conteneur Azure Functions utilise en interne le port HTTP 80, vous le mapperez donc au port 8080 pour un accès local. Une fois le conteneur démarré, exécutez la commande curl pour envoyer une requête au déclencheur HTTP Azure Functions. Si tout fonctionne correctement, vous devriez recevoir « 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
Tout d’abord, connectez-vous à Azure à l’aide d’Azure CLI. Exécutez la commande suivante pour vous connecter.
az login
Créez un groupe de ressources dans Azure. Ce groupe de ressources sera utilisé pour regrouper les ressources liées à Azure Container Registry et Azure Container Apps.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Créez un registre de conteneurs Azure et connectez-vous. Azure Container Registry est un registre de conteneurs privé permettant de transmettre des images de conteneurs.
az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic az acr login --name $CONTAINER_REGISTRY_NAME
Récupérez le nom du serveur de l'Azure Container Registry créé. Le nom du serveur sera au format $CONTAINER_REGISTRY_NAME.azurecr.io.
CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)
Pour transférer l'image de conteneur créée localement vers Azure Container Registry, marquez l'image à l'aide de la commande tag. Après le marquage, utilisez la commande push pour pousser l'image.
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
Pour créer et gérer Azure Container Apps à partir d'Azure CLI, enregistrez les extensions et les fournisseurs de ressources nécessaires.
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
Créez un environnement pour Azure Container Apps. Cette commande configure la configuration nécessaire pour héberger Azure Container Apps.
az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION
Azure Functions requires a storage account when creating a Function App instance. Therefore, create a general-purpose storage account for Azure Functions.
az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS
Create an instance of the Java Azure Function in Azure Container Apps. Execute the following command to create the instance. Since the Azure Function is created using Java 21, specify --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
Finally, configure secure access for Azure Functions to Azure Container Registry. Enable the system-managed identity for Azure Functions and assign the ACRPull role for access.
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
Finally, retrieve the HTTP trigger function URL of the deployed Azure Function. Use the az functionapp function show command to get the details of the Azure Functions function.
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"
You can then send a request to the retrieved URL using curl command to confirm that the Azure Functions is working correctly.
curl "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World" # Expected Output: Hello, World
If everything is set up correctly, you should receive a response saying "Hello, World", confirming that your Azure Function is functioning as expected.
In this guide, you learned how to:
By following these steps, you can successfully deploy a Java Azure Function on Azure Container Apps, leveraging the benefits of containerization and Azure's integrated management capabilities. If you have any further questions or need assistance with specific steps, feel free to ask!
Atas ialah kandungan terperinci Menggunakan Fungsi Java Azure pada Apl Kontena Azure. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!