Puncte:1

Eroare de ciclu Terraform cu instanța, volumul și fișierul șablon AWS EC2

drapel it

Vă rugăm să ne ajutați să explicați și să rezolvați această eroare?

Am următorul program TF pentru o instanță cu un volum EBS și un fișier șablon folosind acel ID de volum:

resursa „aws_instance” „edge1” {

  instance_type = "t3a.micro" 

  ami = data.aws_ami.ubuntu.id
  key_name = "ozonm"

  £ dispozitiv de blocare rădăcină 
  root_block_device {
    dimensiune_volum = 10
  }

  user_data = data.template_file.user_data_edge1.rendered

}
£ Sfârșitul resursei „aws_instance” „edge1” 

£
£ EBS pentru case
£
resursă „aws_ebs_volume” „case” {
  available_zone = aws_instance.edge1.availability_zone
  dimensiune = 1
}

resursă „aws_volume_attachment” „case-volum-attachment” {
  device_name = "/dev/xvdf"
  instance_id = aws_instance.edge1.id
  volum_id = aws_ebs_volume.homes.id
}

date „model_file” „user_data_edge1” {  
  șablon = fișier(„metadata-edge1.yml”, { vol_id = aws_ebs_volume.homes.id })
}

Deci asta îmi dă o eroare de ciclu:

 Eroare: Ciclu: data.template_file.user_data_edge1, aws_instance.edge1, aws_ebs_volume.homes

în timp ce cred că nu ar trebui. Știu ce este dependența circulară, când primul obiect se referă la al doilea, în timp ce al doilea se referă la primul. Dar cred că este perfect în acest caz cu următoarea ordine:

  • volumul este creat
  • fișierul șablon este redat folosind ID-ul volumului
  • instanța este creată cu fișierul șablon pentru user_data
  • volumul este atașat instanței

Dar graficul TF arată că instanța depinde de volum:

Graficul TF

Deci, de ce se întâmplă acest lucru și cum pot folosi un ID de volum în fișierul șablon pentru instanță?

Mulțumesc anticipat!

drapel jp
Probabil ciclul se datorează utilizării `aws_instance.edge1.availability_zone` în definiția `aws_ebs_volume.homes` .
Artem Trunov avatar
drapel it
Niciuna, nu a contat când am încercat.
Puncte:1
drapel it

Ok, deci după câteva experimente, am descoperit că soluția este să folosești depinde de meta-argument.

resursa „aws_instance” „edge1” {

 depinde de [
    aws_ebs_volume.homes
 ]

În acest caz, de asemenea, available_zone în aws_ebs_volume.homes nu trebuie să se refere înapoi la instanță.

De asemenea, folosirea date pentru a crea un șablon nu este necesar, se poate plasa șablonul chiar în corpul definiției resursei aws_instance:

user_data = templatefile(...)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.