Глава 5. CLI Terraform
Содержание
В своей предыдущей главе мы обсуждали серверную основу Terraform, оснастку Terraform, циклы (итерации) Terraform, а также функции Terraform. В данной главе мы намерены обсудить интерфейс командной строки Terraform (Terraform CLI), который является программным обеспечением с открытым исходным кодом, поддерживаемым и сопровождаемым HashiCorp. Далее мы рассмотрим как мы можем выполнять аутентификацию в CLI Terraform для основных поставщиков облачных решений, таких как Azure, Amazon Web Services (AWS) и Google Cloud Platform (GCP). В последующих разделах мы обсудим некоторые из команд CLI Terraform и попытаемся осознать важность каждой команды.
В этой главе рассматриваются следующие вопросы:
-
Введение в CLI Terraform
-
Интеграция с Azure
-
Интеграция с AWS
-
Интеграция с GCP
-
Основы команд CLI Terraform
Чтобы следовать данной главой вам требуется обладать представлением о написании кода конфигурации Terraform через определение поставщиков, ресурсов, переменных, данных и вывода. Наряду с этим, на протяжении всего курса будут полезны некоторые базовые знания об основных поставщиках услуг, таких как GCP, AWS и Azure. Весь применяемый в этой главе код вы можете отыскать по такой ссылке: https://github.com/PacktPublishing/HashiCorp-Infrastructure-Automation-Certification-Guide/tree/master/chapter5.
Чтобы увидеть видео "Код в действии", перейдите по следующей ссылке: https://bit.ly/36re4es.
CLI Terraform является приложением командной строки с открытым исходным кодом, предоставляемое HashiCorp, которое позволяет вам выполнять
различные команды и подкоманды. Основными командами, которые охватывают все рабочие процессы Terraform являются init
,
plan
и apply
. После своих основных команд вы можете выполнять флаг
subcommands
. Чтобы просмотреть полный список поддерживаемых CLI Terraform команд, вы можете просто выполнить
terraform
из любого терминала и вы обнаружите следующий вывод:
$ terraform
Usage: terraform [global options] <subcommand> [args]
The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.
Main commands:
init Prepare your working directory for other commands
validate Check whether the configuration is valid
plan Show changes required by the current configuration
apply Create or update infrastructure
destroy Destroy previously-created infrastructure
All other commands:
console Try Terraform expressions at an interactive command prompt
fmt Reformat your configuration in the standard style
force-unlock Release a stuck lock on the current workspace
get Install or upgrade remote Terraform modules
graph Generate a Graphviz graph of the steps in an operation
import Associate existing infrastructure with a Terraform resource
login Obtain and save credentials for a remote host
logout Remove locally-stored credentials for a remote host
output Show output values from your root module
providers Show the providers required for this configuration
refresh Update the state to match remote systems
show Show the current state or a saved plan
state Advanced state management
taint Mark a resource instance as not fully functional
untaint Remove the 'tainted' state from a resource instance
version Show the current Terraform version
workspace Workspace management
Global options (use these before the subcommand, if any):
-chdir=DIR Switch to a different working directory before executing the
given subcommand.
-help Show this help output, or the help for a specified subcommand.
-version An alias for the "version" subcommand.
Если вы желаете увидеть поддерживаемые подчинённые команды команд, тогда вы можете получить их, добавляя флаг -h
к своей основной команде. Это откроет необходимое меню подсказки этой конкретной команды. Например, чтобы увидеть подкоманды для
graph
Terraform, выполните такую команду:
$ terraform graph -h
Usage: terraform graph [options] [DIR]
Outputs the visual execution graph of Terraform resources according to configuration files in DIR (or the current directory if omitted).
The graph is outputted in DOT format. The typical program that can read this format is GraphViz, but many web services are also available to read this format.
The -type flag can be used to control the type of graph shown. Terraform creates different graphs for different operations. See the options below for the list of types supported. The default type is "plan" if a configuration is given, and "apply" if a plan file is passed as an argument.
Options:
-draw-cycles Highlight any cycles in the graph with colored edges. This helps when diagnosing cycle errors.
-type=plan Type of graph to output. Can be: plan, plan-destroy, apply, validate, input, refresh.
-module-depth=n (deprecated) In prior versions of Terraform, specified the depth of modules to show in the output.
Предположим, вы выполняете команды Terraform применяя в качестве оболочки команд bash
или
zsh
и ищете вариант заполнения Tab
. В таком случае вы
можете установить такую особую функциональную возможность выполнив следующую команду:
$ terraform -install-autocomplete
Это окажет вам содействие в плане заполнения ваших команд или подчинённых команд всякий раз когда вы нажимаете клавишу
Tab
в своей оболочке команд.
Теперь мы разобрались с CLI Terraform и с тем как мы можем применять его для просмотра списка всех поддерживаемых им команд. Давайте теперь попробуем разобраться с тем, как мы можем выполнять аутентификацию CLI Terraform в Azure.
Поскольку вы теперь знакомы с CLI Terraform, двигаясь далее, мы намерены обсудить в этом разделе то, как можно выполнять интеграцию или
аутентификацию Terraform в Azure при помощи CLI Terraform. Для снабжения или обновления служб Azure при помощи CLI Terraform, важно чтобы ваша
версия CLI Terraform была бы способна общаться с Azure. В Главе 2, Руководство по установке
Terraform, мы уже обсуждали как вы можете устанавливать terraform.exe
в своей локальной машине.
Итак, давайте попробуем разобраться с тем, как CLI Terraform общается с Azure.
Вот методы, посредством которых вы можете выполнять аутентификацию CLI Terraform для Azure:
-
Аутентификация при помощи CLI Azure
-
Аутентификация при помощи Managed Service Identity (MSI, Управляемой тождественности службы)
-
Аутентификация при помощи Service Principal (Главной службы) и Сертификата клиента
-
Аутентификация при помощи Service Principal (Главной службы) и Секрета клиента
Все возможные варианты, относящиеся к аутентификации в Azure, достаточно сложно, поскольку их имеется великое множество. Поэтому, для изучения всех возможных вариантов аутентификации вы можете прочесть https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs.
Мы же сейчас намерены обсудить один из известных методов аутентификации: при помощи Главной службы и Секрета клиента.
![]() | Замечание |
---|---|
Убедитесь, пожалуйста, что вы обладаете допустимой подпиской Azure для выполнения любых служб развёртывания в Azure. Для целей обучения вы также можете открыть учётную запись бесплатного уровня. Для дополнительных сведений относительно подписи на подписки Azure вы можете посетить https://azure.microsoft.com/en-in/free/ . |
Для аутентификации CLI Terraform в Azure при помощи Главной службы и Секрета клиента, выполните такие шаги:
-
Зарегистрируйтесь в портале Azure по адресу http://portal.azure.com/, воспользовавшись вашими идентификатором и паролем Microsoft.
-
В своём портале Azure проследуйте в Active Directory (AD) и затем создайте новое прикладное приложение регистрации (Главную службу, Service Principal), как это показано на следующем снимке экрана:
-
Снабдите названием своё прикладное приложение регистрации. Мы выбрали
Terraform-Demo-SPN
, как вы это можете наблюдать на следующем снимке экрана:
-
Занесите значение Application (client) ID и значение Directory (tenant) ID Главной службы, как это проиллюстрировано на следующем снимке экрана:
-
Выработайте секрет Главной службы с любым названием. Мы выбрали
Terraform-Secret
, как вы можете наблюдать на следующем снимке экрана:
-
После добавления секрета Главной службы вы получите необходимое значение секрета, как это показано на снимке экрана ниже. Занесите это значение, потому как оно более не будет доступно позднее:
-
Предоставьте доступ
Contributor
либо на уровне подписки, группы ресурсов или уровне ресурсов, в зависимости от от того как вы хотите управлять следующими ролями identity and access management(IAM) Azure (https://docs.microsoft.com/en-gb/azure/role-based-access-control/built-in-roles). В нашем случае мы получили доступContributor
к уровню подписки, что вы можете наблюдать на снимке экрана ниже:
-
Поскольку мы получили полномочия Главной службы, имеется множество способов настройки этого. Мы намерены поместить
идентификатор клиента
,идентификатор арендатора
,идентификатор подписки
иСекрет клиента
Главной службы в поле Environment Variables своей локальной машины, что вы можете наблюдать на снимке экрана внизу. Вы можете обратиться ко блоку поставщика Azure Resource Manager (ARM, https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) за сведениями относительно всех поддерживаемых аргументов:Рисунок 5-7
Переменные средыВ нашем примере нам пришлось настроить переменные среды в локальной машине применяя user interface (UI), однако настоятельно рекомендуется применять любой CLI, например, PowerShell, для сохранения полномочий в переменных среды описываемом следующим образом:
$env:ARM_CLIENT_ID=". . ." $env:ARM_CLIENT_SECRET=". . ." $env:ARM_SUBSCRIPTION_ID=". . ." $env:ARM_TENANT_ID=". . ."
-
Теперь вы можете записать любой файл с названием, заканчивающемся на
.tf
, который бы содержал соответствующий файл конфигурации Terraform. Мы создали файлproviders.tf
и поместили в него следующий блок кода:terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "=2.55.0" } } } provider "azurerm" { features {} }
-
Теперь вы можете открыть любой CLI и запустить команду
terraform init
, которая создаст папку с названием.terraform
. Она будет содержать вложенную папку с названием подключаемого модуля и внутри которой будет некий поставщикazurerm
, которая будет обладать следующей структурой:. ├── .terraform │ ├── environment │ └── providers │ ├── registry.terraform.io │ │ └── hashicorp │ │ └── azurerm │ │ └── 2.55.0 │ │ └── windows_amd64 │ │ └── terraform-provider-azurerm_v2.55.0_x5.exe ├── .terraform.lock.hcl └── providers.tf 7 directories, 4 files
![]() | Замечание |
---|---|
Пожалуйста, не ссылайтесь на применённую выше в разделе аутентификации Azure Главную службу. |
Мы уже выполнили аутентификацию Terraform для Azure при помощи Главной службы. Давайте попробуем создать некие службы Azure при помощи
Terraform. Мы попробуем создать некую виртуальную машину
(ВМ) Azure при помощи кода Terraform. Следующий фрагмент кода содержит дерево блоков,
в котором мы поместили код для соответствующей ВМ с хранилищем (vault) ключей в файле main.tf
. В своём
файле variables.tf
мы определили все необходимые входные переменные и мы передаём все значения входных
переменных из файла terraform.tfvars
:
inmishrar@terraform-vm:~/code# tree
.
├── main.tf
├── providers.tf
├── terraform.tfvars
└── variables.tf
0 directories, 4 files
Вы можете получить полный блок кода внутри соответствующего файла main.tf
по ссылке на GitHub,
представленной в нашем разделе Технические требования. Вот некая выдержка из него:
resource "azurerm_resource_group" "rgname" {
name = var.rgname
location = var.location
tags = var.tags
}
resource "azurerm_virtual_network" "vnet" {
name = var.vnet_name
address_space = var.address_space
location = azurerm_resource_group.rgname.location
resource_group_name = azurerm_resource_group.rgname.name
tags = var.tags
}
resource "azurerm_subnet" "subnet" {
name = var.subnet_name
resource_group_name = azurerm_resource_group.rgname.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = [cidrsubnet(var.address_space[0], 8, 1)]
}
...
Весь блок кода внутри файла variables.tf
целиком вы можете получить по ссылке на GitHub,
представленной в нашем разделе Технические требования. Вы можете получить его непосредственно
оттуда, однако вот некая выдержка из него:
variable "rgname" {
type = string
description = "name of resource group"
}
variable "location" {
type = string
description = "location name"
}
variable "vnet_name" {
type = string
description = "vnet name"
}
...
Блок кода terraform.tfvars
выглядит следующим образом:
rgname = "Terraform-rg"
location = "West Europe"
tags = {
Environment = "prod"
Owner = "Azure-Terraform"
}
vm_size = "Standard_F2"
vm_name = "Terraform-vm"
admin_username = "azureterraform"
vm_publisher = "MicrosoftWindowsServer"
vm_offer = "WindowsServer"
vm_sku = "2016-Datacenter"
vm_version = "latest"
sku_name = "premium"
vnet_name = "Terraform-vnet"
address_space = ["10.1.0.0/16"]
subnet_name = "Terraform-subnet"
nic_name = "Terraform-nic"
keyvault_name = "Terraform-keyvault2342"
keyvault_secret_name = "Terraform-vm-password"
Когда вы исполните terraform init
, plan
и
apply
, это создаст затем необходимые службы Azure, как то показано на приводимом далее снимке экрана:
Мы выполнили управление ресурсами Azure при помощи Terraform. Таким образом, вы можете предоставлять в Microsoft Azure новые ресурсы, а
также обновлять ресурсы при помощи предоставляемого файла конфигурации Terraform, когда вы установили такие ресурсы в своём файле
tfstate
.
В данном разделе мы обсудили как вы можете выполнять аутентификацию Terraform в Azure, а затем мы обсудили как написать некий файл конфигурации
Terraform для оснастки ресурсов в Azure. При создании файла конфигурации мы упоминали как вы создаёте различные файлы, такие как
providers.tf
, main.tf
и
variables.tf
, а также пояснили как получать значения входных переменных при помощи
terraform.tfvars
.
В нашем следующем разделе мы обсудим процесс аутентификации Terraform для AWS и соответствующим образом попробуем предоставить некие ресурсы в AWS аналогично тому, как мы это делали в Azure.
Поскольку мы ранее обсудили как вы можете выполнять аутентификацию Terraforme в Azure, давайте теперь попробуем разобраться с тем, как вы можете выполнять аутентификацию Terraform для AWS. Вот те методы, которые позволяют Terraform получать аутентификацию в AWS:
-
Статические полномочия
-
Переменные среды
-
Совместно используемый файл полномочий/ конфигурации
-
Роли CodeBuild, Elastic Container Service (ECS) и Elastic Kubernetes Service (ECS)
-
Elastic Compute Cloud (EC2) Instance Metadata Service (IMDS) и IMDSv2
Для получения подробных сведений относительно того как вы можете выполнять аутентификацию Terraform для AWS, вы можете посетить https://registry.terraform.io/providers/hashicorp/aws/latest/docs. Обсуждение всех этих методов выходит за рамки данной книги, но мы, тем не менее, обсудим один из методов и покажем как вы можете предоставлять службы в AWS.
Для аутентификации при помощи доступа с ключом идентификатора и секретом выполните такие шаги:
-
Зарегистрируйтесь в своей консоли AWS через https://console.aws.amazon.com/ при помощи своего идентификатора регистрации и пароля
IAM/Root
. -
Проследуйте в My Security Credentials и создайте новый ключ доступа, как это показано на приводимом ниже снимке экрана:
-
Вы можете сохранить
AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
в своих переменных среды, выполнив в CLI Bash такие команды:$ export AWS_ACCESS_KEY_ID="AKIAIMQ4GX4XAJR7ZS2A" $ export AWS_SECRET_ACCESS_KEY="qQi4E0DQItP2utPE..."
Для настройки переменных среды в машине Windows вы можете воспользоваться справочными сведениями из нашего раздела Интеграция с Azure и следовать тем же самым подходом для установки
AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
.Вы можете создать файл конфигурации с любым названием, завершающимся на
.tf
. Для простоты мы назовём егоproviders.tf
и поместим в нём следующий блок кода:terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } } provider "aws" { region = var.aws_region }
-
Вы можете исполнить команду
terraform init
в любом CLI для выгрузки необходимого поставщика AWS и сохранить его в папке.terraform
, которую вы можете наблюдать в следующем фрагменте кода:inmishrar@terraform-vm:~/code# tree -a . ├── .terraform │ ├── environment │ └── providers │ ├── registry.terraform.io │ │ └── hashicorp │ │ └── aws │ │ └── 3.36.0 │ │ └── linux_amd64 │ │ └── terraform-provider-aws_v3.36.0_x5.exe ├──.terraform.lock.hcl └── providers.tf 7 directories, 4 files
Мы в конце концов управились с выгрузкой необходимого поставщика AWS и теперь можем предоставлять или обновлять службы AWS при помощи Terraform. Давайте попробуем разобраться как мы можем писать код конфигурации Terraform для своего поставщика AWS.
Вы уже выполнили управление аутентификацией Terraform к AWS, поэтому давайте посмотрим как мы можем предоставлять службы AWS при помощи Terraform. Нет никакой возможности объяснять все доступные службы AWS, поэтому мы рассмотрим очень простой пример создания виртуального частного облака (VPC, virtual private cloud). Если вы желаете изучить блок кода ресурсов Terraform для поставщика AWS, вы можете воспользоваться справочными сведениями в https://registry.terraform.io/providers/hashicorp/aws/latest/docs.
Следующий блок кода поможет вам с предоставлением VPC в AWS. Для оснастки некого VPC AWS мы создаём такие файлы и помещаем их в своём репозитории GitHub:
inmishrar@terraform-vm:~/code# tree
.
├── main.tf
├── providers.tf
├── terraform.tfvars
└── variables.tf
0 directories, 4 files
В своём файле main.tf
мы удерживаем такой блок кода:
resource "aws_vpc" "terraform_aws_vpc" {
cidr_block = var.cidr_block
instance_tenancy = "default"
tags = {
Name = "terraform_aws_vpc"
}
}
Аналогично, в файле variables.tf
мы храним такое определение кода:
variable "cidr_block" {
description = "provide VPC range"
}
variable "aws_region" {
description = "provide AWS region"
}
Входные значения для своих переменных мы получаем из terraform.tfvars
следующим образом:
cidr_block = "10.0.0.0/16"
aws_region = "ap-southeast-1"
Когда мы выполним команды terraform plan
и apply
, это
создаст некое новое VPC в AWS, как это показано на приводимом далее снимке экрана:
В конце концов, мы управились с созданием VPC AWS при помощи кода конфигурации Terraform. Допустим завтра вы пожелаете создать помимо этого VPC вы пожелаете создать дополнительные службы. Вам просто потребуется определить такой ресурс или блок кода модуля в своём файле конфигурации Terraform и Terraform снабдит такими конкретными службами или обновит их.
![]() | Замечание |
---|---|
Для интеграции AWS с Terraform вам надлежит воспользоваться учётной записью пользователя IAM вместо применения учётной записи root. Для получения дополнительных сведений относительно учётных записей IAM вы можете воспользоваться справочными сведениями с https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html. |
В данном разделе мы обсудили как вы можете выполнять аутентификацию Terraform в AWS и далее мы объяснили как писать файл конфигурации Terraform для снабжения службами AWS воспользовавшись образцом некого VPV AWS. В своём следующем разделе мы обсудим процесс аутентификации Terraform для GCP и, соответствующим образом, мы попытаемся создать в GCP некоторые службы.
Поскольку мы рассмотрели как мы выполняем аутентификацию Terraform в Azure и AWS, мы аналогично попробуем разобраться с тем как Terraform может аутентифицироваться для GCP.
Существует множество методов аутентификации Terraform в GCP, структурируемых так:
-
Аутентификация с применением CLI Sofware Development Kit (SDK) Google Cloud
-
Аутентификация при помощи учётной записи службы Google через сохранение полномочий в отдельном файле
-
Аутентификация при помощи учётной записи службы Google при помощи определения значение в соответствующих переменных среды
-
Аутентификация при помощи учётной записи службы Google посредством некого допустимого маркера (token)
Обсуждение всех вышеупомянутых методов это нечто вне пределов данной книги, а потому мы просто рассмотрим один метод аутентификации.
Для аутентификации некой учётной записи службы Google выполните следующие шаги:
-
Зарегистрируйтесь в Консоли Облачного решения Google из https://console.cloud.google.com/ применяя свои идентификатор регистрации и пароль.
-
Создайте проект с любым названием. Мы создали проект с названием
Terraform-project
. -
Создайте учётную запись службы перейдя в IAM и соответствующую страницу администрирования в своей Консоли Облачного решения Google, как это отображено на приводимом снимке экрана:
-
предоставьте роль
Editor
для учётной записи этой службы своего проекта с тем, чтобы она была способна выполнять операции чтения/ записи, как это иллюстрируется приводимым ниже снимком экрана:
-
После того как вы создали в GCP учётную запись службы, создайте ключ в формате JavaScript Object Notation (JSON), что отображает следующий снимок экрана:
Замечание Соответствующий файл учётной записи службы GCP содержит сведения полномочий, поэтому храните его в безопасности, поскольку он допускает доступ к службам GCP.
-
Вы можете создать файл
providers.tf
и определить в нём следующий блок кода:provider "google" { credentials = file("terraform-project-xxxx.json") project = "Terraform-project" region = "asia-south1" }
-
Вы можете исполнить команду
terraform init
, которая выгрузит необходимый подключаемый модуль поставщика Google в соответствующую папку.terraform
, что иллюстрируется следующим фрагментом кода:inmishrar@terraform-vm:~/code# tree -a . ├── .terraform │ ├── environment │ └── providers │ ├── registry.terraform.io │ │ └── hashicorp │ │ └── google │ │ └── 3.63.0 │ │ └── linux_amd64 │ │ └── terraform-provider-google_v3.63.0_x5.exe ├──.terraform.lock.hcl └── providers.tf 7 directories, 4 files
Применяя команду terraform init
, мы расправляемся с выгрузкой поставщика Google. Теперь мы готовы
начать снабжение службами Облачного решения Google или манипулирования ими с применением Terraform.
Мы уже выполнили аутентификацию Terraform для своей учётной записи GCP, поэтому давайте воспользуемся примером развёртывания службы механизма прикладных приложений Google внутри Облачного решения Google с применением Terraform. Следуя нашим рекомендациям, мы сохраняем следующий код в соответствующих файлах:
inmishrar@terraform-vm:~/code# tree
.
├── main.tf
├── providers.tf
├── terraform.tfvars
└── variables.tf
0 directories, 4 files
В файле main.tf
мы определяем такой код:
data "google_project" "terraform_project" {
project_id = var.project_id
}
resource "google_app_engine_application" "terraform_app" {
project = data.google_project.terraform_project.project_id
location_id = var.location_id
}
В файле variables.tf
представляется код:
variable "location_id"{
type = string
description = "provide location name"
}
variable "project_id"{
type = string
description = "provide Google Project ID"
}
В файле terraform.tfvars
мы удерживаем такой блок кода:
project_id = "terraform-project-56745"
location_id = "asia-south1"
Теперь, когда мы исполняем terraform plan
и применяем соответствующую команду в своём CLI, она
предоставляет службу механизма прикладных приложений в Облачном решении Google, что можно обнаружит на следующем снимке экрана:
В конце концов, мы управились с предоставлением службы приложений Механизма прикладных приложений Google при помощи кода Terraform. Итак, в будущем, когда вы планируете вносить изменения или добавлять новую инфраструктуру в Облачное решение Google, вы можете применять infrastructure as code (IaC) Terraform. В своём следующем разделе мы намерены изучить различные команды CLI Terraform и их применение.
CLI Terraform поддерживает большое число команд и в этом разделе мы попробуем рассмотреть некоторые из основных команд их соответствующий вывод. Мы обсудим рабочие процессы Terraform в своей следующей главе, Главе 6, Рабочие потоки Terraform, однако на данный момент мы обсудим некоторые из базовых команд CLI Terraform, вот они:
-
terraform console
: Вы исполняете эту команду в своём CLI для открытия консоли Terraform, в которой вы можете проверять или получать вывод своего кода определённых функций Terraform. Приводимый ниже пример демонстрирует вам применение этой команды:$ terraform console > max(5,10,-5) 10 >
-
terraform fmt
: Вы можете применять эту команду для перезаписи файлов конфигурации в канонические формат и стиль. Эта команда выполняет некоторый вид выравнивания с тем, чтобы ваш код конфигурации пребывал в читаемом формате и даже помогает вам вносить некоторые изменения для следования соглашениям стиля языка программирования Terraform. Для получения дополнительных сведений относительно соглашений стиля языка программирования Terraform вы можете обратиться к https://www.terraform.io/docs/configuration/style.html. Далее приводятся флаги подчинённых команд, поддерживаемые командойterraform fmt
:$ terraform fmt -h Usage: terraform fmt [options] [DIR] Rewrites all Terraform configuration files to a canonical format. Both configuration files (.tf) and variables files (.tfvars) are updated. JSON files (.tf.json or .tfvars.json) are not modified. If DIR is not specified then the current working directory will be used. If DIR is "-" then content will be read from STDIN. The given content must be in the Terraform language native syntax; JSON is not supported. Options: -list=false Don't list files whose formatting differs (always disabled if using STDIN) -write=false Don't write to source files (always disabled if using STDIN or -check) -diff Display diffs of formatting changes -check Check if the input is formatted. Exit status will be 0 if all input is properly formatted and non-zero otherwise. -no-color If specified, output won't contain any color. -recursive Also process files in subdirectories. By default, only the given directory (or current directory) is processed.
-
terraform graph
: Эта команда оказывает вам содействие при генерации визуального представления вашей конфигурации Terraform или плана выполнения. Вы можете ожидать вывод в формате DOT. Для выработки схем вы можете воспользоваться Graphviz. Это поможет вам обладать графом визуальной зависимости ресурсов Terraform как для самого заданного файла конфигурации в вашемDIR
(или в текущем каталоге). Вterraform graph
вы можете иметь следующие флаги подчинённых команд:$ terraform graph -h Usage: terraform graph [options] [DIR] Выводит визуальное представление графа выполнения ресурсов Terraform в соответствии с файлами конфигурации в DIR (или в вашем текущем каталоге, когда он опущен). Этот граф выводится в формате DOT. Обычной программой, способной считывать данный формат является GraphViz, однако для чтения данного формата доступно также большое число веб служб. Флаг -type может применяться для управления значением типа отображаемого графа. Terraform создаёт разные графы для различных операций. Относительно поддерживаемых типов обратитесь к приводимым далее вариантам. В случае определённой конфигурации типом по умолчанию является "plan" и "apply" когда в качестве параметра передаётся некий план. Options: -draw-cycles Выделяет все циклы в приводимом графе цветными гранями. Это помогает выявлять ошибки зацикливания. -type=plan Тип выводимого графа. Может быть: plan, plan-destroy, apply, validate, input, refresh.
Поскольку вы знаете что вывод графа Terraform предоставляется в формате DOT, вы запросто можете преобразовать его в некое изображение воспользовавшись командой
dot
:, предоставляемой Graphviz, что иллюстрирует следующая схема:$ terraform grapf | dot -Tsvg > graph.svg
На Рисунке 5-15 вы можете видеть все специфичные для Облачного решения AWS ресурсы, а из самого этого графика вы можете понять как Terraform способен разбираться автоматически с неявными зависимостями. В своей идущей далее Главе 7, Модули Terraform мы обсудим
depends_on
для определения зависимости в явном виде. -
terraform output
: Эта команда выдаёт такой вывод:10.1.1.4
Чтобы разобраться с тем как работает приведённая команда, отсылаем вас к подробностям на https://www.terraform.io/docs/commands/output.html.
-
terraform refresh
: Эта команда помогает вам обновлять файл состояния Terraform, сопоставляя его с инфраструктурой в реальном мире. Она не вносит изменения в вашу инфраструктуру непосредственно, однако вашу инфраструктуру могут ожидать изменения если послеterraform refresh
вы выполните командыterraform plan
иapply
. Эта команда также способствует выявлять имеются ли где- то отклонения от последнего известного состояния и обновлений вашего файла состояния, соответственно. Для лучшего понимания этой команды воспользуйтесь справочными сведениями по следующей ссылке: https://www.terraform.io/docs/commands/refresh.html. -
terraform show
: Данная команда поможет вам увидеть вывод самого CLI из своего файла состояния и он будет представлен в читаемом персоналом формате. Когда вы ищете конкретные сведения в своём файле состояния, вы можете воспользоваться этой командой. -
terraform taint
: применяя данную команду, вы можете отмечать определённые ресурсы на их разрушение или повторное создание. Во множестве случаев, когда вы сталкиваетесь с неким видом ошибки развёртывания, эта команда может оказаться очень полезной. Данная команда не изменяет вашу инфраструктуру, а всего лишь вносит изменения в имеющийся файл состояния, что означает, что если вы намерены выполнитьterraform apply
, она разрушит конкретный помеченный испорченным (tainted) ресурс и повторно создаст его. Давайте рассмотрим как мы можем испортить определённый ресурс следующим образом:$ terraform taint aws_security_group.rdp_allow
Ваш ресурс
aws_security_group.rdp_allow
был помечен как испорченный, поэтому этот конкретный ресурс будет разрушен и повторно создан после выполнения намиterraform apply
.Вы можете дополнительно ознакомиться с командой
terraform taint
в https://www.terraform.io/docs/commands/taint.html. -
terraform workspace
: Terraform поддерживает команду с названиемworkspace
, которая помогает вам создавать множество ландшафтов. Допустим, вы хотите применять ту же же самую конфигурацию во множестве ландшафтов. В таком случае мы можем воспользоваться этой командойworkspace
. Например, когда у вас имеются три среды, такие как dev, test, и production, тогда применяя такую командуworkspace
, вы можете создать подобные виртуальные среды для справки Terraform и Terraform будет надлежащим образом сопровождать свой файл состояния и подключаемые модули для соответствующей среды. Для дополнительных сведений относительноterraform workspace
, обращайтесь к https://www.terraform.io/docs/state/workspaces.html и https://www.terraform.io/docs/commands/workspace/index.html. -
terraform force-unlock
: Предположим, что ваш файл состояния заблокирован неким иным пользователем в предоставляемой удалённой серверной основе. В таком случае вы можете воспользоватьсяterraform force-unlock LOCK_ID[DIR]
. Данная команда поможет вам разблокировать ваш файл состояния. Это имеет место только когда вы сохраняете свой файл состояния в некой удалённой серверной основе; когда вы удерживаете свой файл состояния в локальной машине, он не может быть разблокирован никаким иным процессом. Ещё один момент: эта команда не вносит никакие изменения в вашей среде. Давайте попробуем разобраться с этим на следующем примере, в котором ваш файл состояния заблокирован одним из имеющихся пользователей:ID: f20d9093-5116-53c5-4037-ab2e8cb8f77d Path: terraform Operation: OperationTypeApply Who: inmishrar1@tv-az29-815 Version: 1.0.0 Created: 2021-07-01 08:28:44.546798004 +0000 UTC Info:
Когда файл состояния блокируется, если вы попытаетесь выполнить какую- то команду Terraform, вам не будет дозволено выполнять такую команду пока вы не разблокируете соответствующий файл состояния. Для выполнения разблокирования файла состояния вам необходимо исполнить такие команды:
terraform force-unlock f20d9093-5116-53c5-4037-ab2e8cb8f77d
-
terraform validate
: Когда в вашем файле конфигурации имеется некая ошибка, воспользовавшись командойterraform validate
, вы можете получить подробные сведения относительно такой ошибки. Эту команду нет нужды исполнять индивидуально, поскольку когда вы выполняете командыterraform plan
apply
, Terraform автоматически выполняет в своей основе командуterraform validate
для проверки на предмет ошибок любого вида внутри вашего блока кода конфигурации. -
terraform import
: Если вы желаете импортировать некие уже имеющиеся ресурсы или службы в свой файл состояния Terraform, вы можете выполнить это через ссылку на значение идентификатора такого конкретного ресурса. Давайте попробуем разобраться как вы можете импортировать некий ресурс в свой файл состояния при помощи такого примера:$ terraform import aws_instance.abc i-acdf10234
В своей определённой выше команде мы предпринимаем попытку импорта уже имеющегося экземпляра AWS с названием
abc
в свой файл ресурса, который обладает идентификатором ресурсаi-acdf10234
.
Мы изучили различные поддерживаемые CLI Terraform команды. Для получения дополнительных подробностей обо всех поддерживаемых CLI Terraform командах вы можете посетить https://www.terraform.io/docs/commands/index.html
По завершению данной главы вы овладели пониманием CLI Terraform. Мы также обсудили как вы можете осуществлять аутентификацию Terraform в Azure, AWS и GCP. Двигаясь далее, мы также поясняли различные команды и подчинённые команды Terraform, поддерживаемые CLI Terraform. После прочтения этой главы целиком, вы должны быть способны применять CLI Terraform для основных поставщиков облачных решений, таких как AWS, Azure и GCP, что поможет вам предоставлять и обновлять ресурсы таких поставщиков облачных решений.
В своей следующей главе мы обсудим рабочие процессы Terraform, где мы сосредоточимся на основных командах CLI Terraform, то есть
init
, plan
, apply
и
destroy
.
Ответы на данные вопросы можно обнаружить в разделе Аттестация в самом конце этой книги:
-
Какую из следующих подчинённых команд вы можете применять для разблокирования файла состояния Terraform?
-
Unlock
-
force-unlock
-
Удаление блокировки с файла состояния невозможно
-
state-unlock
-
-
Какая команда Terraform принудит к уничтожению и последующему созданию помеченного ресурса после следующего
apply
?-
terraform destroy
-
terraform refresh
-
terraform taint
-
terraform fmt
-
-
Что именно выполняет команда
terraform fmt
?-
Удаляет имеющийся файл конфигурации
-
Перезаписывает файлы конфигурации Terraform в канонические формат и стиль
-
Обновляет значение шрифта имеющегося файла конфигурации на официальный шрифт, поддерживаемый HashiCorp
-
Форматирует свой файл состояния для обеспечения самого последнего состояния ресурсов, которое можно получить
-
-
Персона A создала одну виртуальную сеть Azure в Облачном ресурсе Azure при помощи некого шаблона ARM. Теперь вы хотите обновить эту виртуальную сеть при помощи Terraform. Какую команду вы бы выполнили чтобы привнести конфигурации виртуальной сети Azure в свой файл состояния Terraform?
-
terraform import
-
terraform fmt
-
terraform output
-
terraform show
-
-
Какая команда Terraform выполнит проверку внутри модулей, названий атрибутов и типов значений и выдаст отчёт об ошибках на предмет их синтаксической допустимости и внутренней согласованности?
-
terraform validate
-
terraform show
-
terraform format
-
terraform fmt
-
Для получения дополнительных сведений по рассматривавшимся в этой главе темам вы можете обратиться к следующим ссылкам: