【发布时间】:2022-01-22 10:29:28
【问题描述】:
我们在 vars 中有一个前缀,它基于名为 deployment_name_modifier 的输入。
prefix = (length(var.deployment_name_modifier) != 0) ?
"${var.environment}-${var.deployment_name_modifier}-${local.service_name}" :
"${var.environment}-${local.service_name}"
这是 API 网关设置(当然不是全部):
resource "aws_apigatewayv2_api" "ui_backend_gateway" {
name = "${local.prefix}-gateway"
protocol_type = "HTTP"
cors_configuration {
allow_origins = var.environment == "prd" ? ["foo.bar.services"] : ["*"]
allow_methods = ["POST", "OPTIONS", "HEAD"]
allow_headers = [
"Content-Type", "X-Amz-Date", "X-Amz-Security-Token",
"Authorization", "X-Api-Key", "X-Requested-With", "Accept", "Access-Control-Allow-Methods",
"Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "referer", "origin",
"access-control-request-method", "sec-*"
]
max_age = 300
}
}
我想要的是一个带有 Lambda 和 API 网关的功能分支,它连接到它自己的子域,而主分支位于一组单独的资源上。
问题是使用deployment_name_modifier 设置应用此配置工作正常——直到我部署master。当我使用 deployment_name_modifier 空部署 master 时,Terraform 正在将功能分支中的子域应用到已经存在的 API 网关。我通过区分两个节目计划看到了这一点。这意味着主分支资源集的子域从dev.foo.bar.services 变为dev-1234.foo.bar.services。我真正需要的是:
dev.foo.bar.services -> API A -> Lambda A
dev-1234.foo.bar.services -> API B -> Lambda B
其中 A 是主分支,B 是功能分支(1234 是票号,它是分支名称的一部分)。更改aws_apigatewayv2_api 舞台的名称显然是不够的。
如何让 Terraform 相信我真的想要两个基于输入变量的完全独立的 API 网关?
如果我需要在这里添加一些东西(也许是子域配置?)请在评论中告诉我。
地形 1.1.3
【问题讨论】:
-
进展如何?仍然不清楚为什么你不能这样做?
-
@Marcin “问题是使用部署名称修改器集应用此配置工作正常 - 直到我部署主服务器。当我使用部署名称修改器空部署主服务器时,Terraform 正在将子域从功能分支应用到 API已经存在的网关”
标签: amazon-web-services aws-lambda terraform aws-api-gateway