Краткое руководство. Создание экземпляра контейнера Azure с общедоступным IP-адресом с помощью Terraform
Служба "Экземпляры контейнеров Azure" позволяет легко и быстро запускать бессерверные контейнеры Docker в Azure. Развертывайте приложения в экземпляр контейнера по требованию, когда вам не нужна полная платформа оркестрации контейнера, такая как Служба Azure Kubernetes. В этой статье вы используете Terraform для развертывания изолированного контейнера Docker и сделать его веб-приложение доступным с общедоступным IP-адресом.
Terraform поддерживает определение, предварительный просмотр и развертывание облачной инфраструктуры. С помощью Terraform можно создавать файлы конфигурации с применением синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации создается план выполнения, который позволяет предварительно просматривать изменения инфраструктуры до их развертывания. После проверки изменений примените план выполнения для развертывания инфраструктуры.
Вы узнаете, как выполнять следующие задачи:
- Создание случайного значения для имени группы ресурсов Azure с помощью random_pet
- Создание группы ресурсов Azure с помощью azurerm_resource_group
- Создание случайного значения для имени контейнера с помощью random_string
- Создание группы контейнеров Azure с помощью azurerm_container_group
Необходимые компоненты
Реализация кода Terraform
Примечание.
Пример кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете просмотреть файл журнала, содержащий результаты теста из текущих и предыдущих версий Terraform.
См. другие статьи и примеры кода, в которых показано, как использовать Terraform для управления ресурсами Azure.
Создайте каталог для тестирования и выполнения примера кода Terraform и сделайте его текущим каталогом.
Создайте файл с именем
main.tf
и вставьте следующий код:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } resource "random_string" "container_name" { length = 25 lower = true upper = false special = false } resource "azurerm_container_group" "container" { name = "${var.container_group_name_prefix}-${random_string.container_name.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name ip_address_type = "Public" os_type = "Linux" restart_policy = var.restart_policy container { name = "${var.container_name_prefix}-${random_string.container_name.result}" image = var.image cpu = var.cpu_cores memory = var.memory_in_gb ports { port = var.port protocol = "TCP" } } }
Создайте файл с именем
outputs.tf
и вставьте следующий код:output "container_ipv4_address" { value = azurerm_container_group.container.ip_address }
Создайте файл с именем
providers.tf
и вставьте следующий код:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Создайте файл с именем
variables.tf
и вставьте следующий код:variable "resource_group_location" { type = string default = "eastus" description = "Location for all resources." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random value so name is unique in your Azure subscription." } variable "container_group_name_prefix" { type = string description = "Prefix of the container group name that's combined with a random value so name is unique in your Azure subscription." default = "acigroup" } variable "container_name_prefix" { type = string description = "Prefix of the container name that's combined with a random value so name is unique in your Azure subscription." default = "aci" } variable "image" { type = string description = "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials." default = "mcr.microsoft.com/azuredocs/aci-helloworld" } variable "port" { type = number description = "Port to open on the container and the public IP address." default = 80 } variable "cpu_cores" { type = number description = "The number of CPU cores to allocate to the container." default = 1 } variable "memory_in_gb" { type = number description = "The amount of memory to allocate to the container in gigabytes." default = 2 } variable "restart_policy" { type = string description = "The behavior of Azure runtime if container has stopped." default = "Always" validation { condition = contains(["Always", "Never", "OnFailure"], var.restart_policy) error_message = "The restart_policy must be one of the following: Always, Never, OnFailure." } }
Инициализация Terraform
Запустите terraform init, чтобы инициализировать развертывание Terraform. Эта команда скачивает поставщик Azure, необходимый для управления ресурсами Azure.
terraform init -upgrade
Основные моменты:
- Параметр
-upgrade
обновляет необходимые подключаемые модули поставщика до последней версии, которая соответствует ограничениям версии конфигурации.
Создание плана выполнения Terraform
Чтобы создать план выполнения, выполните terraform plan.
terraform plan -out main.tfplan
Основные моменты:
- Команда
terraform plan
создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы. - Необязательный параметр
-out
позволяет указать выходной файл для плана. Использование параметра-out
гарантирует, что проверяемый план полностью соответствует применяемому.
Применение плана выполнения Terraform
Выполните terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.
terraform apply main.tfplan
Основные моменты:
- В примере
terraform apply
команды предполагается, что вы ранее выполнили.terraform plan -out main.tfplan
- Если для параметра
-out
указано другое имя файла, используйте то же имя в вызове кterraform apply
. - Если вы не использовали параметр
-out
, вызовитеterraform apply
без параметров.
Проверка результатов
При применении плана выполнения Terraform выводит общедоступный IP-адрес. Чтобы снова отобразить IP-адрес, выполните выходные данные terraform.
terraform output -raw container_ipv4_address
Введите общедоступный IP-адрес примера в адресной строке браузера.
Очистка ресурсов
Если вам больше не нужны ресурсы, созданные через 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