Terraform
AWS EC2 實例、捲和模板文件的 Terraform 循環錯誤
您能否幫助解釋和解決此錯誤?
對於具有使用該卷 ID 的 EBS 捲和模板文件的實例,我有以下 TF 程序:
resource "aws_instance" "edge1" { instance_type = "t3a.micro" ami = data.aws_ami.ubuntu.id key_name = "ozonm" £ root block device root_block_device { volume_size = 10 } user_data = data.template_file.user_data_edge1.rendered } £ End of resource "aws_instance" "edge1" £ £ EBS for homes £ resource "aws_ebs_volume" "homes" { availability_zone = aws_instance.edge1.availability_zone size = 1 } resource "aws_volume_attachment" "homes-volume-attachment" { device_name = "/dev/xvdf" instance_id = aws_instance.edge1.id volume_id = aws_ebs_volume.homes.id } data "template_file" "user_data_edge1" { template = file("metadata-edge1.yml", { vol_id = aws_ebs_volume.homes.id }) }
所以這給了我一個循環錯誤:
Error: Cycle: data.template_file.user_data_edge1, aws_instance.edge1, aws_ebs_volume.homes
雖然我認為不應該。我知道什麼是循環依賴,當第一個對象指的是第二個對象,而第二個對象指的是第一個對象時。但我認為在這種情況下完全沒問題,順序如下:
- 卷已創建
- 使用卷 ID 呈現模板文件
- 使用 user_data 的模板文件創建實例
- 卷附加到實例
但是 TF 圖顯示實例依賴於卷:
那麼,為什麼會發生這種情況,以及如何在實例的模板文件中使用卷 ID?
提前致謝!
好的,所以經過一些實驗,我發現解決方案是使用depends_on元參數。
resource "aws_instance" "edge1" { depends_on [ aws_ebs_volume.homes ]
在這種情況下,aws_ebs_volume.homes 中的 availability_zone 也不得引用回實例。
此外,不需要使用數據來製作模板,可以將模板直接放入 aws_instance 資源定義的主體中:
user_data = templatefile(...)