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
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
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
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
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
Primero, inicie sesión en Azure mediante la CLI de Azure. Ejecute el siguiente comando para iniciar sesión.
az login
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
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
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)
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
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
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
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
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
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
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.
En esta guía, aprendiste cómo:
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!
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