Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы используете Terraform для создания функционального приложения в плане гибкого потребления в Azure Functions и других необходимых ресурсах Azure. План потребления Flex предоставляет бессерверное размещение, которое позволяет по запросу запускать ваш код без явного выделения или управления инфраструктурой. Функциональное приложение работает на Linux и настроено на использование Azure Blob-хранилища для развертываний кода.
Terraform позволяет определять, просматривать и развертывать облачную инфраструктуру. Используя Terraform, вы создаёте файлы конфигурации, применяя синтаксис HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создаете план выполнения, который позволяет предварительно просмотреть изменения в инфраструктуре до их внедрения. После того как вы проверите изменения, примените план выполнения для развертывания инфраструктуры.
- Создайте группу ресурсов Azure с уникальным именем.
- Создайте случайную строку из 13 строчных букв для названия ресурсов.
- Создайте учетную запись хранения в Azure.
- Создайте контейнер хранилища BLOB-объектов в учетной записи хранения.
- Создайте план потребления Flex в Функциях Azure.
- Создайте приложение-функцию с планом потребления Flex в Azure.
- Выводит имена группы ресурсов, учетной записи хранения, плана обслуживания, функционального приложения и плана гибкого потребления Azure Functions.
Prerequisites
- Создайте учетную запись Azure с активной подпиской. Вы можете создать учетную запись бесплатно.
- Установите и настройте Terraform.
- Установите Azure CLI , чтобы получить идентификатор подписки или запустить в Azure Cloud Shell.
Реализуйте код Terraform
Образец кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете просмотреть файл журнала, содержащий результаты теста из текущих и предыдущих версий Terraform. Дополнительные статьи и пример кода, демонстрирующие использование Terraform для управления ресурсами Azure.
Создайте каталог, в котором необходимо протестировать и запустить пример кода Terraform и сделать его текущим каталогом.
Создайте файл с именем
main.tfи вставьте следующий код:# 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 { } }Создайте файл с именем
outputs.tfи вставьте следующий код: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" }Создайте файл с именем
providers.tfи вставьте следующий код:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>4.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Создайте файл с именем
variables.tfи вставьте следующий код: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 }Используйте эту команду Azure CLI, чтобы задать
ARM_SUBSCRIPTION_IDпеременную среды идентификатором текущей подписки:export ARM_SUBSCRIPTION_ID=$(az account show --query "id" --output tsv)Эта переменная необходима, чтобы Terraform мог аутентифицироваться в вашей подписке Azure.
Инициализируйте Terraform
Запустите terraform init, чтобы инициализировать развертывание Terraform. Эта команда загружает поставщика Azure, необходимого для управления вашими ресурсами в Azure.
terraform init -upgrade
Основные моменты:
- Параметр
-upgradeобновляет необходимые плагины провайдера до самой последней версии, которая соответствует ограничениям версии конфигурации.
Создайте план запуска Terraform
Запустите команду terraform plan, чтобы создать план выполнения.
terraform plan -out main.tfplan -var="runtime_name=dotnet-isolated" -var="runtime_version=8"
terraform plan -out main.tfplan -var="runtime_name=powershell" -var="runtime_version=7.4"
terraform plan -out main.tfplan -var="runtime_name=python" -var="runtime_version=3.12"
terraform plan -out main.tfplan -var="runtime_name=java" -var="runtime_version=21"
terraform plan -out main.tfplan -var="runtime_name=node" -var="runtime_version=20"
Убедитесь, что runtime_version соответствует версии стека языков, проверенной локально. Выберите предпочитаемый стек языков в верхней части статьи.
Основные моменты:
- Команда
terraform planсоздает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы. - Необязательный параметр
-outпозволяет указать выходной файл для плана. Использование параметра-outобеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
Применение плана выполнения Terraform
Выполните команду terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.
terraform apply main.tfplan
Основные моменты:
- Пример команды
terraform applyпредполагает, что вы ранее выполнили командуterraform plan -out main.tfplan. - Если вы указали другое имя файла для параметра
-out, используйте то же имя файла при вызовеterraform apply. - Если вы не использовали параметр
-out, вызовитеterraform applyбез параметров.
Проверка результатов
Файл outputs.tf возвращает следующие значения для нового приложения-функции:
| Value | Description |
|---|---|
resource_group_name |
Имя созданной группы ресурсов. |
sa_name |
Имя учетной записи хранения Azure, необходимой узлом функций. |
asp_name |
Имя плана потребления Flex, на котором размещено новое приложение. |
fa_name |
Имя вашего нового функционального приложения. |
fa_url |
URL-адрес новой конечной точки приложения-функции. |
Откройте браузер и перейдите по URL-адресу в fa_url. Вы также можете использовать команду terraform output для просмотра этих значений в более поздний срок.
Очистите ресурсы
Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:
Запустите команду terraform plan и укажите флаг
destroy.terraform plan -destroy -out main.destroy.tfplanОсновные моменты:
- Команда
terraform planсоздает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы. - Необязательный параметр
-outпозволяет указать выходной файл для плана. Использование параметра-outобеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
- Команда
Чтобы применить план выполнения, запустите команду terraform apply.
terraform apply main.destroy.tfplan
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure.
Дальнейшие шаги
Теперь вы можете развернуть проект кода в ресурсах функционального приложения, которые вы создали в Azure.
Вы можете создавать, проверять и развертывать проект кода в новом приложении-функции из следующих локальных сред: