如何使用 terraform 在 API Gateway 中创建启用了 cloudwatch 指标的阶段?

Gan*_*aju 6 amazon-web-services amazon-cloudwatch terraform aws-api-gateway

我想在启用了 cloudwatch 指标的阶段部署它。为此,我需要使用aws_api_gateway_method_settingswhich need stage name。如果不使用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"
  }
}
Run Code Online (Sandbox Code Playgroud)

例外:

aws_api_gateway_stage.test: Error creating API Gateway Stage: ConflictException: Stage already exists
Run Code Online (Sandbox Code Playgroud)

Gan*_*aju 4

我发现我们不需要明确创建一个阶段。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"
  }
}
Run Code Online (Sandbox Code Playgroud)