Terraform pitfalls

Terraform pitfalls
Cia peb hais txog ob peb qhov teeb meem, suav nrog cov uas cuam tshuam nrog lub voj voog, yog tias cov lus hais thiab kev xa tawm cov txheej txheem, nrog rau ntau yam teeb meem uas cuam tshuam rau Terraform feem ntau:

  • tus suav thiab for_txhua qhov tsis muaj kev txwv;
  • txwv zero downtime deployment;
  • txawm tias txoj kev npaj zoo yuav ua tsis tau;
  • refactoring tuaj yeem muaj nws qhov pitfalls;
  • deferred coherence yog zoo ib yam... nrog deferral.

Cov suav thiab rau_txhua qhov tsis muaj kev txwv

Cov piv txwv hauv tshooj no ua rau kev siv ntau ntawm cov suav qhov ntsuas thiab qhov for_txhua qhov kev qhia hauv loops thiab cov laj thawj xwm txheej. Lawv ua tau zoo, tab sis lawv muaj ob qhov kev txwv tseem ceeb uas koj yuav tsum paub txog.

  • Suav thiab for_each tsis tuaj yeem hais txog cov peev txheej tsim tawm qhov hloov pauv.
  • suav thiab for_each tsis tuaj yeem siv rau hauv module configuration.

suav thiab for_each tsis tuaj yeem hais txog cov peev txheej tsim tawm qhov hloov pauv

Xav txog tias koj yuav tsum xa ntau EC2 servers thiab rau qee yam koj tsis xav siv ASG. Koj cov cai yuav zoo li no:

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

Cia peb saib lawv ib leeg.

Txij li thaum suav parameter yog teem rau tus nqi zoo li qub, cov cai no yuav ua haujlwm yam tsis muaj teeb meem: thaum koj khiav cov lus txib, nws yuav tsim peb EC2 servers. Tab sis ua li cas yog tias koj xav xa ib lub server hauv txhua qhov Availability Zone (AZ) hauv koj thaj av AWS tam sim no? Koj tuaj yeem muaj koj cov cai thauj cov npe ntawm thaj chaw los ntawm aws_availability_zones cov ntaub ntawv qhov chaw thiab tom qab ntawd voj los ntawm txhua tus thiab tsim EC2 server hauv nws siv cov suav parameter thiab array Performance index nkag:

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

Cov cai no tseem yuav ua haujlwm zoo, txij li cov suav tsis tuaj yeem siv cov ntaub ntawv tsis muaj teeb meem. Tab sis yuav ua li cas yog tias tus naj npawb ntawm cov servers koj xav tau los tsim nyob ntawm cov khoom tsim tawm ntawm qee qhov peev txheej? Txhawm rau ua kom pom qhov no, txoj hauv kev yooj yim tshaj plaws yog siv cov peev txheej random_integer, uas, raws li lub npe qhia, rov ua tus lej random:

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

Cov lej no tsim tus lej random ntawm 1 thiab 3. Cia peb pom yuav ua li cas yog tias peb sim siv cov khoom tso tawm ntawm cov peev txheej no hauv suav qhov ntsuas ntawm aws_instance peev txheej:

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

Yog tias koj khiav lub phiaj xwm terraform ntawm qhov chaws no, koj yuav tau txais qhov yuam kev hauv qab no:

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 xav kom suav thiab for_each raug xam thaum lub sijhawm npaj, ua ntej cov peev txheej tsim lossis hloov kho. Qhov no txhais tau hais tias suav thiab for_each tuaj yeem xa mus rau cov ntawv sau, qhov sib txawv, cov ntaub ntawv, thiab txawm tias cov npe cov peev txheej (tsuas yog lawv qhov ntev tuaj yeem txiav txim siab ntawm lub sijhawm teem sijhawm), tab sis tsis suav nrog cov peev txheej tsim tawm.

suav thiab for_each tsis tuaj yeem siv rau hauv module configuration

Muaj ib hnub koj yuav raug ntxias kom ntxiv suav tsis txheeb rau koj qhov kev teeb tsa module:

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

     count = 3

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

Cov cai no sim siv suav rau hauv ib qho module los tsim peb daim ntawv theej ntawm webserver-cluster resource. Lossis koj yuav xav ua kom txuas ib qho kev xaiv xaiv raws li qee qhov kev mob Boolean los ntawm kev teeb tsa nws suav qhov ntsuas rau 0. Qhov no yuav zoo li cov cai tsim nyog, tab sis koj yuav tau txais qhov yuam kev no thaum khiav cov phiaj xwm 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.

Hmoov tsis zoo, raws li ntawm Terraform 0.12.6, siv suav lossis for_each hauv cov peev txheej module tsis txaus siab. Raws li Terraform 0.12 cov ntawv tso tawm (http://bit.ly/3257bv4), HashiCorp npaj yuav ntxiv qhov peev xwm no yav tom ntej, yog li nyob ntawm thaum koj nyeem phau ntawv no, nws yuav twb muaj. Kom paub meej, nyeem Terraform changelog ntawm no.

Kev txwv ntawm Zero Downtime Deployments

Siv lub create_before_destroy thaiv ua ke nrog ASG yog ib qho kev daws teeb meem zoo rau kev tsim xoom-downtime deployments, tshwj tsis yog rau ib qho caveat: autoscaling cov cai tsis txaus siab. Los yog kom meej meej dua, qhov no rov pib dua ASG qhov loj me rov qab rau min_size ntawm txhua qhov kev xa tawm, uas tuaj yeem yog teeb meem yog tias koj tau siv cov cai autoscaling kom nce tus naj npawb ntawm cov servers khiav.

Piv txwv li, lub webserver-cluster module muaj ib khub ntawm aws_autoscaling_schedule cov peev txheej, uas thaum 9 teev sawv ntxov nce tus naj npawb ntawm servers hauv pawg los ntawm ob mus rau kaum. Yog tias koj xa mus rau, hais tias, 11 teev sawv ntxov, ASG tshiab yuav pib nrog tsuas yog ob lub servers dua li kaum thiab nyob li ntawd mus txog 9 teev sawv ntxov hnub tom qab.

Qhov kev txwv no tuaj yeem hla dhau ntau txoj hauv kev.

  • Hloov qhov kev rov ua dua tshiab hauv aws_autoscaling_schedule los ntawm 0 9 * * * ("khiav ntawm 9 teev sawv ntxov") rau qee yam xws li 0-59 9-17 * * * ("khiav txhua feeb ntawm 9 teev sawv ntxov txog 5 teev tsaus ntuj"). Yog tias ASG twb muaj kaum servers, khiav txoj cai autoscaling no dua yuav tsis hloov dab tsi, uas yog qhov peb xav tau. Tab sis yog tias ASG nyuam qhuav tau siv tsis ntev los no, txoj cai no yuav ua kom ntseeg tau tias nyob rau hauv qhov siab kawg ntawm ib feeb tus naj npawb ntawm nws cov servers yuav ncav cuag kaum. Qhov no tsis yog ib txoj hauv kev zoo nkauj nkaus xwb, thiab kev dhia loj ntawm kaum mus rau ob lub servers thiab rov qab tuaj yeem ua teeb meem rau cov neeg siv.
  • Tsim ib tsab ntawv kev cai uas siv AWS API los txiav txim seb tus naj npawb ntawm cov servers nquag hauv ASG, hu rau nws siv cov ntaub ntawv sab nraud (saib "External Data Source" ntawm nplooj 249), thiab teeb tsa ASG qhov kev xav tau_capacity parameter rau tus nqi xa rov qab los ntawm tsab ntawv. Txoj kev no, txhua qhov tshiab ASG yuav ib txwm khiav ntawm tib lub peev xwm raws li Terraform code uas twb muaj lawm thiab ua rau nws nyuaj rau tswj.

Tau kawg, Terraform yuav zoo siab muaj kev txhawb nqa rau xoom-downtime xa mus, tab sis txij li lub Tsib Hlis 2019, pab pawg HashiCorp tsis muaj kev npaj los ntxiv cov haujlwm no (paub meej - ntawm no).

Txoj kev npaj kom raug yuav ua tsis tiav

Qee lub sij hawm cov phiaj xwm hais kom ua tiav txoj kev xa tawm kom raug, tab sis cov lus txib siv rov ua qhov yuam kev. Sim, piv txwv li, ntxiv cov khoom siv aws_iam_user nrog tib lub npe koj siv rau tus neeg siv IAM koj tau tsim ua ntej hauv Tshooj 2:

resource "aws_iam_user" "existing_user" {
   # ΠŸΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сюда имя ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ IAM,
   # Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ terraform import
   name = "yevgeniy.brikman"
}

Tam sim no, yog tias koj khiav lub phiaj xwm hais kom ua, Terraform yuav tso tawm ib txoj kev npaj xa tawm zoo li tsim nyog:

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.

Yog tias koj khiav cov lus txib thov koj yuav tau txais qhov yuam kev hauv qab no:

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

Qhov teeb meem, tau kawg, yog tias tus neeg siv IAM nrog lub npe ntawd twb muaj lawm. Thiab qhov no tuaj yeem tshwm sim tsis yog rau cov neeg siv IAM nkaus xwb, tab sis yuav luag txhua qhov chaw. Nws muaj peev xwm hais tias ib tug neeg tsim cov peev txheej no los ntawm kev siv cov kab hais kom ua, tab sis ob txoj kev, kev sib piv IDs ua rau muaj kev tsis sib haum xeeb. Muaj ntau qhov kev hloov pauv ntawm qhov yuam kev no uas feem ntau ntes cov neeg tuaj tshiab rau Terraform los ntawm kev xav tsis thoob.

Lub ntsiab lus tseem ceeb yog tias cov lus txib terraform tsuas yog siv rau hauv tus account cov peev txheej uas tau teev tseg hauv Terraform lub xeev cov ntaub ntawv. Yog tias cov peev txheej raug tsim los ntawm lwm txoj hauv kev (piv txwv li, manually los ntawm txhaj rau hauv AWS console), lawv yuav tsis xaus rau hauv lub xeev cov ntaub ntawv thiab yog li ntawd Terraform yuav tsis coj lawv mus rau hauv tus account thaum ua tiav cov phiaj xwm hais kom ua. Yog li ntawd, ib txoj kev npaj uas zoo li yog thaum xub thawj siab ib muag yuav ua tsis tiav.

Muaj ob zaj lus qhia los ntawm qhov no.

  • Yog tias koj twb tau pib ua haujlwm nrog Terraform, tsis txhob siv lwm yam. Yog tias ib feem ntawm koj qhov kev tsim kho tau tswj hwm siv Terraform, koj tsis tuaj yeem hloov kho nws tus kheej ntxiv lawm. Txwv tsis pub, koj tsis tsuas yog muaj kev pheej hmoo ua yuam kev Terraform, tab sis koj kuj tsis lees paub ntau yam txiaj ntsig ntawm IaC vim tias cov cai yuav tsis yog tus sawv cev ntawm koj qhov kev tsim kho.
  • Yog tias koj twb muaj qee qhov kev tsim kho, siv cov lus txib ntshuam. Yog tias koj tab tom pib siv Terraform nrog cov txheej txheem uas twb muaj lawm, koj tuaj yeem ntxiv rau hauv lub xeev cov ntaub ntawv siv cov lus txib ntshuam terraform. Txoj kev no Terraform yuav paub tias cov infrastructure yuav tsum tau tswj hwm li cas. Cov lus txib ntshuam siv ob qhov kev sib cav. Thawj yog qhov chaw nyob hauv koj cov ntaub ntawv teeb tsa. Cov syntax ntawm no yog tib yam li rau kev sib txuas: _. (like aws_iam_user.existing_user). Qhov kev sib cav thib ob yog tus ID ntawm cov peev txheej yuav tsum tau import. Wb hais tias cov ntaub ntawv ID aws_iam_user yog tus neeg siv lub npe (piv txwv li, yevgeniy.brikman), thiab cov peev txheej ID aws_instance yog EC2 server ID (xws li i-190e22e5). Yuav ua li cas import cov peev txheej feem ntau qhia hauv cov ntaub ntawv hauv qab ntawm nws nplooj ntawv.

    Hauv qab no yog cov lus txib ntshuam uas synchronizes aws_iam_user cov peev txheej uas koj ntxiv rau koj qhov kev teeb tsa Terraform nrog rau tus neeg siv IAM hauv Tshooj 2 (hloov koj lub npe rau yevgeniy.brikman, tau kawg):

    $ terraform import aws_iam_user.existing_user yevgeniy.brikman

    Terraform yuav hu rau AWS API los nrhiav koj tus neeg siv IAM thiab tsim ib lub xeev cov ntaub ntawv koom nrog ntawm nws thiab cov ntaub ntawv aws_iam_user.existing_user hauv koj Terraform configuration. Txij no mus, thaum koj khiav cov phiaj xwm hais kom ua, Terraform yuav paub tias cov neeg siv IAM twb muaj lawm thiab yuav tsis sim tsim nws dua.

    Nws yog ib qho tsim nyog sau cia tias yog tias koj twb muaj ntau yam kev pab uas koj xav import rau hauv Terraform, manually sau cov cai thiab importing txhua tus ntawm ib zaug tuaj yeem ua rau muaj teeb meem. Yog li nws tsim nyog saib rau hauv lub cuab yeej zoo li Terraforming (http://terraforming.dtan4.net/), uas tuaj yeem tuaj yeem xa cov lej thiab xeev los ntawm koj tus account AWS.

    Refactoring tuaj yeem muaj nws qhov pitfalls

    Refactoring yog ib qho kev coj ua hauv kev ua haujlwm uas koj hloov cov qauv sab hauv ntawm cov cai thaum tawm hauv tus cwj pwm sab nraud tsis hloov. Qhov no yog ua kom cov cai meej dua, zoo dua, thiab yooj yim rau kev tswj hwm. Refactoring yog cov txheej txheem tseem ceeb uas yuav tsum tau siv tsis tu ncua. Tab sis thaum nws los txog rau Terraform lossis lwm yam cuab yeej IaC, koj yuav tsum tau ceev faj heev txog qhov koj txhais tau li cas los ntawm "kev coj tus cwj pwm sab nraud" ntawm ib daim code, txwv tsis pub muaj teeb meem npaj txhij txog yuav tshwm sim.

    Piv txwv li, ib hom kev refactoring feem ntau yog hloov cov npe ntawm cov hloov pauv lossis ua haujlwm nrog cov neeg nkag siab ntau dua. Ntau tus IDEs muaj kev txhawb nqa rau refactoring thiab tuaj yeem hloov npe hloov pauv thiab ua haujlwm thoob plaws hauv qhov project. Hauv cov hom phiaj dav dav ntawm cov lus programming, qhov no yog cov txheej txheem tsis tseem ceeb uas koj yuav tsis xav txog, tab sis hauv Terraform koj yuav tsum tau ceev faj heev nrog qhov no, txwv tsis pub koj yuav ntsib teeb meem.

    Piv txwv li, lub webserver-cluster module muaj cov tswv yim sib txawv ntawm cluster_name:

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

    Xav txog tias koj pib siv qhov module no los siv lub microservice hu ua foo. Tom qab ntawd, koj xav hloov koj qhov kev pabcuam rau bar. Qhov kev hloov pauv no yuav zoo li tsis tseem ceeb, tab sis qhov tseeb nws tuaj yeem ua rau muaj kev cuam tshuam kev pabcuam.

    Qhov tseeb yog tias lub webserver-cluster module siv lub cluster_name hloov pauv hauv ntau cov peev txheej, suav nrog lub npe parameter ntawm ob pawg kev ruaj ntseg thiab 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]
    }

    Yog tias koj hloov lub npe parameter ntawm cov peev txheej, Terraform yuav rho tawm cov ntawv qub ntawm cov peev txheej ntawd thiab tsim ib qho tshiab hauv nws qhov chaw. Tab sis yog tias cov peev txheej ntawd yog ALB, ntawm kev rho tawm thiab rub tawm cov ntawv tshiab, koj yuav tsis muaj lub tswv yim los hloov tsheb mus rau koj lub vev xaib server. Ib yam li ntawd, yog tias pawg kev ruaj ntseg raug muab tshem tawm, koj cov servers yuav pib tsis lees txais cov kev sib txuas hauv network kom txog thaum tsim ib pab pawg tshiab.

    Lwm hom refactoring koj yuav xav tau yog hloov Terraform ID. Cia peb coj cov peev txheej aws_security_group hauv webserver-cluster module ua piv txwv:

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

    Tus cim ntawm cov peev txheej no yog hu ua piv txwv. Xav txog tias thaum lub sij hawm refactoring koj txiav txim siab hloov nws mus rau ib tug ntau nkag siab (hauv koj lub tswv yim) lub npe cluster_instance:

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

    Yuav ua li cas thaum kawg? Yog lawm: kev cuam tshuam.

    Terraform koom nrog txhua qhov peev txheej ID nrog huab muab ID. Piv txwv li, iam_user yog txuam nrog AWS IAM user ID, thiab aws_instance yog txuam nrog AWS EC2 server ID. Yog tias koj hloov pauv cov peev txheej ID (hais los ntawm piv txwv rau cluster_instance, ib yam li cov ntaub ntawv nrog aws_security_group), rau Terraform nws yuav tshwm sim li yog tias koj tshem tawm cov peev txheej qub thiab ntxiv ib qho tshiab. Yog tias koj siv cov kev hloov pauv no, Terraform yuav tshem tawm cov qub kev ruaj ntseg pab pawg thiab tsim ib qho tshiab, thaum koj cov servers pib tsis lees paub cov tsheb khiav hauv network.

    Nov yog plaub zaj lus qhia tseem ceeb uas koj yuav tsum tshem tawm ntawm qhov kev sib tham no.

    • Ib txwm siv cov phiaj xwm hais kom ua. Nws tuaj yeem nthuav tawm tag nrho cov snags no. Saib xyuas nws cov txiaj ntsig zoo thiab ua tib zoo saib xyuas cov xwm txheej uas Terraform npaj yuav tshem tawm cov peev txheej uas feem ntau yuav tsum tsis txhob muab tshem tawm.
    • Tsim ua ntej koj rho tawm. Yog tias koj xav hloov cov peev txheej, ua tib zoo xav txog seb koj puas xav tsim ib qho kev hloov ua ntej rho tawm qhov qub. Yog tias cov lus teb yog, tsim_before_destroy tuaj yeem pab tau. Cov txiaj ntsig qub tuaj yeem ua tiav manually los ntawm kev ua ob kauj ruam: ua ntej ntxiv cov peev txheej tshiab rau kev teeb tsa thiab khiav cov lus txib siv, thiab tom qab ntawd tshem tawm cov peev txheej qub los ntawm kev teeb tsa thiab siv cov lus txib rov qab.
    • Hloov cov cim qhia yuav tsum hloov lub xeev. Yog tias koj xav hloov tus ID cuam tshuam nrog cov peev txheej (piv txwv li, hloov npe aws_security_group los ntawm piv txwv mus rau cluster_instance) yam tsis tau tshem tawm cov peev txheej thiab tsim cov ntawv tshiab ntawm nws, koj yuav tsum hloov kho Terraform lub xeev cov ntaub ntawv raws li. Tsis txhob ua qhov no manually - siv lub xeev terraform hais kom ua xwb. Thaum renaming identifiers, koj yuav tsum khiav lub terraform xeev mv hais kom ua, uas muaj cov nram qab no syntax:
      terraform state mv <ORIGINAL_REFERENCE> <NEW_REFERENCE>

      ORIGINAL_REFERENCE yog ib qho kev qhia uas hais txog cov peev txheej hauv nws daim ntawv tam sim no, thiab NEW_REFERENCE yog qhov chaw koj xav txav nws. Piv txwv li, thaum renaming cov pab pawg aws_security_group los ntawm instance mus rau cluster_instance, koj yuav tsum khiav cov lus txib nram qab no:

      $ terraform state mv 
         aws_security_group.instance 
         aws_security_group.cluster_instance

      Qhov no qhia Terraform tias lub xeev uas yav dhau los cuam tshuam nrog aws_security_group.instance yuav tsum tam sim no koom nrog aws_security_group.cluster_instance. Yog tias tom qab renaming thiab khiav qhov kev hais kom ua terraform txoj kev npaj tsis qhia qhov hloov pauv, ces koj tau ua txhua yam kom raug.

    • Qee qhov chaw tsis tuaj yeem hloov pauv. Cov kev txwv ntawm ntau cov peev txheej tsis hloov pauv. Yog tias koj sim hloov lawv, Terraform yuav rho tawm cov peev txheej qub thiab tsim ib qho tshiab hauv nws qhov chaw. Txhua nplooj ntawv muab kev pabcuam feem ntau yuav qhia tias muaj dab tsi tshwm sim thaum koj hloov qhov chaw tshwj xeeb, yog li nco ntsoov xyuas cov ntaub ntawv. Ib txwm siv cov phiaj xwm hais kom ua thiab xav txog kev siv lub tswv yim create_before_destroy.

    Deferred sib xws yog zoo ib yam... nrog ncua

    Qee tus neeg muab kev pabcuam huab 'APIs, xws li AWS, yog asynchronous thiab muaj kev ncua sijhawm. Asynchrony txhais tau hais tias lub interface tuaj yeem rov qab teb tam sim yam tsis tau tos rau qhov kev thov kom ua tiav. Kev ncua tsis tu ncua txhais tau hais tias kev hloov pauv yuav siv sijhawm los nthuav tawm thoob plaws hauv lub cev; thaum qhov no tshwm sim, koj cov lus teb yuav tsis sib haum thiab nyob ntawm qhov twg cov ntaub ntawv replica teb rau koj qhov kev hu API.

    Xav txog, piv txwv li, koj ua API hu rau AWS thov kom nws tsim EC2 server. API yuav rov qab "ua tiav" cov lus teb (201 Tsim) yuav luag tam sim ntawd, tsis tas tos rau lub server nws tus kheej tsim. Yog tias koj sim txuas mus rau tam sim ntawd, nws yuav luag tsis ua haujlwm vim tias thaum lub sijhawm ntawd AWS tseem tab tom pib cov peev txheej lossis, hloov pauv, lub server tseem tsis tau pib. Ntxiv mus, yog tias koj hu rau lwm tus kom tau txais cov ntaub ntawv hais txog tus neeg rau zaub mov no, koj tuaj yeem tau txais qhov yuam kev (404 Tsis Pom). Qhov tseeb yog tias cov ntaub ntawv hais txog EC2 server no tseem tuaj yeem nthuav tawm thoob plaws AWS ua ntej nws muaj nyob txhua qhov chaw, koj yuav tsum tau tos ob peb feeb.

    Thaum twg koj siv asynchronous API nrog tub nkeeg tsis xws luag, koj yuav tsum rov sim koj qhov kev thov kom txog thaum qhov kev txiav txim tiav thiab nthuav tawm los ntawm lub kaw lus. Hmoov tsis zoo, AWS SDK tsis muab cov cuab yeej zoo rau qhov no, thiab Terraform project tau siv los ntawm ntau cov kab laum zoo li 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

    Hauv lwm lo lus, koj tsim cov peev txheej (xws li subnet) thiab tom qab ntawd sim kom tau txais qee cov ntaub ntawv hais txog nws (xws li ID ntawm subnet tshiab tsim), thiab Terraform nrhiav tsis tau. Feem ntau ntawm cov kab no (xws li 6813) tau kho, tab sis lawv tseem qoob loo los ntawm ib ntus, tshwj xeeb tshaj yog thaum Terraform ntxiv kev txhawb nqa rau hom kev pab tshiab. Qhov no yog kev ntxhov siab, tab sis feem ntau tsis ua rau muaj kev phom sij. Thaum koj siv terraform dua, txhua yam yuav tsum ua haujlwm, txij li lub sijhawm no cov ntaub ntawv yuav tau nthuav dav thoob plaws hauv lub system.

    Qhov no excerpt yog nthuav tawm los ntawm phau ntawv los ntawm Evgeniy Brikman "Terraform: infrastructure ntawm qib code".

Tau qhov twg los: www.hab.com

Ntxiv ib saib