ข้อผิดพลาด Terraform ในการสร้างทรัพยากรเกตเวย์ API บ่นว่าทรัพยากรอื่นที่มีพาเรนต์เดียวกันมีชื่อนี้อยู่แล้ว

ฉันกำลังสร้างทรัพยากร API Gateway ชื่อ lang:

resource "aws_api_gateway_resource" "lang" {
  path_part   = "lang"
  parent_id   = aws_api_gateway_resource.api.id
  rest_api_id = aws_api_gateway_rest_api.root_api.id
}

หลังจากสร้าง API สำเร็จแล้ว เมื่อรัน terraform apply ครั้งต่อ ๆ มา ฉันได้รับข้อผิดพลาดนี้:

Error: Error creating API Gateway Resource: ConflictException: Another resource with the same parent already has this name: lang

บล็อกทรัพยากรด้านบนเป็นบล็อกเดียวที่มีชื่อนั้นอย่างแน่นอน ฉันค้นหาสิ่งนี้มามากพอที่จะรู้ว่า terraform กำลังบ่นว่ามีทรัพยากรที่เรียกว่า lang มีอยู่แล้วและไม่สามารถสร้างใหม่ได้ สิ่งที่ฉันไม่รู้ว่าจะต้องทำลายมันให้ได้ก่อน

ฉันได้ลองเพิ่มสิ่งนี้ลงในสคริปต์ของฉันแล้ว:

resource "aws_api_gateway_deployment" "deployment" {
  rest_api_id   = aws_api_gateway_rest_api.root_api.id
  stage_name    = var.envName
  
  triggers = {
    redeployment = sha1(jsonencode(aws_api_gateway_rest_api.root_api.body))
  }

  lifecycle {
    create_before_destroy = true
  }
}

….ไม่มีประโยชน์..

คุณสมบัติ create_before_destroy ไม่ควรทำลาย API และทำให้ถูกสร้างขึ้นใหม่หรือเฉพาะสเตจเท่านั้น

ฉันจะเปลี่ยนแปลงทรัพยากร lang ได้อย่างไรหากบล็อกทรัพยากรไม่สามารถทำได้ นี่ดูเหมือนเป็นปัญหาวงกลมพื้นฐานสำหรับฉัน


person Matt W    schedule 22.02.2021    source แหล่งที่มา
comment
เหตุใดทรัพยากร lang API (ไม่ใช่ทรัพยากร TF) จึงมีอยู่แล้ว คุณสร้างมันด้วยตนเองโดยใช้ AWS console/cli/sdk หรือไม่   -  person Marcin    schedule 23.02.2021
comment
ใกล้ด้านบนสุดที่ฉันได้กล่าวไว้เมื่อใช้ Terraform ให้ใช้ครั้งต่อๆ ไป ซึ่งหมายความว่ามันถูกสร้างขึ้นในครั้งแรกที่ฉันเรียกใช้การสมัคร ปรากฏว่าไม่สามารถเปลี่ยนแปลงได้ในการสมัครต่อไปนี้   -  person Matt W    schedule 23.02.2021


คำตอบ (1)


น่ารำคาญ นี่มันพิมพ์ผิดตอนดึก...

ฉัน (จงใจ) คัดลอกและวางบล็อก resource "aws_api_gateway_resource" "lang" และลืมเปลี่ยนชื่อสำเนาเมื่อดำเนินการและอัปเดตสำเนาทั้งหมดเพื่อวัตถุประสงค์ของตนเอง

person Matt W    schedule 24.02.2021