Maison  >  Article  >  Java  >  Déploiement d'une fonction Java Azure sur Azure Container Apps

Déploiement d'une fonction Java Azure sur Azure Container Apps

WBOY
WBOYoriginal
2024-09-09 22:30:47373parcourir

Deploying a Java Azure Function on Azure Container Apps

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

Définition des variables d'environnement

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

Création et test d'un projet de fonction Java Azure

1. Créer un projet Azure Functions pour Java Maven

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

2. Exécutez la fonction Azure localement

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

Création et test de l'image du conteneur Azure Functions

1. Créez et testez l'image Docker

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

Transférer l'image du conteneur vers Azure Container Registry

1. Connectez-vous à Azure CLI

Tout d’abord, connectez-vous à Azure à l’aide d’Azure CLI. Exécutez la commande suivante pour vous connecter.

az login

2. Créez un groupe de ressources

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

3. Créez et connectez-vous à Azure Container Registry

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

4. Récupérez le nom du serveur Azure Container Registry

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)

5. Transférez l'image vers Azure Container Registry

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

Création d'applications de conteneur Azure et déploiement de la fonction Java Azure

1. Enregistrez les extensions et les fournisseurs de ressources dans Azure CLI

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

2. Créer un environnement d'applications de conteneur Azure

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

3. Create Storage Account for Azure Functions

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

4. Create an Instance of Java Azure Function in Azure Container Apps

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

5. Assign Role for Azure Function to Access Azure Container Registry

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

6. Retrieve the URL of the Azure Function

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.

Summary

In this guide, you learned how to:

  1. Set up environment variables for your Azure resources.
  2. Create a Java Azure Function project using Maven.
  3. Run the Azure Function locally for testing.
  4. Build a Docker image for the Azure Function.
  5. Push the Docker image to Azure Container Registry.
  6. Create an Azure Container Apps environment and deploy the Java Azure Function.
  7. Assign necessary roles for secure access to Azure Container Registry.
  8. Retrieve and test the URL of the deployed Azure Function.

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!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn