Terraform计划删除未手动创建的OPTIONS类型API Gateway集成资源原因
问题描述
执行terraform plan操作时,发现Terraform计划删除4个非手动创建的资源。这些资源名称与我创建的资源一致,但HTTP方法为OPTIONS(我创建的所有资源均使用GET/POST方法)。我了解OPTIONS方法用于浏览器预检请求,但不清楚这与当前情况的关联。以下是其中一个待删除资源的示例:
> # module.RESOURCENAME.aws_api_gateway_integration._ will be destroyed > - resource "aws_api_gateway_integration" "_" { > - cache_key_parameters = [] -> null > - cache_namespace = "zsfbtm" -> null > - connection_type = "INTERNET" -> null > - http_method = "OPTIONS" -> null > - id = "agi-234cjz85m3-zsfbtm-OPTIONS" -> null > - passthrough_behavior = "WHEN_NO_MATCH" -> null > - request_parameters = {} -> null > - request_templates = { > - "application/json" = jsonencode( > { > - statusCode = 200 > } > ) > } -> null > - resource_id = "zsfbtm" -> null > - rest_api_id = "234cjz85m3" -> null > - timeout_milliseconds = 29000 -> null > - type = "MOCK" -> null > }
请问导致这些资源被标记为待删除的原因是什么?
原因分析
- 资源未在Terraform配置中声明:Terraform仅管理本地配置文件中明确定义的资源。这些OPTIONS方法的API Gateway集成是AWS自动创建的(用于处理CORS预检请求),但你的Terraform代码里没有定义这类资源,因此Terraform会将其判定为“超出配置范围的额外资源”,计划删除以对齐配置与远程状态。
- CORS配置的变更或缺失:如果之前通过AWS控制台、CLI或其他方式为API Gateway开启了CORS,AWS会自动生成这些OPTIONS方法的MOCK集成。若后续你的Terraform配置未包含对应的CORS设置,或者移除了相关配置,Terraform对比后会识别出这些自动生成的资源不在当前配置内,进而标记删除。
- 状态文件未记录该类资源:Terraform的状态文件(
terraform.tfstate)中原本没有记录这些自动创建的OPTIONS资源,当执行terraform plan时,Terraform对比远程AWS资源与本地配置、状态文件,发现远程存在未被管理的资源,就会计划将其删除。
内容的提问来源于stack exchange,提问作者user3454396
相关产品推荐
相关产品推荐

