我正在使用 Hashicorp Terraform 定义一个 AWS API 网关来访问 Lambda 函数。我有一个要求,我需要使用特定标签标记我的 AWS 资源,以便可以跟踪成本。Terraform 似乎允许大多数资源这样做。但是,在使用aws_api_gateway_deployment创建 API 网关阶段时,我没有指定标签的选项。
我看到 Terraform 最近添加了资源aws_api_gateway_stage。这确实允许指定标签。但是,aws_api_gateway_stage需要aws_api_gateway_deployment。如果我给他们相同的“stage_name”:
resource "aws_api_gateway_stage" "PlayLambdaApiGatewayStage" {
stage_name = "${environment}"
rest_api_id = "${aws_api_gateway_rest_api.PlayLambdaApiGateway.id}"
deployment_id = "${aws_api_gateway_deployment.PlayLambdaApiGatewayDeployment.id}"
tags = {
cost-allocation = "play-${var.environment}"
}
}
resource "aws_api_gateway_deployment" "PlayLambdaApiGatewayDeployment" {
depends_on = [
"aws_api_gateway_integration.PlayLambdaApiLambdaIntegration",
"aws_api_gateway_integration.PlayLambdaApiLambdaIntegrationRoot"
]
rest_api_id = "${aws_api_gateway_rest_api.PlayLambdaApiGateway.id}"
stage_name = "${var.environment}"
}
然后他们两个资源都尝试创建舞台,我得到一个错误:
aws_api_gateway_stage.PlayLambdaApiGatewayStage:创建 API 网关阶段时出错:ConflictException:阶段已存在状态代码:409,请求 ID:f67a10c4-8aad-11e8-b486-c337ea2d214f
在这里,aws_api_gateway_deployment似乎已经创建了舞台,因此aws_api_gateway_stage资源也未能创建它。如果我将阶段添加到部署的“depends_on”以便首先创建阶段,它会抱怨两者之间存在循环。
所以,看起来像:
- aws_api_gateway_stage仅用于向部署添加其他阶段,而不是创建用于部署的阶段
- aws_api_gateway_deployment不允许在创建阶段时指定标签。
有任何想法吗?我错过了什么?