我正在使用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: Error creating API Gateway Stage: ConflictException: Stage already exists status code: 409, request id: f67a10c4-8aad-11e8-b486-c337ea2d214f

这里似乎 aws_api_gateway_deployment 已经创建了阶段,因此 aws_api_gateway_stage 资源也无法创建它 . 如果我将阶段添加到部署的"depends_on"以便首先创建阶段,它会抱怨两者之间存在循环 .

所以,似乎:

  • aws_api_gateway_stage 仅用于向部署添加其他阶段,而不是创建用于部署的阶段

  • aws_api_gateway_deployment 不允许在创建阶段时指定标记 .

有任何想法吗?我错过了什么?