Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Terraform включает определение, предварительную версию и развертывание облачной инфраструктуры. С помощью Terraform вы создаете файлы конфигурации с помощью синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создадите план выполнения , который позволяет предварительно просмотреть изменения инфраструктуры перед развертыванием. После того как вы проверите изменения, примените план выполнения для развертывания инфраструктуры.
Состояние Terraform используется для приведения в соответствие развернутых ресурсов с конфигурациями Terraform. Состояние позволяет Terraform знать, какие ресурсы Azure нужно добавлять, обновлять или удалять.
По умолчанию состояние Terraform хранится локально, что не идеально подходит по следующим причинам:
- Локальное состояние не работает хорошо в команде или среде совместной работы.
- Состояние Terraform может включать конфиденциальную информацию.
- Локальное хранение состояния повышает вероятность случайного удаления.
В этой статье вы узнаете, как:
- Создание учетной записи хранилища Azure
- Используйте службу хранилища Azure для хранения удаленного состояния Terraform.
- Понимание блокировки состояния
- Понять шифрование неактивных данных
1. Настройка среды
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись перед началом работы.
Настройте Terraform: если вы еще не сделали этого, настройте Terraform с помощью одного из следующих параметров:
Настройте учетную запись для хранения удаленного состояния
Прежде чем использовать службу хранилища Azure в качестве серверной части, необходимо создать учетную запись хранения.
Выполните следующие команды или конфигурацию, чтобы создать учетную запись хранения Azure и контейнер:
#!/bin/bash
RESOURCE_GROUP_NAME=tfstate
STORAGE_ACCOUNT_NAME=tfstate$RANDOM
CONTAINER_NAME=tfstate
# Create resource group
az group create --name $RESOURCE_GROUP_NAME --location eastus
# Create storage account
az storage account create --resource-group $RESOURCE_GROUP_NAME --name $STORAGE_ACCOUNT_NAME --sku Standard_LRS --encryption-services blob
# Create blob container
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME
Ключевые моменты:
- Для учетных записей хранения Azure требуется глобально уникальное имя. Дополнительные сведения об устранении неполадок с именами учетных записей хранения см. в статье "Устранение ошибок для имен учетных записей хранения".
- Состояние Terraform хранится в виде обычного текста и может содержать секреты. Если состояние безопасности неверно, это может привести к несанкционированному доступу к системам и потере данных.
- В этом примере Terraform проходит проверку подлинности в учетной записи хранения Azure с помощью ключа доступа. В рабочем развертывании рекомендуется оценить доступные варианты проверки подлинности , поддерживаемые серверной частью Azurerm, и использовать наиболее безопасный вариант для вашего варианта использования.
- В этом примере доступ к общедоступной сети разрешен для этой учетной записи хранения Azure. В рабочем развертывании рекомендуется ограничить доступ к этой учетной записи хранения с помощью брандмауэра хранилища, конечной точки службы или частной конечной точки.
3. Конфигурирование состояния бэкенда terraform
Чтобы настроить состояние серверной части, вам потребуется следующая информация о хранилище Azure:
- storage_account_name. Имя учетной записи хранения Azure.
- container_name: имя контейнера BLOB-данных.
- ключ: имя создаваемого файла хранилища состояний.
- access_key: ключ доступа к хранилищу.
Каждое из этих значений можно указать в файле конфигурации Terraform или в командной строке. Рекомендуется использовать переменную среды для значения access_key. Использование переменной среды предотвращает запись ключа на диск.
Выполните следующие команды, чтобы получить ключ доступа к хранилищу и сохранить его в виде переменной среды:
ACCOUNT_KEY=$(az storage account keys list --resource-group $RESOURCE_GROUP_NAME --account-name $STORAGE_ACCOUNT_NAME --query '[0].value' -o tsv)
export ARM_ACCESS_KEY=$ACCOUNT_KEY
Ключевые моменты:
Чтобы защитить ключ доступа к учетной записи хранения Azure, сохраните его в Azure Key Vault. Затем переменная среды может быть задана с помощью команды, аналогичной следующей. Дополнительные сведения о Azure Key Vault см. в документации по Azure Key Vault.
export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault --query value -o tsv)
Создайте конфигурацию Terraform с конфигурационным блоком backend.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
backend "azurerm" {
resource_group_name = "tfstate"
storage_account_name = "<storage_account_name>"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "state-demo-secure" {
name = "state-demo"
location = "eastus"
}
Замените <storage_account_name> именем учетной записи хранения Azure.
Выполните следующую команду, чтобы инициализировать конфигурацию:
terraform init
Выполните следующую команду, чтобы запустить конфигурацию:
terraform apply
Теперь вы можете найти файл состояния в blob Azure Storage.
4. Общие сведения о блокировке состояния
Блобы Azure Storage автоматически блокируются перед всеми операциями, записывающими состояние. Этот шаблон предотвращает одновременные операции состояния, которые могут привести к повреждению.
Дополнительные сведения см. в разделе "Блокировка состояния " в документации Terraform.
При просмотре блоба на портале Azure или в других инструментах управления Azure вы увидите блокировку.
5. Понимание шифрования данных в состоянии покоя
Данные, хранящиеся в блобе Azure, шифруются до их сохранения. При необходимости Terraform извлекает состояние из серверной части и сохраняет его в локальной памяти. Если вы используете этот шаблон, состояние никогда не записывается на локальный диск.
Дополнительные сведения о шифровании службы хранилища Azure см. в разделе "Шифрование службы хранилища Azure" для неактивных данных.
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure