Terraform에서 순환 참조 오류가 발생하면
variable "env" {
type = "string"
default = "dev"
}
variable "service" {
type = "string"
default = "foo"
}
resource "aws_cloudfront_origin_access_identity" "origin_access" {
comment = "access-identity-${var.env}-${var.service}.s3.amazonaws.com"
}
data "template_file" "s3_policy" {
template = "${file("s3-bucket-policy.json")}"
vars {
bucket_name = "${var.env}-${var.service}"
origin_access_identity = "${aws_cloudfront_origin_access_identity.origin_access.id}"
}
}
resource "aws_s3_bucket" "foo" {
bucket = "${var.env}-${var.service}"
acl = "private"
policy = "${data.template_file.s3_policy.rendered}"
tags {
Name = "${var.env}-${var.service}"
Environment = "${var.env}"
ServiceName = "${var.service}"
}
}
그렇다면 순환 참조가 발생합니다.
❯ terraform plan
Error configuring: 1 error(s) occurred:
* Cycle: data.template_file.s3_policy, aws_s3_bucket.foo, aws_cloudfront_origin_access_identity.origin_access
이제, 모르고 괴로운 기분이 되지만, Terraform에는 편리한 기능이 있다.
종속 그래프의 출력입니다.
terraform graph -draw-cycles | dot -Tpng > graph.png
-draw-cycles
를 붙이면 빨갛게 되므로, 알기 쉽다.후에는 그 의존관계를 해결해 나가면 된다.
이 경우는
aws_cloudfront_origin_access_identity
에서 버킷 이름을 참조하지만 버킷 이름은 "${var.env}-${var.service}"
로 바꿀 수 있으므로,resource "aws_cloudfront_origin_access_identity" "origin_access" {
comment = "access-identity-${var.env}-${var.service}.s3.amazonaws.com"
}
그렇다면 치유한다.
References
Reference
이 문제에 관하여(Terraform에서 순환 참조 오류가 발생하면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ringo/items/d06d936209d7abd9dcff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)