Даҳорҳои терраформ

Даҳорҳои терраформ
Биёед якчанд хатогиҳоро, аз ҷумла онҳое, ки бо ҳалқаҳо алоқаманданд, агар изҳорот ва усулҳои ҷойгиркунӣ, инчунин масъалаҳои умумии бештаре, ки ба Terraform таъсир мерасонанд, қайд кунем:

  • count ва for_each параметрҳо маҳдудият доранд;
  • маҳдуд кардани ҷойгиркунии вақти бекорӣ;
  • ҳатто нақшаи хуб метавонад ноком шавад;
  • рефакторинг метавонад домҳои худро дошта бошад;
  • ҳамоҳангии таъхиршуда мувофиқ аст... бо таъхир.

Параметрҳои count ва for_each маҳдудият доранд

Намунаҳои ин боб параметри count ва ифодаи for_eachро дар давраҳо ва мантиқи шартӣ васеъ истифода мебаранд. Онҳо хуб кор мекунанд, аммо онҳо ду маҳдудияти муҳим доранд, ки шумо бояд аз онҳо огоҳ бошед.

  • Ҳисоб ва for_each наметавонанд ба ягон тағирёбандаҳои баромади манбаъ муроҷиат кунанд.
  • count ва for_each наметавонанд дар конфигуратсияи модул истифода шаванд.

count ва for_each наметавонанд ба ягон тағирёбандаи баромади манбаҳо муроҷиат кунанд

Тасаввур кунед, ки шумо бояд якчанд серверҳои EC2-ро ҷойгир кунед ва бо баъзе сабабҳо шумо намехоҳед ASG-ро истифода баред. Рамзи шумо метавонад чунин бошад:

resource "aws_instance" "example_1" {
   count             = 3
   ami                = "ami-0c55b159cbfafe1f0"
   instance_type = "t2.micro"
}

Биёед онҳоро як ба як дида бароем.

Азбаски параметри ҳисоб ба арзиши статикӣ муқаррар карда шудааст, ин код бе мушкилот кор мекунад: вақте ки шумо фармони татбиқро иҷро мекунед, он се сервери EC2 эҷод мекунад. Аммо чӣ мешавад, агар шумо хоҳед, ки як серверро дар ҳар як минтақаи дастрас (AZ) дар минтақаи ҳозираи AWS-и худ ҷойгир кунед? Шумо метавонед коди худро бигузоред, ки рӯйхати минтақаҳоро аз манбаи маълумоти aws_availability_zones бор кунед ва сипас тавассути ҳар яки онҳо давр занед ва дар он бо истифода аз параметри ҳисоб ва дастрасии индекси массив сервери EC2 эҷод кунед:

resource "aws_instance" "example_2" {
   count                   = length(data.aws_availability_zones.all.names)
   availability_zone   = data.aws_availability_zones.all.names[count.index]
   ami                     = "ami-0c55b159cbfafe1f0"
   instance_type       = "t2.micro"
}

data "aws_availability_zones" "all" {}

Ин код низ хуб кор хоҳад кард, зеро параметри ҳисоб метавонад бидуни мушкилот ба манбаъҳои маълумот муроҷиат кунад. Аммо чӣ мешавад, агар шумораи серверҳое, ки шумо бояд эҷод кунед, аз баромади баъзе захираҳо вобаста аст? Барои нишон додани ин, роҳи осонтарини истифодаи манбаи random_integer аст, ки тавре аз номаш бармеояд, адади тасодуфиро бармегардонад:

resource "random_integer" "num_instances" {
  min = 1
  max = 3
}

Ин код рақами тасодуфиро байни 1 ва 3 тавлид мекунад. Биёед бубинем, ки агар мо кӯшиш кунем, ки натиҷаи ин манбаъро дар параметри count-и манбаи aws_instance истифода барем, чӣ мешавад:

resource "aws_instance" "example_3" {
   count             = random_integer.num_instances.result
   ami                = "ami-0c55b159cbfafe1f0"
   instance_type = "t2.micro"
}

Агар шумо нақшаи terraform-ро дар ин код иҷро кунед, шумо хатои зеринро мегиред:

Error: Invalid count argument

   on main.tf line 30, in resource "aws_instance" "example_3":
   30: count = random_integer.num_instances.result

The "count" value depends on resource attributes that cannot be determined until apply, so Terraform cannot predict how many instances will be created. To work around this, use the -target argument to first apply only the resources that the count depends on.

Terraform талаб мекунад, ки ҳисоб ва for_each дар марҳилаи банақшагирӣ пеш аз эҷод ё тағир додани ҳама гуна захираҳо ҳисоб карда шаванд. Ин маънои онро дорад, ки count ва for_each метавонанд ба литералҳо, тағирёбандаҳо, манбаъҳои додаҳо ва ҳатто рӯйхатҳои захираҳо (то даме ки дарозии онҳо дар вақти банақшагирӣ муайян карда шавад) ишора мекунанд, аммо на ба тағирёбандаҳои баромади ҳисобшудаи захираҳо.

count ва for_each наметавонанд дар конфигуратсияи модул истифода шаванд

Рӯзе шумо шояд васвасаи илова кардани параметри ҳисобро ба конфигуратсияи модули худ пайдо кунед:

module "count_example" {
     source = "../../../../modules/services/webserver-cluster"

     count = 3

     cluster_name = "terraform-up-and-running-example"
     server_port = 8080
     instance_type = "t2.micro"
}

Ин код кӯшиш мекунад, ки ҳисобро дар дохили модул истифода барад, то се нусхаи манбаи веб-сервер-кластер эҷод кунад. Ё шумо метавонед пайваст кардани модулро дар асоси баъзе шартҳои мантиқӣ бо гузоштани параметри ҳисобаш ба 0 ихтиёрӣ гардонед. Ин метавонад ба рамзи оқилона монанд бошад, аммо ҳангоми иҷро кардани нақшаи terraform шумо ин хаторо пайдо мекунед:

Error: Reserved argument name in module block

   on main.tf line 13, in module "count_example":
   13: count = 3

The name "count" is reserved for use in a future version of Terraform.

Мутаассифона, аз Terraform 0.12.6, истифодаи count ё for_each дар манбаи модул дастгирӣ намешавад. Тибқи ёддоштҳои нашри Terraform 0.12 (http://bit.ly/3257bv4), HashiCorp нақша дорад, ки ин қобилиятро дар оянда илова кунад, аз ин рӯ вобаста ба кай хондани ин китоб, он метавонад аллакай дастрас бошад. Барои аниқ фаҳмидан, тағиротҳои Terraform дар ин ҷо хонед.

Маҳдудиятҳои ҷобаҷогузории сифр

Истифодаи блоки create_before_destroy дар якҷоягӣ бо ASG як роҳи олиҷаноб барои эҷоди истиқрори бефаъолият аст, ба истиснои як огоҳӣ: қоидаҳои автоматии миқёс дастгирӣ карда намешаванд. Ё аниқтараш, ин андозаи ASG-ро дар ҳар як ҷойгиркунӣ ба min_size бармегардонад, ки агар шумо қоидаҳои автоматии миқёсро барои зиёд кардани шумораи серверҳои коркунанда истифода мебурдед, мушкилие ба бор меорад.

Масалан, модули вебсервер-кластер як ҷуфт захираҳои aws_autoscaling_schedule дорад, ки соати 9-и субҳ шумораи серверҳоро дар кластер аз ду то даҳ зиёд мекунад. Агар шумо, масалан, соати 11-и саҳар ҷойгир кунед, ASG-и нав танҳо бо ду сервер ба ҷои даҳ кор мекунад ва то соати 9-и субҳи рӯзи дигар ҳамин тавр боқӣ мемонад.

Ин маҳдудиятро бо чанд роҳ бартараф кардан мумкин аст.

  • Параметри такрориро дар aws_autoscaling_schedule аз 0 9 * * * (“дар соати 9 саҳар иҷро кардан”) ба 0-59 9-17 * * * тағир диҳед (“ҳар дақиқа аз соати 9 то 5:XNUMX давидан”). Агар ASG аллакай даҳ сервер дошта бошад, дубора иҷро кардани ин қоидаи автоматӣ ҳеҷ чизро тағир намедиҳад, ки мо мехоҳем. Аммо агар ASG танҳо ба наздикӣ ҷойгир карда шуда бошад, ин қоида кафолат медиҳад, ки дар ҳадди аксар дар як дақиқа шумораи серверҳои он ба даҳ нафар мерасад. Ин як равиши комилан шево нест ва ҷаҳиши калон аз даҳ то ду сервер ва бозгашт метавонад барои корбарон мушкилот эҷод кунад.
  • Скрипти фармоишӣ эҷод кунед, ки AWS API-ро барои муайян кардани шумораи серверҳои фаъол дар ASG истифода мебарад, онро бо истифода аз манбаи додаҳои беруна даъват кунед (ниг. "Манбаи додаҳои беруна" дар саҳифаи 249) ва параметри дилхоҳи_иқтидори ASG-ро ба арзиши баргардонидашуда таъин кунед. скрипт. Ҳамин тариқ, ҳар як намунаи нави ASG ҳамеша бо ҳамон иқтидор бо рамзи мавҷудаи Terraform кор мекунад ва нигоҳдории онро мушкилтар мекунад.

Албатта, Terraform ба таври идеалӣ дастгирии дарунсохт барои ҷойгиркунии вақти сифрӣ дошта бошад, аммо то моҳи майи соли 2019, дастаи HashiCorp нақшаи илова кардани ин функсияро надошт (тафсилот - ин ҷо).

Нақшаи дуруст метавонад бомуваффақият амалӣ карда шавад

Баъзан фармони нақша нақшаи ҷойгиркунии комилан дурустро истеҳсол мекунад, аммо фармони татбиқ хаторо бармегардонад. Масалан, кӯшиш кунед, ки манбаи aws_iam_user-ро бо ҳамон номе, ки шумо барои корбари IAM, ки қаблан дар боби 2 сохта будед, илова кунед:

resource "aws_iam_user" "existing_user" {
   # Подставьте сюда имя уже существующего пользователя IAM,
   # чтобы попрактиковаться в использовании команды terraform import
   name = "yevgeniy.brikman"
}

Ҳоло, агар шумо фармони нақшаро иҷро кунед, Terraform нақшаи ба назар оқилонаи ҷойгиркуниро мебарорад:

Terraform will perform the following actions:

   # aws_iam_user.existing_user will be created
   + resource "aws_iam_user" "existing_user" {
         + arn                  = (known after apply)
         + force_destroy   = false
         + id                    = (known after apply)
         + name               = "yevgeniy.brikman"
         + path                 = "/"
         + unique_id         = (known after apply)
      }

Plan: 1 to add, 0 to change, 0 to destroy.

Агар шумо фармони татбиқро иҷро кунед, шумо хатои зеринро мегиред:

Error: Error creating IAM User yevgeniy.brikman: EntityAlreadyExists:
User with name yevgeniy.brikman already exists.

   on main.tf line 10, in resource "aws_iam_user" "existing_user":
   10: resource "aws_iam_user" "existing_user" {

Мушкилот, албатта, дар он аст, ки корбари IAM бо ин ном аллакай вуҷуд дорад. Ва ин метавонад на танҳо бо корбарони IAM, балки қариб ба ҳама гуна манбаъҳо рӯй диҳад. Мумкин аст, ки касе ин захираро дастӣ ё бо истифода аз сатри фармон эҷод кунад, аммо дар ҳар сурат, мувофиқати ID-ҳо боиси ихтилофот мегардад. Вариантҳои зиёди ин хато вуҷуд доранд, ки аксар вақт навкоронро ба Terraform ба ҳайрат меорад.

Нуқтаи асосӣ дар он аст, ки фармони нақшаи terraform танҳо он захираҳоеро, ки дар файли давлатии Terraform нишон дода шудаанд, ба назар мегирад. Агар захираҳо бо ягон роҳи дигар сохта шаванд (масалан, ба таври дастӣ бо клик дар консоли AWS), онҳо дар файли давлатӣ ҷамъ намешаванд ва аз ин рӯ Terraform ҳангоми иҷрои фармони нақша онҳоро ба назар намегирад. Дар натича плане, ки дар назари аввал дуруст ба назар мерасад, бебарор мегардад.

Аз ин ду сабақ гирифтан лозим аст.

  • Агар шумо аллакай кор бо Terraform оғоз карда бошед, дигар чизеро истифода набаред. Агар як қисми инфрасохтори шумо бо истифода аз Terraform идора карда шавад, шумо дигар онро дастӣ тағир дода наметавонед. Дар акси ҳол, шумо на танҳо хатари хатогиҳои аҷиби Terraform доред, балки шумо инчунин бисёре аз бартариҳои IaC-ро рад мекунед, зеро код дигар муаррифии дақиқи инфрасохтори шумо нахоҳад буд.
  • Агар шумо аллакай инфрасохтор дошта бошед, фармони воридотро истифода баред. Агар шумо ба истифодаи Terraform бо инфрасохтори мавҷуда шурӯъ кунед, шумо метавонед онро бо истифода аз фармони воридоти terraform ба файли давлатӣ илова кунед. Бо ин роҳ Terraform медонад, ки кадом инфрасохторро идора кардан лозим аст. Фармони воридот ду далелро мегирад. Якум суроғаи захира дар файлҳои конфигуратсияи шумост. Синтаксиси ин ҷо ҳамон тавре ки барои истинодҳои манбаъҳост: _. (монанди aws_iam_user.existing_user). Далели дуюм ID-и манбаи воридшаванда мебошад. Фарз мекунем, ки ID-и манбаи aws_iam_user номи корбар аст (масалан, yevgeniy.brikman) ва ID-и манбаъ aws_instance ID-и сервери EC2 аст (ба мисли i-190e22e5). Чӣ тавр ворид кардани манбаъ одатан дар ҳуҷҷатҳо дар поёни саҳифаи он нишон дода мешавад.

    Дар зер фармони воридотӣ мавҷуд аст, ки манбаи aws_iam_user-ро, ки шумо ба конфигуратсияи Terraform-и худ ҳамроҳ бо корбари IAM дар боби 2 илова кардаед, ҳамоҳанг мекунад (албатта номи худро ба yevgeniy.brikman иваз мекунад):

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    Terraform ба AWS API занг мезанад, то корбари IAM-и шуморо пайдо кунад ва дар конфигуратсияи Terraform-и шумо ассотсиатсияи файли давлатӣ байни он ва манбаи aws_iam_user.existing_user эҷод кунад. Минбаъд, вақте ки шумо фармони нақшаро иҷро мекунед, Terraform медонад, ки корбари IAM аллакай вуҷуд дорад ва кӯшиш намекунад, ки онро дубора эҷод кунад.

    Қобили зикр аст, ки агар шумо аллакай захираҳои зиёде дошта бошед, ки мехоҳед ба Terraform ворид кунед, ба таври дастӣ навиштани рамз ва ворид кардани ҳар яке аз онҳо як вақт метавонад душвор бошад. Аз ин рӯ, зарур аст, ки асбоберо ба мисли Terraforming (http://terraforming.dtan4.net/) ҷустуҷӯ кунед, ки метавонад ба таври худкор код ва давлатро аз ҳисоби AWS-и шумо ворид кунад.

    Рефакторинг метавонад домҳои худро дошта бошад

    Рефакторинг як таҷрибаи маъмул дар барномасозӣ аст, ки дар он шумо сохтори дохилии кодро тағир медиҳед ва рафтори беруниро бетағйир мегузоред. Ин барои равшантар, тозатар ва осонтар нигоҳ доштани код аст. Рефакторинг як усули ҳатмист, ки бояд мунтазам истифода шавад. Аммо вақте ки сухан дар бораи Terraform ё ягон асбоби дигари IaC меравад, шумо бояд хеле эҳтиёткор бошед, ки шумо аз "рафтори беруна" -и код чӣ дар назар доред, вагарна мушкилоти ғайричашмдошт ба миён меоянд.

    Масалан, як намуди маъмули рефакторинг иваз кардани номҳои тағирёбанда ё функсияҳо бо номҳои фаҳмотар аст. Бисёре аз IDE-ҳо барои рефакторинг пуштибонии дохилӣ доранд ва метавонанд ба таври худкор тағирёбандаҳо ва функсияҳоро дар тамоми лоиҳа тағир диҳанд. Дар забонҳои барномасозии таъиноти умумӣ, ин як тартиби ночиз аст, ки шумо шояд дар бораи он фикр накунед, аммо дар Terraform шумо бояд бо ин хеле эҳтиёткор бошед, вагарна шумо метавонед қатъро эҳсос кунед.

    Масалан, модули вебсервер-кластер дорои тағирёбандаи вуруди cluster_name:

    variable "cluster_name" {
       description = "The name to use for all the cluster resources"
       type          = string
    }

    Тасаввур кунед, ки шумо ин модулро барои ҷойгиркунии микросервис бо номи foo оғоз кардед. Баъдтар, шумо мехоҳед хидмати худро ба бар иваз кунед. Ин тағирот метавонад ночиз ба назар расад, аммо дар асл он метавонад боиси халалдор шудани хидмат гардад.

    Далели он аст, ки модули вебсервер-кластер тағирёбандаи cluster_name-ро дар як қатор захираҳо, аз ҷумла параметри номи ду гурӯҳи амниятӣ ва ALB истифода мебарад:

    resource "aws_lb" "example" {
       name                    = var.cluster_name
       load_balancer_type = "application"
       subnets = data.aws_subnet_ids.default.ids
       security_groups      = [aws_security_group.alb.id]
    }

    Агар шумо параметри номро дар захира тағир диҳед, Terraform версияи кӯҳнаи он манбаро нест мекунад ва дар ҷои он версияи нав эҷод мекунад. Аммо агар ин манбаъ ALB бошад, байни нест кардани он ва зеркашии версияи нав, шумо механизми интиқоли трафик ба сервери веби худро надоред. Ба ҳамин монанд, агар гурӯҳи амниятӣ нест карда шавад, серверҳои шумо то таъсиси гурӯҳи нав ҳама гуна трафики шабакаро рад мекунанд.

    Навъи дигари рефакторинг, ки шумо шояд ба он таваҷҷӯҳ дошта бошед, ин тағир додани ID Terraform аст. Биёед манбаи aws_security_group-ро дар модули webserver-cluster ҳамчун мисол гирем:

    resource "aws_security_group" "instance" {
      # (...)
    }

    Идентификатори ин манбаъ инстансия номида мешавад. Тасаввур кунед, ки ҳангоми рефакторинг шумо қарор додед, ки онро ба номи фаҳмотар (ба фикри шумо) cluster_instance иваз кунед:

    resource "aws_security_group" "cluster_instance" {
       # (...)
    }

    Дар охир чй мешавад? Ин дуруст аст: халалдоршавӣ.

    Terraform ҳар як ID-и манбаъро бо ID провайдери абр пайваст мекунад. Масалан, iam_user бо ID корбари AWS IAM ва aws_instance бо ID сервери AWS EC2 алоқаманд аст. Агар шумо ID-и манбаъро иваз кунед (бигӯед, ки аз мисол ба cluster_instance, чунон ки дар aws_security_group аст), ба Terraform он гӯё пайдо мешавад, ки шумо манбаи кӯҳнаро нест кардаед ва манбаи навро илова кардаед. Агар шумо ин тағиротҳоро татбиқ кунед, Terraform гурӯҳи бехатарии кӯҳнаро нест мекунад ва як гурӯҳи нав эҷод мекунад, дар ҳоле ки серверҳои шумо ҳама гуна трафики шабакаро рад мекунанд.

    Инҳоянд чаҳор дарси калидӣ, ки шумо бояд аз ин муҳокима дур шавед.

    • Ҳамеша фармони нақшаро истифода баред. Он метавонад ҳамаи ин нуқсонҳоро ошкор кунад. Натиҷаи онро бодиққат аз назар гузаронед ва ба ҳолатҳое диққат диҳед, ки Terraform захираҳоро нест кардани захираҳоеро, ки эҳтимолан набояд нест карда шаванд, ба нақша гирифтааст.
    • Пеш аз нест кардан эҷод кунед. Агар шумо хоҳед, ки манбаро иваз кунед, бодиққат фикр кунед, ки оё шумо бояд пеш аз нест кардани нусхаи аслӣ иваз кунед. Агар ҷавоб ҳа бошад, create_before_destroy метавонад кӯмак кунад. Ҳамин натиҷаро тавассути иҷрои ду қадам ба таври дастӣ ба даст овардан мумкин аст: аввал ба конфигуратсия захираи нав илова кунед ва фармони татбиқро иҷро кунед ва сипас захираи кӯҳнаро аз конфигуратсия хориҷ кунед ва фармони татбиқро дубора истифода баред.
    • Тағир додани идентификаторҳо тағир додани ҳолатро талаб мекунад. Агар шумо хоҳед, ки ID-и бо захира алоқамандро тағир диҳед (масалан, номи aws_security_group-ро аз мисол ба cluster_instance иваз кунед) бе нест кардани манбаъ ва эҷоди версияи нави он, шумо бояд файли ҳолати Terraform-ро мувофиқи он навсозӣ кунед. Ҳеҷ гоҳ ин корро дастӣ накунед - ба ҷои фармони ҳолати terraform -ро истифода баред. Ҳангоми иваз кардани номи идентификаторҳо, шумо бояд фармони terraform state mv-ро иҷро кунед, ки синтаксиси зерин дорад:
      terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>

      ORIGINAL_REFERENCE ифодаест, ки ба манбаъ дар шакли ҷории худ ишора мекунад ва NEW_REFERENCE ҷоест, ки шумо онро интиқол додан мехоҳед. Масалан, ҳангоми иваз кардани номи гурӯҳи aws_security_group аз мисол ба cluster_instance, шумо бояд фармони зеринро иҷро кунед:

      $ terraform state mv 
         aws_security_group.instance 
         aws_security_group.cluster_instance

      Ин ба Terraform мегӯяд, ки давлате, ки қаблан бо aws_security_group.instance алоқаманд буд, акнун бояд бо aws_security_group.cluster_instance алоқаманд бошад. Агар пас аз иваз кардани ном ва иҷро кардани ин фармон нақшаи terraform ягон тағиротро нишон надиҳад, шумо ҳама чизро дуруст кардед.

    • Баъзе танзимотҳоро тағир додан мумкин нест. Параметрхои бисьёр захирахо тагйирнопазиранд. Агар шумо кӯшиш кунед, ки онҳоро тағир диҳед, Terraform манбаи кӯҳнаро нест мекунад ва дар ҷои он захираи нав эҷод мекунад. Ҳар як саҳифаи манбаъ одатан нишон медиҳад, ки ҳангоми тағир додани танзимоти мушаххас чӣ ҳодиса рӯй медиҳад, бинобар ин, ҳуҷҷатҳоро тафтиш кунед. Ҳамеша фармони нақшаро истифода баред ва истифодаи стратегияи create_before_destroyро баррасӣ кунед.

    Мутобиқати ба таъхир гузошташуда мувофиқ аст... бо таъхир

    Баъзе API-ҳои провайдерҳои абрӣ, ба монанди AWS, асинхронӣ мебошанд ва мувофиқати таъхирро доранд. Асинхронӣ маънои онро дорад, ки интерфейс метавонад фавран ҷавобро бидуни интизории анҷоми амали дархостшуда баргардонад. Мутобиқати таъхирнопазир маънои онро дорад, ки тағирот метавонад дар тамоми система паҳн шавад; дар ҳоле ки ин рӯй медиҳад, ҷавобҳои шумо метавонанд номувофиқ бошанд ва аз он вобаста бошанд, ки репликаи манбаи маълумот ба зангҳои API-и шумо ҷавоб медиҳад.

    Масалан, тасаввур кунед, ки шумо занги API ба AWS мекунед, ки аз он сервери EC2 эҷод кунад. API посухи "бомуваффақият" (201 Сохта) -ро қариб фавран, бидуни мунтазири эҷоди худи сервер бармегардонад. Агар шумо кӯшиш кунед, ки фавран ба он пайваст шавед, он бешубҳа ноком хоҳад шуд, зеро дар он лаҳза AWS захираҳоро оғоз карда истодааст ё ба таври дигар, сервер ҳанӯз пурбор нашудааст. Ғайр аз он, агар шумо барои гирифтани маълумот дар бораи ин сервер занги дигар кунед, шумо метавонед хатогие (404 ёфт нашуд) пайдо кунед. Гап дар он аст, ки маълумот дар бораи ин сервери EC2 то ҳол дар тамоми AWS паҳн карда мешавад, то он ки он дар ҳама ҷо дастрас шавад, шумо бояд чанд сония интизор шавед.

    Ҳар вақте, ки шумо API-и асинхронӣ бо мувофиқати танбалиро истифода мебаред, шумо бояд давра ба давра дархости худро то анҷоми амал ва паҳн кардани система такрор кунед. Мутаассифона, AWS SDK ягон асбоби хуберо барои ин таъмин намекунад ва лоиҳаи Terraform аз хатогиҳои зиёде мисли 6813 азоб мекашид (https://github.com/hashicorp/terraform/issues/6813):

    $ terraform apply
    aws_subnet.private-persistence.2: InvalidSubnetID.NotFound:
    The subnet ID 'subnet-xxxxxxx' does not exist

    Ба ибораи дигар, шумо захирае эҷод мекунед (ба мисли зершабака) ва сипас кӯшиш кунед, ки дар бораи он маълумот гиред (ба монанди ID-и зершабакаи навтаъсис) ва Terraform онро пайдо карда наметавонад. Аксарияти ин хатогиҳо (аз ҷумла 6813) ислоҳ карда шудаанд, аммо онҳо то ҳол гоҳ-гоҳ пайдо мешаванд, хусусан вақте ки Terraform барои намуди нави захираҳо дастгирӣ мекунад. Ин дилгиркунанда аст, аммо дар аксари мавридҳо ягон зарар намерасонад. Вақте ки шумо боз terraform-ро иҷро мекунед, ҳама чиз бояд кор кунад, зеро то ин вақт маълумот дар тамоми система паҳн мешавад.

    Ин порча аз китоби Евгений Брикман оварда шудааст "Terraform: инфрасохтор дар сатҳи код".

Манбаъ: will.com

Илова Эзоҳ