"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Implementación de una función de Java Azure en aplicaciones de contenedor de Azure

Implementación de una función de Java Azure en aplicaciones de contenedor de Azure

Publicado el 2024-11-01
Navegar:124

Deploying a Java Azure Function on Azure Container Apps

Azure Functions proporciona soporte integrado para desarrollar, implementar y administrar aplicaciones de funciones en contenedores en Azure Container Apps. Esto hace que sea más fácil ejecutar y administrar Azure Functions mediante el portal de administración integrado de Azure, en comparación con ejecutar Azure Functions de forma independiente en entornos de contenedores como Azure Kubernetes Service (AKS). Además, al aprovechar las funciones proporcionadas por Azure Container Apps, puede utilizar fácilmente funcionalidades como KEDA, Dapr, Envoy, escalamiento, monitoreo, seguridad y control de acceso para sus funciones de Azure.

[Referencia]

Alojamiento de Azure Container Apps de Azure Functions

Cree sus primeras funciones en contenedores en Azure Container Apps

Configuración de variables de entorno

A continuación se muestran las variables de entorno relacionadas con la creación de recursos de Azure Container Apps. Aquí, usted especifica varios nombres y ubicaciones de instalación para los recursos que creará, así como el nombre y la etiqueta de la imagen del contenedor.

# 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

Creación y prueba de un proyecto de función Java Azure

1. Cree un proyecto Azure Functions para Java Maven

Primero, cree un proyecto Maven para Azure Functions para Java. Este proyecto de Maven está diseñado para crear funciones de Azure usando Java 21. Utilice el comando mvn archetype:generate para crear el proyecto, modificando los parámetros según sea necesario.

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

La ejecución del comando anterior creará automáticamente una estructura de directorio y Function.java contendrá un código de muestra para una función de Azure con un desencadenador HTTP. También se creará un Dockerfile, que contiene la configuración para ejecutar Azure Functions en un entorno de contenedor 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. Ejecute la función de Azure localmente

Cree el proyecto Maven y ejecute Azure Functions localmente. Ejecute los siguientes comandos para iniciar Azure Functions con el desencadenador HTTP.

mvn clean package
mvn azure-functions:run

Una vez que Azure Functions se esté ejecutando, abra otra terminal y ejecute el siguiente comando para enviar una solicitud al desencadenador HTTP. Deberías recibir una respuesta que diga "Hola, mundo".

curl "http://localhost:7071/api/HttpExample?name=World"
# Output: 
Hello, World

Creación y prueba de la imagen del contenedor de Azure Functions

1. Cree y pruebe la imagen de Docker

Utilice el Dockerfile generado automáticamente para crear la imagen del contenedor de Azure Functions. Ejecute el siguiente comando para crear la imagen.

docker build -t $C_IMAGE_NAME:$C_IMAGE_TAG -f ./Dockerfile .

Una vez completada la compilación, ejecute el siguiente comando para verificar si se ha creado la imagen.

docker images | grep $C_IMAGE_NAME
# Output: 
tyoshio2002/java-function-on-aca    1.0    bcf471e6f774   9 hours ago     1.46GB

Una vez creada la imagen, ejecute el siguiente comando para probar la imagen del contenedor de Azure Functions localmente. El contenedor de Azure Functions utiliza internamente el puerto HTTP 80, por lo que lo asignará al puerto 8080 para acceso local. Una vez que se inicie el contenedor, ejecute el comando curl para enviar una solicitud al desencadenador HTTP de Azure Functions. Si todo funciona correctamente, deberías recibir "Hola mundo".

docker run -p 8080:80 -it $C_IMAGE_NAME:$C_IMAGE_TAG
curl "http://localhost:8080/api/HttpExample?name=World"
# Output: 
Hello, World

Envío de la imagen del contenedor a Azure Container Registry

1. Inicie sesión en la CLI de Azure

Primero, inicie sesión en Azure mediante la CLI de Azure. Ejecute el siguiente comando para iniciar sesión.

az login

2. Cree un grupo de recursos

Cree un grupo de recursos en Azure. Este grupo de recursos se utilizará para agrupar recursos relacionados con Azure Container Registry y Azure Container Apps.

az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

3. Cree e inicie sesión en Azure Container Registry

Cree un registro de contenedores de Azure e inicie sesión. Azure Container Registry es un registro de contenedores privado para enviar imágenes de contenedores.

az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic
az acr login --name $CONTAINER_REGISTRY_NAME

4. Recupere el nombre del servidor de Azure Container Registry

Recuperar el nombre del servidor del Azure Container Registry creado. El nombre del servidor tendrá el formato $CONTAINER_REGISTRY_NAME.azurecr.io.

CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)

5. Envíe la imagen a Azure Container Registry

Para enviar la imagen del contenedor creada localmente a Azure Container Registry, etiquete la imagen mediante el comando etiqueta. Después de etiquetar, use el comando push para enviar la imagen.

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

Creación de aplicaciones de contenedor de Azure e implementación de la función Java de Azure

1. Registre extensiones y proveedores de recursos en la CLI de Azure

Para crear y administrar aplicaciones de contenedor de Azure desde la CLI de Azure, registre las extensiones y los proveedores de recursos necesarios.

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. Cree un entorno de aplicaciones de contenedor de Azure

Cree un entorno para Azure Container Apps. Este comando establece la configuración necesaria para hospedar Azure Container Apps.

az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION

3. Cree una cuenta de almacenamiento para funciones de Azure

Azure Functions requiere una cuenta de almacenamiento al crear una instancia de aplicación de funciones. Por lo tanto, cree una cuenta de almacenamiento de uso general para Azure Functions.

az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS

4. Cree una instancia de la función Java Azure en Azure Container Apps

Cree una instancia de la función Java Azure en Azure Container Apps. Ejecute el siguiente comando para crear la instancia. Dado que la función de Azure se crea con 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

5. Asignar una función para que la función de Azure acceda a Azure Container Registry

Finalmente, configure el acceso seguro para Azure Functions a Azure Container Registry. Habilite la identidad administrada por el sistema para Azure Functions y asigne el rol ACRPull para acceder.

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. Recupere la URL de la función de Azure

Finalmente, recupere la URL de la función desencadenadora HTTP de la función de Azure implementada. Utilice el comando az functionapp function show para obtener los detalles de la función de 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"

Luego puede enviar una solicitud a la URL recuperada usando el comando curl para confirmar que Azure Functions está funcionando correctamente.

curl "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World"
# Expected Output: 
Hello, World

Si todo está configurado correctamente, debería recibir una respuesta que diga "Hola mundo", confirmando que su función de Azure está funcionando como se esperaba.

Resumen

En esta guía, aprendiste cómo:

  1. Configura variables de entorno para tus recursos de Azure.
  2. Cree un proyecto de función Java Azure usando Maven.
  3. Ejecute la función Azure localmente para realizar pruebas.
  4. Cree una imagen de Docker para la función Azure.
  5. Envíe la imagen de Docker a Azure Container Registry.
  6. Cree un entorno de Azure Container Apps e implemente la función Java Azure.
  7. Asigne los roles necesarios para un acceso seguro a Azure Container Registry.
  8. Recuperar y probar la URL de la función de Azure implementada.

Al seguir estos pasos, puede implementar con éxito una función Java Azure en Azure Container Apps, aprovechando los beneficios de la contenedorización y las capacidades de administración integrada de Azure. Si tiene más preguntas o necesita ayuda con pasos específicos, ¡no dude en preguntar!

Declaración de liberación Este artículo se reproduce en: https://dev.to/azure/deploying-a-java-azure-function-on-azure-container-apps-1oj?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3