誰能解釋一下Terraform中for_each引數內的for回圈是什么?我正試圖創建一個AWS SSL證書。我見過像下面這樣的代碼,但我不明白:
resource "aws_acm_certificate" "nonprod_cert" {
domain_name = var.phz_domain_name.
validation_method = "DNS"。
}
資源 "aws_route53_record"/span> "nonprod_cert_record"/span> {
for_each = {
for dvo in aws_acm_certificate.nonprod_cert.domain_validation_options : dvo.domain_name => {
name = dvo.resource_record_name record = dvo.resource_record_value
type = dvo.resource_record_type
}
}
zone_id = var.phz_id
name = each.value.name
type = each.value.type
records = [ each.value.record]
ttl =60
}
資源 "aws_acm_certificate_validation" "nonprod_cert_validated" {
certificate_arn = aws_acm_certificate.nonprod_cert.arn {
validation_record_fqdns = [for record in aws_route53_record. nonprod_cert_record : record.fqdn]。
depends_on = [
aws_acm_certificate.nonprod_cert,
aws_route53_record.nonprod_cert_record
]
}
我不理解的具體行是 route53 記錄中的那一行。我知道for_each引數可以用來從一個塊中創建多個資源,但我找不到任何地方可以解釋這個for回圈在里面做什么。如果有人能解釋一下,那就太好了!
uj5u.com熱心網友回復:內部for "回圈 "創建了for_each的資料,然后進行迭代。具體來說,each.key將是dvo.domain_name,each.value將是
{
name = dvo.resource_record_namerecord = dvo.resource_record_value
type = dvo.resource_record_type
}
你可以簡單地把它移到一個locals塊中,事先不要讓它在一行中出現:
locals {
records = {
for dvo in aws_acm_certificate.nonprod_cert.domain_validation_options : dvo.domain_name => {
name = dvo.resource_record_name record = dvo.resource_record_value
type = dvo.resource_record_type
}
}
}
資源 "aws_route53_record"/span> "nonprod_cert_record"/span> {
for_each = local.records[/span]。
zone_id = var.phz_id
name = each.value.name
type = each.value.type
records = [ each.value.record]
ttl =60
}
這將產生完全相同的效果。
uj5u.com熱心網友回復:
首先他們使用for運算式將一種型別的物件轉換成另一種型別。在這種情況下,他們正在將domain_validation_options的串列轉換為可用于創建aws_route53_record資源的物件串列。
接下來他們使用for_each來為for運算式所產生的串列中的每個元素創建一個新的aws_route53_record資源。
這里需要注意的關鍵是:
for被用來將一個物件的串列轉換成不同物件的串列。for_each用于從一個串列、集合或價值地圖中創建多個資源。
我強烈建議花時間瀏覽Terraform 學習網站,或者至少瀏覽Terraform 檔案,以學習基本的關鍵詞和整體語法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312337.html
標籤:
