amazon-web-services - 如何使用 Terraform 在 AWS API Gateway 部署阶段分配标签

标签 amazon-web-services aws-lambda terraform aws-serverless

我正在使用 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 不允许在创建阶段时指定标签。

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

最佳答案

看来 api_gateway_deployment 中的 stage_name 字段实际上应该是可选的。有一个 PR 打开来解决目前还没有的事实。目前的解决方法是将 stage_name 设置为空字符串,如下所示:

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  = ""
}

像这样,除了您在 aws_api_gateway_stage 中指定的阶段之外,不会创建其他阶段,您可以为其设置标签。

关于amazon-web-services - 如何使用 Terraform 在 AWS API Gateway 部署阶段分配标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407771/

相关文章:

Terraform - 无法从 github 获取模块

amazon-web-services - 使用 AWS CodePipeline 回滚构建

amazon-web-services - AWS 经典 LB 更改 IP/断开连接导致 RabbitMQ 上的消息丢失

amazon-web-services - 如何在 aws 上为 kubernetes 创建应用程序负载均衡器

amazon-web-services - 如何使用 swagger 和 Rest Api 添加 Lambda 触发器?

amazon-web-services - Terraform 不会将步骤函数部署到 API 网关

swift - 如何使用 AWS Mobile Hub Helper 调用 lambda 函数?

javascript - Node.js http.get xml 返回 'escaped'

node.js - 从 DynamoDB 查询多个项目

azure - Terraform 从现有 VNET/子网检索 CIDR/前缀