Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este inicio rápido, usará Terraform para crear una aplicación de funciones en un plan de consumo flexible en Azure Functions, junto con otros recursos de Azure necesarios. El plan de consumo flexible proporciona hospedaje sin servidor que le permite ejecutar el código a petición sin aprovisionar ni administrar explícitamente la infraestructura. Se usa para procesar datos, integrar sistemas, computación de Internet de las cosas y crear API y microservicios simples. Los recursos creados en esta configuración incluyen un grupo de recursos único, una cuenta de almacenamiento, un contenedor de almacenamiento de blobs, el plan de consumo flexible y la propia aplicación de funciones. La aplicación de funciones se ejecuta en Linux y está configurada para usar Blob Storage para implementaciones de código.
Terraform habilita la definición, vista previa e implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.
- Cree un grupo de recursos de Azure con un nombre único.
- Genere una cadena aleatoria de 13 letras minúsculas para asignar un nombre a los recursos.
- Cree una cuenta de almacenamiento en Azure.
- Cree un contenedor de Blob Storage en la cuenta de almacenamiento.
- Cree un plan de consumo flexible en Azure Functions.
- Cree una aplicación de funciones con un plan de consumo flexible en Azure.
- Genera los nombres del grupo de recursos, la cuenta de almacenamiento, el plan de servicio, la aplicación de funciones y el plan de consumo flexible de Azure Functions.
Prerrequisitos
- Cree una cuenta de Azure con una suscripción activa. Puede crear una cuenta gratuitamente.
- Instale y configure Terraform.
Implementación del código de Terraform
El código de ejemplo de este artículo se encuentra en el repositorio de GitHub de Azure Terraform. Puedes ver el archivo de registro que contiene los resultados de las pruebas de las versiones actuales y anteriores de Terraform. Consulte más artículos y código de ejemplo en el que se muestra cómo usar Terraform para administrar recursos de Azure.
Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.
Cree un archivo llamado
main.tf
e inserte el siguiente código:# This Terraform configuration creates a Flex Consumption plan app in Azure Functions # with the required Storage account and Blob Storage deployment container. # Create a random pet to generate a unique resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } # Create a resource group resource "azurerm_resource_group" "example" { location = var.resource_group_location name = random_pet.rg_name.id } # Random String for unique naming of resources resource "random_string" "name" { length = 8 special = false upper = false lower = true numeric = false } # Create a storage account resource "azurerm_storage_account" "example" { name = coalesce(var.sa_name, random_string.name.result) resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location account_tier = var.sa_account_tier account_replication_type = var.sa_account_replication_type } # Create a storage container resource "azurerm_storage_container" "example" { name = "example-flexcontainer" storage_account_id = azurerm_storage_account.example.id container_access_type = "private" } # Create a Log Analytics workspace for Application Insights resource "azurerm_log_analytics_workspace" "example" { name = coalesce(var.ws_name, random_string.name.result) location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name sku = "PerGB2018" retention_in_days = 30 } # Create an Application Insights instance for monitoring resource "azurerm_application_insights" "example" { name = coalesce(var.ai_name, random_string.name.result) location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name application_type = "web" workspace_id = azurerm_log_analytics_workspace.example.id } # Create a service plan resource "azurerm_service_plan" "example" { name = coalesce(var.asp_name, random_string.name.result) resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location sku_name = "FC1" os_type = "Linux" } # Create a function app resource "azurerm_function_app_flex_consumption" "example" { name = coalesce(var.fa_name, random_string.name.result) resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location service_plan_id = azurerm_service_plan.example.id storage_container_type = "blobContainer" storage_container_endpoint = "${azurerm_storage_account.example.primary_blob_endpoint}${azurerm_storage_container.example.name}" storage_authentication_type = "StorageAccountConnectionString" storage_access_key = azurerm_storage_account.example.primary_access_key runtime_name = var.runtime_name runtime_version = var.runtime_version maximum_instance_count = 50 instance_memory_in_mb = 2048 site_config { } }
Cree un archivo llamado
outputs.tf
e inserte el siguiente código:output "resource_group_name" { value = azurerm_resource_group.example.name } output "sa_name" { value = azurerm_storage_account.example.name } output "asp_name" { value = azurerm_service_plan.example.name } output "fa_name" { value = azurerm_function_app_flex_consumption.example.name } output "fa_url" { value = "https://${azurerm_function_app_flex_consumption.example.name}.azurewebsites.net" }
Cree un archivo llamado
providers.tf
e inserte el siguiente código:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>4.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Cree un archivo llamado
variables.tf
e inserte el siguiente código:variable "resource_group_name" { type = string default = "" description = "The name of the Azure resource group. If blank, a random name will be generated." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "sa_account_tier" { description = "The tier of the storage account. Possible values are Standard and Premium." type = string default = "Standard" } variable "sa_account_replication_type" { description = "The replication type of the storage account. Possible values are LRS, GRS, RAGRS, and ZRS." type = string default = "LRS" } variable "sa_name" { description = "The name of the storage account. If blank, a random name will be generated." type = string default = "" } variable "ws_name" { description = "The name of the Log Analytics workspace. If blank, a random name will be generated." type = string default = "" } variable "ai_name" { description = "The name of the Application Insights instance. If blank, a random name will be generated." type = string default = "" } variable "asp_name" { description = "The name of the App Service Plan. If blank, a random name will be generated." type = string default = "" } variable "fa_name" { description = "The name of the Function App. If blank, a random name will be generated." type = string default = "" } variable "runtime_name" { description = "The name of the language worker runtime." type = string default = "node" # Allowed: dotnet-isolated, java, node, powershell, python } variable "runtime_version" { description = "The version of the language worker runtime." type = string default = "20" # Supported versions: see https://aka.ms/flexfxversions }
Importante
Si usa el proveedor azurerm 4.x, debe especificar explícitamente el identificador de suscripción de Azure para autenticarse en Azure antes de ejecutar los comandos de Terraform.
Una manera de especificar el identificador de suscripción de Azure sin colocarlo en el providers
bloque es especificar el identificador de suscripción en una variable de entorno denominada ARM_SUBSCRIPTION_ID
.
Para más información, consulte la documentación de referencia del proveedor de Azure.
Inicialización de Terraform
Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.
terraform init -upgrade
Puntos clave:
- El parámetro
-upgrade
actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.
Creación de un plan de ejecución de Terraform
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro opcional
-out
permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
Aplicación de un plan de ejecución de Terraform
Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.
terraform apply main.tfplan
Puntos clave:
- El comando
terraform apply
de ejemplo asume que ejecutóterraform plan -out main.tfplan
previamente. - Si especificó un nombre de archivo diferente para el parámetro
-out
, use ese mismo nombre de archivo en la llamada aterraform apply
. - Si no ha utilizado el parámetro
-out
, llame aterraform apply
sin ningún parámetro.
Comprobación de los resultados
Obtenga el nombre del grupo de recursos de Azure.
resource_group_name=$(terraform output -raw resource_group_name)
Obtenga el nombre de la cuenta de almacenamiento.
sa_name=$(terraform output -raw sa_name)
Obtenga el nombre del plan de servicio.
asp_name=$(terraform output -raw asp_name)
Obtenga el nombre del plan de la aplicación de funciones.
fa_name=$(terraform output -raw fa_name)
Ejecute
az functionapp show
para ver el plan de consumo flexible de Azure Functions.az functionapp show --name $function_app_name --resource-group $resource_group_name
Abra un explorador y escriba la siguiente dirección URL: https://< fa_name.azurewebsites.net>. Reemplaza el marcador de posición <fa_name>
por el valor de salida de Terraform.
Limpieza de recursos
Cuando ya no necesite los recursos creados a través de Terraform, siga estos pasos:
Ejecute terraform plan y especifique el indicador
destroy
.terraform plan -destroy -out main.destroy.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro opcional
-out
permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
- El comando
Ejecute terraform apply para aplicar el plan de ejecución.
terraform apply main.destroy.tfplan
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure.
Pasos siguientes
Ahora puede implementar un proyecto de código en los recursos de la aplicación de funciones que creó en Azure.
Puede crear, comprobar e implementar un proyecto de código en la nueva aplicación de funciones desde estos entornos locales: