首页 文章

如何使用terraform在启用了cloudwatch指标的API网关中创建一个舞台?

提问于
浏览
4

我想在启用了cloudwatch指标的阶段部署它 . 为此,我需要使用需要阶段名称的 aws_api_gateway_method_settings . 如果不使用 aws_api_gateway_stage 创建一个阶段,则会抛出错误,说明阶段不存在 . 当我试图创建一个舞台时,它的说法已经存在 .

我试过的一个解决方案是使用 aws_api_gateway_deployment 创建两个阶段,使用具有两个不同名称的 aws_api_gateway_stage 创建另一个阶段 . 还有其他解决方案吗?

resource "aws_api_gateway_deployment" "test-deploy" {
  depends_on = [ /*something goes here*/]

  rest_api_id = "${aws_api_gateway_rest_api.test.id}"
  stage_name  = "${var.stage_name}"

  variables = {
    "function" = "${var.lambda_function_name}"
  }
}

resource "aws_api_gateway_stage" "test" {
  stage_name = "${var.stage_name}"
  rest_api_id = "${aws_api_gateway_rest_api.test.id}"
  deployment_id = "${aws_api_gateway_deployment.test-deploy.id}"
}

resource "aws_api_gateway_method_settings" "settings" {
  rest_api_id = "${aws_api_gateway_rest_api.test.id}"
  stage_name  = "${aws_api_gateway_stage.test.stage_name}"
  method_path = "*/*"

  settings {
    metrics_enabled = true
    logging_level = "INFO"
  }
}

例外:

aws_api_gateway_stage.test: Error creating API Gateway Stage: ConflictException: Stage already exists

1 回答

  • 3

    我发现我们不需要明确地创建一个阶段 . aws_api_gateway_deployment 创建一个阶段,但需要设置 depends_on . 我在没有 depends_on 的情况下尝试了这个,它抛出错误说 stage not exists .

    resource "aws_api_gateway_deployment" "test-deploy" {
      depends_on = [ /*something goes here*/]
      rest_api_id = "${aws_api_gateway_rest_api.test.id}"
      stage_name  = "${var.stage_name}"
      variables = {
        "function" = "${var.lambda_function_name}"
      }
    }
    
    resource "aws_api_gateway_method_settings" "settings" {
      depends_on  = ["aws_api_gateway_deployment.test-deploy"]
      rest_api_id = "${aws_api_gateway_rest_api.test.id}"
      stage_name  = "${var.stage_name}"
      method_path = "*/*"
      settings {
        metrics_enabled = true
        logging_level = "INFO"
      }
    }
    

相关问题