Reputation: 7371
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?
Upvotes: 4
Views: 1415
Reputation: 56859
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")
}
Upvotes: 2
Reputation: 8937
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.
Upvotes: 1