Terraform pitfalls

Terraform pitfalls
Jẹ ki a ṣe afihan awọn ipalara diẹ, pẹlu awọn ti o nii ṣe pẹlu awọn losiwajulosehin, ti awọn alaye ati awọn ilana imuṣiṣẹ, ati awọn ọran gbogbogbo diẹ sii ti o kan Terraform ni gbogbogbo:

  • kika ati fun_kọọkan ni awọn idiwọn;
  • idinwo odo downtime imuṣiṣẹ;
  • ani eto ti o dara le kuna;
  • refactoring le ni awọn oniwe-pitfalls;
  • isomọ ti a da duro ni ibamu... pẹlu idaduro.

Awọn kika ati fun_kọọkan ni awọn idiwọn

Awọn apẹẹrẹ ti o wa ni ori yii ṣe lilo lọpọlọpọ ti paramita kika ati ikosile fun_kọọkan ni awọn yipo ati ọgbọn ipo. Wọn ṣe daradara, ṣugbọn wọn ni awọn idiwọn pataki meji ti o nilo lati mọ.

  • Ka ati fun_kọọkan ko le ṣe itọkasi eyikeyi awọn oniyipada igbejade orisun.
  • ka ati fun_each ko le ṣee lo ni module iṣeto ni.

ka ati fun_kọọkan ko le ṣe itọkasi eyikeyi awọn oniyipada igbejade orisun

Fojuinu pe o nilo lati ran awọn olupin EC2 lọpọlọpọ ati fun idi kan o ko fẹ lati lo ASG. Koodu rẹ le jẹ bi eyi:

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

Jẹ ki a wo wọn ni ọkọọkan.

Niwọn igba ti a ti ṣeto paramita kika si iye aimi, koodu yii yoo ṣiṣẹ laisi awọn iṣoro: nigbati o ba ṣiṣẹ aṣẹ ohun elo, yoo ṣẹda awọn olupin EC2 mẹta. Ṣugbọn kini ti o ba fẹ lati ran olupin kan ranṣẹ ni Agbegbe Wiwa kọọkan (AZ) laarin agbegbe AWS lọwọlọwọ rẹ? O le jẹ ki koodu rẹ kojọpọ atokọ ti awọn agbegbe lati orisun data aws_availability_zones ati lẹhinna lupu nipasẹ ọkọọkan ki o ṣẹda olupin EC2 kan ninu rẹ nipa lilo paramita kika ati iraye si atọka:

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" {}

Koodu yii yoo tun ṣiṣẹ daradara, nitori pe paramita kika le tọka awọn orisun data laisi awọn iṣoro eyikeyi. Ṣugbọn kini yoo ṣẹlẹ ti nọmba awọn olupin ti o nilo lati ṣẹda da lori abajade ti diẹ ninu awọn orisun? Lati ṣe afihan eyi, ọna ti o rọrun julọ ni lati lo orisun random_integer, eyiti, gẹgẹbi orukọ ṣe daba, da odidi airotẹlẹ pada:

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

Yi koodu gbogbo a ID nọmba laarin 1 ati 3. Jẹ ká wo ohun ti o ṣẹlẹ ti o ba ti a gbiyanju lati lo awọn ti o wu yi awọn oluşewadi ni awọn ka paramita ti aws_instance awọn oluşewadi:

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

Ti o ba ṣiṣẹ ero terraform lori koodu yii, iwọ yoo gba aṣiṣe wọnyi:

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 nilo kika ati fun_kọọkan jẹ iṣiro lakoko ipele igbero, ṣaaju ṣiṣẹda eyikeyi awọn orisun tabi yipada. Eyi tumọ si pe kika ati fun_kọọkan le tọka si awọn ọrọ gangan, awọn oniyipada, awọn orisun data, ati paapaa awọn atokọ awọn orisun (niwọn igba ti ipari wọn le pinnu ni akoko ṣiṣeto), ṣugbọn kii ṣe si awọn oniyipada iṣelọpọ awọn orisun.

ka ati fun_each ko le ṣee lo ni module iṣeto ni

Ni ọjọ kan o le ni idanwo lati ṣafikun paramita kika kan si iṣeto module rẹ:

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

     count = 3

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

Koodu yii ngbiyanju lati lo kika inu module kan lati ṣẹda awọn ẹda mẹta ti orisun wẹẹbu –cluster. Tabi o le fẹ lati ṣe sisopọ module ni iyan ti o da lori diẹ ninu ipo Boolean nipa tito paramita kika rẹ si 0. Eyi le dabi koodu ti o ni oye, ṣugbọn iwọ yoo gba aṣiṣe yii nigbati o ba n ṣiṣẹ ero 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.

Laanu, bi ti Terraform 0.12.6, lilo kika tabi fun_kọọkan ninu awọn orisun module ko ni atilẹyin. Gẹgẹbi awọn akọsilẹ itusilẹ Terraform 0.12 (http://bit.ly/3257bv4), HashiCorp ngbero lati ṣafikun agbara yii ni ọjọ iwaju, nitorinaa da lori igba ti o ka iwe yii, o le ti wa tẹlẹ. Lati rii daju, ka Terraform changelog nibi.

Awọn idiwọn ti Awọn imuṣiṣẹ Downtime Zero

Lilo bulọọki create_before_destroy ni apapo pẹlu ASG jẹ ojutu nla fun ṣiṣẹda awọn imuṣiṣẹ akoko-akoko odo, ayafi fun akiyesi kan: awọn ofin autoscaling ko ni atilẹyin. Tabi lati jẹ kongẹ diẹ sii, eyi tunto iwọn ASG pada si min_size lori gbogbo imuṣiṣẹ, eyiti o le jẹ iṣoro ti o ba nlo awọn ofin adaṣe lati mu nọmba awọn olupin ti n ṣiṣẹ pọ si.

Fun apẹẹrẹ, module webserver-cluster ni bata ti aws_autoscaling_schedule awọn orisun, eyiti ni 9 owurọ mu nọmba awọn olupin pọ si ninu iṣupọ lati meji si mẹwa. Ti o ba ran ni, sọ, 11 a.m., ASG tuntun yoo bẹrẹ pẹlu awọn olupin meji ju mẹwa lọ ati wa ni ọna yẹn titi di 9 owurọ ni ọjọ keji.

Idiwọn yii le ṣe yika ni awọn ọna pupọ.

  • Yi paramita ti nwaye pada ni aws_autoscaling_schedule lati 0 9 * * * ("Ṣiṣe ni 9 owurọ") si nkan bi 0-59 9-17 * * * ("Ṣiṣe ni gbogbo iṣẹju lati 9 owurọ si 5 irọlẹ"). Ti ASG ba ti ni awọn olupin mẹwa mẹwa, ṣiṣiṣẹ ofin autoscaling lẹẹkansi kii yoo yi ohunkohun pada, eyiti o jẹ ohun ti a fẹ. Ṣugbọn ti ASG ba ti gbejade laipẹ, ofin yii yoo rii daju pe ni iṣẹju kan ti o pọju nọmba awọn olupin rẹ yoo de mẹwa. Eyi kii ṣe ọna ti o wuyi patapata, ati awọn fo nla lati mẹwa si awọn olupin meji ati ẹhin tun le fa awọn iṣoro fun awọn olumulo.
  • Ṣẹda iwe afọwọkọ aṣa ti o nlo AWS API lati pinnu nọmba awọn olupin ti nṣiṣe lọwọ ni ASG, pe ni lilo orisun data ita (wo “Orisun Data Ita” ni oju-iwe 249), ki o ṣeto paramita agbara agbara ASG si iye ti o pada nipasẹ akosile. Ni ọna yii, apẹẹrẹ ASG tuntun kọọkan yoo ṣiṣẹ nigbagbogbo ni agbara kanna bi koodu Terraform ti o wa ati jẹ ki o nira sii lati ṣetọju.

Nitoribẹẹ, Terraform yoo ni apere ni atilẹyin ti a ṣe sinu fun awọn imuṣiṣẹ akoko-akoko odo, ṣugbọn bi Oṣu Karun ọdun 2019, ẹgbẹ HashiCorp ko ni awọn ero lati ṣafikun iṣẹ ṣiṣe yii (awọn alaye - nibi).

Eto to pe le jẹ imuse ni aṣeyọri

Nigba miiran aṣẹ ero ṣe agbejade ero imuṣiṣẹ ti o pe pipe, ṣugbọn aṣẹ ohun elo pada aṣiṣe. Gbiyanju, fun apẹẹrẹ, ṣafikun orisun aws_iam_user pẹlu orukọ kanna ti o lo fun olumulo IAM ti o ṣẹda ni iṣaaju ni ori 2:

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

Ni bayi, ti o ba ṣiṣẹ aṣẹ ero, Terraform yoo ṣe agbejade ero imuṣiṣẹ ti o dabi ẹni pe o tọ:

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.

Ti o ba ṣiṣẹ aṣẹ ohun elo iwọ yoo gba aṣiṣe wọnyi:

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" {

Iṣoro naa, nitorinaa, ni pe olumulo IAM kan pẹlu orukọ yẹn ti wa tẹlẹ. Ati pe eyi le ṣẹlẹ kii ṣe si awọn olumulo IAM nikan, ṣugbọn si fere eyikeyi awọn orisun. O ṣee ṣe pe ẹnikan ṣẹda ohun elo yii pẹlu ọwọ tabi lilo laini aṣẹ, ṣugbọn boya ọna, awọn ID ti o baamu nyorisi awọn ija. Ọpọlọpọ awọn iyatọ ti aṣiṣe yii lo wa nigbagbogbo ti o mu awọn tuntun si Terraform nipasẹ iyalẹnu.

Koko bọtini ni pe aṣẹ ero terraform nikan gba sinu akọọlẹ awọn orisun wọnyẹn ti o jẹ pato ninu faili ipinlẹ Terraform. Ti o ba ṣẹda awọn orisun ni ọna miiran (fun apẹẹrẹ, pẹlu ọwọ nipa titẹ ni console AWS), wọn kii yoo pari ni faili ipinlẹ ati nitorinaa Terraform kii yoo gba wọn sinu akọọlẹ nigbati o ba n ṣiṣẹ aṣẹ ero naa. Bi abajade, eto ti o dabi pe o tọ ni iwo akọkọ yoo tan jade lati jẹ aṣeyọri.

Awọn ẹkọ meji wa lati kọ lati inu eyi.

  • Ti o ba ti bẹrẹ ṣiṣẹ pẹlu Terraform, maṣe lo ohunkohun miiran. Ti apakan awọn amayederun rẹ ba jẹ iṣakoso nipa lilo Terraform, o ko le tun ṣe pẹlu ọwọ mọ. Bibẹẹkọ, iwọ kii ṣe eewu awọn aṣiṣe Terraform isokuso nikan, ṣugbọn o tun kọ ọpọlọpọ awọn anfani ti IaC nitori koodu naa kii yoo jẹ aṣoju deede ti awọn amayederun rẹ.
  • Ti o ba ti ni awọn amayederun diẹ, lo pipaṣẹ agbewọle. Ti o ba bẹrẹ lati lo Terraform pẹlu awọn amayederun ti o wa tẹlẹ, o le ṣafikun si faili ipinlẹ nipa lilo aṣẹ gbewọle terraform. Ni ọna yii Terraform yoo mọ kini awọn amayederun nilo lati ṣakoso. Aṣẹ agbewọle gba awọn ariyanjiyan meji. Ni igba akọkọ ti ni awọn oluşewadi adirẹsi ninu rẹ iṣeto ni awọn faili. Sintasi nibi jẹ kanna bi fun awọn ọna asopọ orisun: _. (bii aws_iam_user.existing_user). Awọn ariyanjiyan keji ni ID ti awọn oluşewadi lati wa ni akowọle. Jẹ ki a sọ ID oluşewadi aws_iam_user ni orukọ olumulo (fun apẹẹrẹ, yevgeniy.brikman), ati awọn oluşewadi ID aws_instance ni ID olupin EC2 (bii i-190e22e5). Bii o ṣe le gbe orisun wọle ni igbagbogbo tọka si ninu iwe ni isalẹ ti oju-iwe rẹ.

    Ni isalẹ ni aṣẹ agbewọle kan ti o muuṣiṣẹpọ awọn orisun aws_iam_user ti o ṣafikun si iṣeto Terraform rẹ pẹlu olumulo IAM ni Abala 2 (ti o rọpo orukọ rẹ fun yevgeniy.brikman, dajudaju):

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    Terraform yoo pe API AWS lati wa olumulo IAM rẹ ki o ṣẹda akojọpọ faili ipinlẹ laarin rẹ ati orisun aws_iam_user.existing_user ninu iṣeto Terraform rẹ. Lati isisiyi lọ, nigbati o ba ṣiṣẹ aṣẹ ero, Terraform yoo mọ pe olumulo IAM ti wa tẹlẹ ati pe kii yoo gbiyanju lati ṣẹda lẹẹkansi.

    O tọ lati ṣe akiyesi pe ti o ba ti ni ọpọlọpọ awọn orisun ti o fẹ gbe wọle sinu Terraform, kikọ koodu pẹlu ọwọ ati gbigbe ọkọọkan wọle ni akoko kan le jẹ wahala. Nitorinaa o tọ lati wo ohun elo bii Terraforming (http://terraforming.dtan4.net/), eyiti o le gbe koodu wọle laifọwọyi ati ipinlẹ lati akọọlẹ AWS rẹ.

    Refactoring le ni awọn oniwe-pitfalls

    Atunṣe jẹ iṣe ti o wọpọ ni siseto nibiti o ti yipada eto inu ti koodu lakoko ti o nlọ ihuwasi ita ko yipada. Eyi ni lati jẹ ki koodu naa ṣe alaye, afinju, ati rọrun lati ṣetọju. Refactoring jẹ ilana ti ko ṣe pataki ti o yẹ ki o lo nigbagbogbo. Ṣugbọn nigbati o ba de Terraform tabi eyikeyi irinṣẹ IaC miiran, o ni lati ṣọra pupọ nipa kini o tumọ si nipasẹ “ihuwasi ita” ti nkan ti koodu kan, bibẹẹkọ awọn iṣoro airotẹlẹ yoo dide.

    Fun apẹẹrẹ, iru atunṣe ti o wọpọ jẹ rirọpo awọn orukọ ti awọn oniyipada tabi awọn iṣẹ pẹlu awọn oye diẹ sii. Ọpọlọpọ awọn IDE ti ni atilẹyin ti a ṣe sinu fun atunṣe ati pe o le tunrukọ awọn oniyipada ati awọn iṣẹ ni gbogbo iṣẹ naa. Ni awọn ede siseto gbogbogbo, eyi jẹ ilana kekere ti o le ma ronu nipa rẹ, ṣugbọn ni Terraform o ni lati ṣọra gidigidi pẹlu eyi, bibẹẹkọ o le ni iriri awọn ijade.

    Fun apẹẹrẹ, module-cluster webserver ni o ni orukọ oniyipada cluster_name:

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

    Fojuinu pe o bẹrẹ lilo module yii lati fi iṣẹ microservice kan ti a pe ni foo. Nigbamii, o fẹ lati tunrukọ iṣẹ rẹ si igi. Iyipada yii le dabi ohun kekere, ṣugbọn ni otitọ o le fa awọn idalọwọduro iṣẹ.

    Otitọ ni pe module-cluster webserver nlo oniyipada cluster_name ni nọmba awọn orisun, pẹlu paramita orukọ ti awọn ẹgbẹ aabo meji ati 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]
    }

    Ti o ba yi paramita orukọ pada lori orisun kan, Terraform yoo paarẹ ẹya atijọ ti orisun yẹn ati ṣẹda tuntun ni aaye rẹ. Ṣugbọn ti orisun yẹn ba jẹ ALB, laarin piparẹ rẹ ati igbasilẹ ẹya tuntun, iwọ kii yoo ni ẹrọ kan lati ṣe atunṣe ijabọ si olupin wẹẹbu rẹ. Bakanna, ti ẹgbẹ aabo ba paarẹ, awọn olupin rẹ yoo bẹrẹ lati kọ eyikeyi ijabọ nẹtiwọọki titi ti ẹgbẹ tuntun yoo fi ṣẹda.

    Iru isọdọtun miiran ti o le nifẹ si ni iyipada ID Terraform. Jẹ ki a mu orisun aws_security_group ninu module olupin-cluster wẹẹbu gẹgẹbi apẹẹrẹ:

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

    Idanimọ ti orisun yii ni a pe ni apẹẹrẹ. Fojuinu pe lakoko atunṣe o pinnu lati yi pada si oye diẹ sii (ninu ero rẹ) orukọ cluster_instance:

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

    Kini yoo ṣẹlẹ ni ipari? Iyẹn tọ: idalọwọduro.

    Terraform ṣe idapọ ID orisun kọọkan pẹlu ID olupese awọsanma. Fun apẹẹrẹ, iam_user ni nkan ṣe pẹlu ID olumulo AWS IAM, ati aws_intance ni nkan ṣe pẹlu ID olupin AWS EC2. Ti o ba yi ID orisun pada (sọ lati apẹẹrẹ si cluster_instance, gẹgẹ bi ọran pẹlu aws_security_group), si Terraform yoo han bi ẹni pe o paarẹ orisun atijọ ati ṣafikun tuntun kan. Ti o ba lo awọn ayipada wọnyi, Terraform yoo paarẹ ẹgbẹ aabo atijọ ati ṣẹda tuntun kan, lakoko ti awọn olupin rẹ bẹrẹ lati kọ eyikeyi ijabọ nẹtiwọọki.

    Eyi ni awọn ẹkọ pataki mẹrin ti o yẹ ki o mu kuro ninu ijiroro yii.

    • Nigbagbogbo lo pipaṣẹ ero. O le fi han gbogbo awọn snags wọnyi. Ṣe atunyẹwo iṣelọpọ rẹ ni pẹkipẹki ki o san ifojusi si awọn ipo nibiti Terraform ngbero lati pa awọn orisun rẹ ti o ṣeeṣe julọ ko yẹ ki o paarẹ.
    • Ṣẹda ṣaaju ki o to paarẹ. Ti o ba fẹ paarọ orisun kan, ronu ni pẹkipẹki boya o nilo lati ṣẹda rirọpo ṣaaju piparẹ atilẹba naa. Ti idahun ba jẹ bẹẹni, ṣẹda_before_destroy le ṣe iranlọwọ. Abajade kanna le ṣee ṣe pẹlu ọwọ nipasẹ ṣiṣe awọn igbesẹ meji: akọkọ ṣafikun orisun tuntun si iṣeto ati ṣiṣe aṣẹ ti o lo, lẹhinna yọ orisun atijọ kuro ni atunto ki o lo aṣẹ ohun elo lẹẹkansi.
    • Iyipada idamo nbeere iyipada ipo. Ti o ba fẹ yi ID ti o ni nkan ṣe pẹlu orisun kan pada (fun apẹẹrẹ, tunrukọ aws_security_group lati apẹẹrẹ si cluster_instance) laisi piparẹ awọn orisun ati ṣiṣẹda ẹya tuntun ti rẹ, o gbọdọ ṣe imudojuiwọn faili ipinlẹ Terraform ni ibamu. Maṣe ṣe eyi pẹlu ọwọ - lo aṣẹ ipinlẹ terraform dipo. Nigbati o ba n tunrukọ awọn idamọ, o yẹ ki o ṣiṣẹ aṣẹ mv ipinle terraform, eyiti o ni sintasi atẹle wọnyi:
      terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>

      ORIGINAL_REFERENCE jẹ ikosile ti o tọka si orisun ni fọọmu lọwọlọwọ, ati NEW_REFERENCE ni ibi ti o fẹ gbe. Fun apẹẹrẹ, nigbati o ba tunrukọ orukọ ẹgbẹ aws_security_group lati apẹẹrẹ si cluster_instance, o nilo lati ṣiṣẹ aṣẹ atẹle:

      $ terraform state mv 
         aws_security_group.instance 
         aws_security_group.cluster_instance

      Eyi sọ fun Terraform pe ipinlẹ ti o ni nkan ṣe tẹlẹ pẹlu aws_security_group.intance yẹ ki o ni nkan ṣe pẹlu aws_security_group.cluster_instance. Ti o ba ti tun lorukọmii ati ṣiṣiṣẹ ilana terraform aṣẹ yii ko ṣe afihan eyikeyi awọn ayipada, lẹhinna o ṣe ohun gbogbo ni deede.

    • Diẹ ninu awọn eto ko le yipada. Awọn paramita ti ọpọlọpọ awọn orisun ko yipada. Ti o ba gbiyanju lati yi wọn pada, Terraform yoo paarẹ awọn orisun atijọ ati ṣẹda tuntun ni aaye rẹ. Oju-iwe orisun kọọkan yoo tọka nigbagbogbo ohun ti o ṣẹlẹ nigbati o ba yipada eto kan pato, nitorinaa rii daju lati ṣayẹwo iwe naa. Nigbagbogbo lo aṣẹ ètò ki o si ro a lilo create_before_destroy nwon.Mirza.

    Iduroṣinṣin ti o da duro ni ibamu... pẹlu idaduro

    Diẹ ninu awọn API ti awọn olupese awọsanma, gẹgẹbi AWS, jẹ asynchronous ati pe wọn ni idaduro idaduro. Asynchrony tumọ si pe wiwo le da esi pada lẹsẹkẹsẹ laisi iduro fun iṣẹ ti o beere lati pari. Iduroṣinṣin idaduro tumọ si pe awọn iyipada le gba akoko lati tan kaakiri gbogbo eto naa; lakoko ti eyi n ṣẹlẹ, awọn idahun rẹ le jẹ aisedede ati dale lori eyiti ẹda orisun data n dahun si awọn ipe API rẹ.

    Fojuinu, fun apẹẹrẹ, pe o ṣe ipe API kan si AWS ti o beere lọwọ rẹ lati ṣẹda olupin EC2 kan. API yoo da idahun “aṣeyọri” pada (201 Created) fẹrẹẹ lẹsẹkẹsẹ, laisi iduro fun olupin funrararẹ lati ṣẹda. Ti o ba gbiyanju lati sopọ si lẹsẹkẹsẹ, yoo fẹrẹ kuna nitori pe ni aaye yẹn AWS tun n bẹrẹ awọn orisun tabi, ni omiiran, olupin naa ko tii bẹrẹ. Pẹlupẹlu, ti o ba ṣe ipe miiran lati gba alaye nipa olupin yii, o le gba aṣiṣe kan (404 Ko Ri). Ohun naa ni pe alaye nipa olupin EC2 yii le tun jẹ ikede jakejado AWS ṣaaju ki o to wa nibikibi, iwọ yoo ni lati duro fun iṣẹju-aaya diẹ.

    Nigbakugba ti o ba lo API asynchronous pẹlu aitasera ọlẹ, o gbọdọ tun ibeere rẹ gbiyanju lorekore titi ti iṣe yoo fi pari ati tan kaakiri nipasẹ eto naa. Laanu, AWS SDK ko pese awọn irinṣẹ to dara fun eyi, ati pe iṣẹ akanṣe Terraform ti a lo lati jiya lati ọpọlọpọ awọn idun bii 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

    Ni awọn ọrọ miiran, o ṣẹda orisun kan (bii subnet) ati lẹhinna gbiyanju lati gba alaye diẹ nipa rẹ (bii ID ti subnet tuntun ti a ṣẹda), ati Terraform ko le rii. Pupọ julọ awọn idun wọnyi (pẹlu 6813) ti wa titi, ṣugbọn wọn tun gbin lati igba de igba, paapaa nigbati Terraform ṣe afikun atilẹyin fun iru orisun tuntun kan. Eyi jẹ didanubi, ṣugbọn ni ọpọlọpọ awọn ọran kii ṣe ipalara eyikeyi. Nigbati o ba ṣiṣẹ terraform lo lẹẹkansi, ohun gbogbo yẹ ki o ṣiṣẹ, nitori ni akoko yii alaye naa yoo ti tan tẹlẹ jakejado eto naa.

    Ipilẹṣẹ yii ti gbekalẹ lati inu iwe nipasẹ Evgeniy Brikman "Terraform: awọn amayederun ni ipele koodu".

orisun: www.habr.com

Fi ọrọìwòye kun