I have OpenAPI 3.0 specification (YAML) of my REST API and I need to describe the same REST API in Terraform template (HCL) as AWS API Gateway resources.
Are there any tools which could help me to convert it automatically?
AWS' API Gateway directly supports importing an OpenAPI 3.0 spec to define all of the relevant parts of an API Gateway.
With Terraform this can be done with the aws_api_gateway_rest_api resource and the body parameter.
An example is given in the tests for the resource:
resource "aws_api_gateway_rest_api" "test" {
name = "foo"
body = <<EOF
{
"swagger": "2.0",
"info": {
"title": "foo",
"version": "2017-04-20T04:08:08Z"
},
"schemes": [
"https"
],
"paths": {
"/test": {
"get": {
"responses": {
"200": {
"description": "200 response"
}
},
"x-amazon-apigateway-integration": {
"type": "HTTP",
"uri": "https://www.google.de",
"httpMethod": "GET",
"responses": {
"default": {
"statusCode": 200
}
}
}
}
}
}
}
EOF
}
You can also use the file function to load the OpenAPI spec from your YAML file directly:
resource "aws_api_gateway_rest_api" "test" {
name = "foo"
body = file("${path.module}/api.yml")
}
Perhaps try the AWS resource itself.
According to the documentation for aws_api_gateway_rest_api you can pass a body argument which is
An OpenAPI specification that defines the set of routes and integrations to create as part of the REST API.
Then, if you need to modify the OpenAPI spec some, you could use your favorite programming language that speaks JSON (e.g. node, java, even jq, etc...).
For more information and to see which extensions are available, see the API Gateway docs.