Question:
I want to deploy this in a stage with cloudwatch metrics enabled. For that i need to use aws_api_gateway_method_settings
which needs stage name. If don’t create a stage using aws_api_gateway_stage
it is throwing an error saying stage not exists. When i am trying to create a stage its saying stage already exists.
One solution i tried is creating two stages one using aws_api_gateway_deployment
and another using aws_api_gateway_stage
with two different names. Is there any other solution for this?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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" } } |
Exception:
1 2 |
aws_api_gateway_stage.test: Error creating API Gateway Stage: ConflictException: Stage already exists |
Answer:
I figured out that we don’t need to create a stage explicitly. aws_api_gateway_deployment
creates a stage, but need to set depends_on
. I tried this earlier without depends_on
which throws an error saying stage not exists
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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" } } |