Rumah Java javaTutorial Menggunakan Fungsi Java Azure pada Apl Kontena Azure

Menggunakan Fungsi Java Azure pada Apl Kontena Azure

Sep 09, 2024 pm 10:30 PM

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!

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Agnes Tachyon Build Guide | Musume Derby Pretty
2 minggu yang lalu By Jack chen
Oguri Cap Build Guide | Musume Derby Pretty
2 minggu yang lalu By Jack chen
Puncak: Cara Menghidupkan Pemain
4 minggu yang lalu By DDD
Puncak bagaimana untuk emote
3 minggu yang lalu By Jack chen

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Mengapa kita memerlukan kelas pembalut? Mengapa kita memerlukan kelas pembalut? Jun 28, 2025 am 01:01 AM

Java menggunakan kelas pembalut kerana jenis data asas tidak dapat mengambil bahagian secara langsung dalam operasi berorientasikan objek, dan bentuk objek sering diperlukan dalam keperluan sebenar; 1. Kelas koleksi hanya boleh menyimpan objek, seperti senarai menggunakan tinju automatik untuk menyimpan nilai berangka; 2. Generik tidak menyokong jenis asas, dan kelas pembungkusan mesti digunakan sebagai parameter jenis; 3. Kelas pembungkusan boleh mewakili nilai null untuk membezakan data yang tidak tersendiri atau hilang; 4. Kelas pembungkusan menyediakan kaedah praktikal seperti penukaran rentetan untuk memudahkan parsing dan pemprosesan data, jadi dalam senario di mana ciri -ciri ini diperlukan, kelas pembungkusan sangat diperlukan.

Perbezaan antara hashmap dan hashtable? Perbezaan antara hashmap dan hashtable? Jun 24, 2025 pm 09:41 PM

Perbezaan antara hashmap dan hashtable terutamanya dicerminkan dalam keselamatan benang, sokongan nilai null dan prestasi. 1. Dari segi keselamatan benang, hashtable adalah benang selamat, dan kaedahnya kebanyakannya kaedah segerak, sementara hashmap tidak melakukan pemprosesan penyegerakan, yang bukan benang-selamat; 2. Dari segi sokongan nilai null, hashmap membolehkan satu kunci null dan nilai null berbilang, manakala hashtable tidak membenarkan kekunci atau nilai null, jika tidak, nullPointerException akan dibuang; 3. Dari segi prestasi, hashmap lebih cekap kerana tidak ada mekanisme penyegerakan, dan Hashtable mempunyai prestasi penguncian yang rendah untuk setiap operasi. Adalah disyorkan untuk menggunakan ConcurrentHashMap sebaliknya.

Apakah kaedah statik dalam antara muka? Apakah kaedah statik dalam antara muka? Jun 24, 2025 pm 10:57 PM

Staticmethodsininterfaceswereintroducedinjava8toallowutilityfunctionswithintheintheinterfaceitself.beforjava8, SuchfunctionsRequiredseparateHelpereHelperes, LeadingTodisorgaganizedCode.Now, staticmethodethreeKeybeeMeKeBeReSes, staticmethodeDethreeKeybeeMeKeBeReSes, staticmethodethreeKeybeeMeKeKeBeReSes, staticmethodeDethreeKeybeeMeKeKeBeReKeNey

Bagaimanakah pengkompil JIT mengoptimumkan kod? Bagaimanakah pengkompil JIT mengoptimumkan kod? Jun 24, 2025 pm 10:45 PM

Penyusun JIT mengoptimumkan kod melalui empat kaedah: kaedah dalam talian, pengesanan tempat panas dan penyusunan, spekulasi jenis dan devirtualisasi, dan penghapusan operasi yang berlebihan. 1. Kaedah sebaris mengurangkan panggilan overhead dan memasukkan kaedah kecil yang sering dipanggil terus ke dalam panggilan; 2. Pengesanan tempat panas dan pelaksanaan kod frekuensi tinggi dan mengoptimumkannya untuk menjimatkan sumber; 3. Jenis spekulasi mengumpul maklumat jenis runtime untuk mencapai panggilan devirtualisasi, meningkatkan kecekapan; 4. Operasi berlebihan menghapuskan pengiraan dan pemeriksaan yang tidak berguna berdasarkan penghapusan data operasi, meningkatkan prestasi.

Apakah blok inisialisasi contoh? Apakah blok inisialisasi contoh? Jun 25, 2025 pm 12:21 PM

Blok permulaan contoh digunakan dalam Java untuk menjalankan logik inisialisasi apabila membuat objek, yang dilaksanakan sebelum pembina. Ia sesuai untuk senario di mana beberapa pembina berkongsi kod inisialisasi, permulaan medan kompleks, atau senario permulaan kelas tanpa nama. Tidak seperti blok inisialisasi statik, ia dilaksanakan setiap kali ia ditegaskan, manakala blok permulaan statik hanya dijalankan sekali apabila kelas dimuatkan.

Apakah kata kunci `akhir` untuk pembolehubah? Apakah kata kunci `akhir` untuk pembolehubah? Jun 24, 2025 pm 07:29 PM

Injava, thefinalkeywordpreventsavariable'svaluefrombeingchangedafterassignment, butitsbehaviordiffersforprimitivesandobjectreferences.forprimitiveVariables, finalmakesthevalueconstant, asinfinalintmax_speed = 100;

Apakah jenis pemutus? Apakah jenis pemutus? Jun 24, 2025 pm 11:09 PM

Terdapat dua jenis penukaran: tersirat dan eksplisit. 1. Penukaran tersirat berlaku secara automatik, seperti menukar int untuk berganda; 2. Penukaran eksplisit memerlukan operasi manual, seperti menggunakan (int) mydouble. Kes di mana penukaran jenis diperlukan termasuk memproses input pengguna, operasi matematik, atau lulus pelbagai jenis nilai antara fungsi. Isu-isu yang perlu diperhatikan adalah: Mengubah nombor terapung ke dalam bilangan bulat akan memotong bahagian pecahan, mengubah jenis besar menjadi jenis kecil boleh menyebabkan kehilangan data, dan beberapa bahasa tidak membenarkan penukaran langsung jenis tertentu. Pemahaman yang betul tentang peraturan penukaran bahasa membantu mengelakkan kesilapan.

Apakah corak kilang? Apakah corak kilang? Jun 24, 2025 pm 11:29 PM

Mod kilang digunakan untuk merangkum logik penciptaan objek, menjadikan kod lebih fleksibel, mudah dikekalkan, dan ditambah longgar. Jawapan teras adalah: dengan mengurus logik penciptaan objek secara berpusat, menyembunyikan butiran pelaksanaan, dan menyokong penciptaan pelbagai objek yang berkaitan. Keterangan khusus adalah seperti berikut: Mod Kilang menyerahkan penciptaan objek ke kelas kilang khas atau kaedah untuk diproses, mengelakkan penggunaan Newclass () secara langsung; Ia sesuai untuk senario di mana pelbagai jenis objek yang berkaitan dicipta, logik penciptaan boleh berubah, dan butiran pelaksanaan perlu disembunyikan; Sebagai contoh, dalam pemproses pembayaran, jalur, paypal dan contoh lain dicipta melalui kilang -kilang; Pelaksanaannya termasuk objek yang dikembalikan oleh kelas kilang berdasarkan parameter input, dan semua objek menyedari antara muka yang sama; Varian biasa termasuk kilang -kilang mudah, kaedah kilang dan kilang abstrak, yang sesuai untuk kerumitan yang berbeza.

See all articles