使用Terraform配置时无法关闭API Gateway缓存,求解决方案
解决API Gateway缓存无法通过Terraform关闭的问题
问题根源
AWS API Gateway的缓存控制分为阶段级和方法级两层配置,仅通过aws_api_gateway_method_settings关闭方法缓存可能不生效——如果阶段本身开启了缓存集群,或者集成请求存在缓存配置,会覆盖方法级设置。
具体修复步骤
关闭阶段级缓存集群
在aws_api_gateway_stage资源中明确添加cache_cluster_enabled = false,这是确保缓存完全关闭的核心配置。强制触发新部署
给aws_api_gateway_deployment添加触发器,确保配置变更能被正确发布到阶段,避免因Terraform未检测到变更导致部署不更新。配合方法级缓存关闭
保留原aws_api_gateway_method_settings中的caching_enabled = false,确保所有方法的缓存行为一致。
调整后的完整代码
resource "aws_api_gateway_method" "proxy" { rest_api_id = aws_api_gateway_rest_api.dlx_mdm.id resource_id = aws_api_gateway_resource.proxy.id http_method = "ANY" authorization = "CUSTOM" authorizer_id = aws_api_gateway_authorizer.dlx_mdm_authorizer.id request_parameters = { "method.request.path.proxy" = true } } resource "aws_api_gateway_stage" "mdm_stage" { depends_on = [aws_cloudwatch_log_group.mdm_stage_log_group] stage_name = local.stage_name rest_api_id = aws_api_gateway_rest_api.dlx_mdm.id deployment_id = aws_api_gateway_deployment.mdm_deployment.id # 明确关闭阶段级缓存集群 cache_cluster_enabled = false } resource "aws_api_gateway_method_settings" "method_settings" { rest_api_id = aws_api_gateway_rest_api.dlx_mdm.id stage_name = aws_api_gateway_stage.mdm_stage.stage_name method_path = "*/*" settings { data_trace_enabled = true metrics_enabled = true logging_level = "INFO" caching_enabled = false } } # 强制触发部署更新,确保配置生效 resource "aws_api_gateway_deployment" "mdm_deployment" { rest_api_id = aws_api_gateway_rest_api.dlx_mdm.id triggers = { redeployment = timestamp() } lifecycle { create_before_destroy = true } }
额外检查项
- 如果API配置了集成请求(如Lambda集成),需确认集成请求未开启缓存:在
aws_api_gateway_integration资源中不要配置cache_namespace,或明确关闭集成侧的缓存设置。 - 登录AWS控制台查看阶段的部署历史,确认最新部署已应用修改后的配置。
内容的提问来源于stack exchange,提问作者rboarman
相关产品推荐
相关产品推荐

