我想用terraform部署我的API网关,使用swagger文件来描述我的API。swagger.yaml看起来像这样:
swagger: '2.0'
info:
version: '1.0'
title: "CodingTips"
schemes:
- https
paths:
"/api":
get:
description: "Get coding tips"
produces:
- application/json
x-amazon-apigateway-integration: ${apiIntegration}
responses:
'200':
description: "Codingtips were successfully requested"
Terraform给了我一个BadRequestException
说The REST API doesn't contain any methods
。
因此,我认为它正在尝试部署REST API,而不等待创建该API的方法和集成。
这让我想到了必须将DEPENDS_ON
添加到aws_api_gateway_deployment
的方向。然而,我不知道依赖于什么,因为我没有使用swagger定义方法和集成资源。它们应该自动从 Swagger 的定义中扣除。
我的想法是否正确?如果是,我必须让我的aws_api_gateway_deployment
依赖于什么?还是我尝试部署这个API的方式有其他问题。
我的apigateway.tf
文件看起来像这样:
resource "aws_api_gateway_rest_api" "codingtips-api-gateway" {
name = "ServerlessExample"
description = "Terraform Serverless Application Example"
body = "${data.template_file.codingtips_api_swagger.rendered}"
}
locals{
"get_codingtips_arn" = "${aws_lambda_function.get-tips-lambda.invoke_arn}"
"x-amazon-coding-tips-apigateway-integration" = <<EOF
#
uri = "${local.get_codingtips_arn}"
passthroughBehavior: when_no_match
httpMethod: POST
type: aws_proxy
credentials: "${aws_iam_role.api_gateway_role.arn}"
EOF
}
data "template_file" codingtips_api_swagger{
template = "${file("./swagger.yaml")}"
vars {
apiIntegration = "${indent(8, local.x-amazon-coding-tips-apigateway-integration)}"
}
}
resource "aws_api_gateway_deployment" "codingtips-api-gateway-deployment" {
rest_api_id = "${aws_api_gateway_rest_api.codingtips-api-gateway.id}"
stage_name = "test"
}
如何修复BadRequestException: The REST API doesn't contain any methods
?
1条答案
按热度按时间wz3gfoph1#
我发现了问题所在。这是
locals{}
块中的语法错误。uri =
应该是uri:
。使用冒号而不是等号。然后块看起来像这样:通过研究,我发现当你在swagger.yaml中指定
x-amazon-apigateway-integration
时,读起来更容易:terraform中的
data{}
和locals{}
块看起来像: