Terraform l oop через каталог Swagger Docs и создание API - PullRequest
1 голос
/ 05 августа 2020

Вопрос:

Я хочу, чтобы Terraform подключился к l oop через каталог, содержащий документы Swagger (спецификации OpenAPI), и создал из них AWS Gateway REST API

Настройка:

У меня следующая структура каталогов:

./
 ./swagger_docs/
              api-some-name swagger.yml
              api-some-other-name swagger.yml
              ... (many more)
 ./src/
              main.tf

Внутри моего main.tf Я хочу иметь возможность использовать файлы swagger_docs для создать AWS ресурсы шлюза API.

В настоящее время main.tf выглядит следующим образом:

provider "aws" {
  version = "~> 3.0"
  region = "eu-west-1"
}

locals {
  api_name = "api-some-name"
  template_file = file("../swagger_docs/${local.api_name} swagger.yml")
}

resource "aws_api_gateway_rest_api" "MyDemoAPI" {
  name        = "Some API Name"
  description = "Some description for the API"
  body = local.template_file
}

Это успешно создает один ресурс в AWS API-шлюзе.

Как я могу изменить это значение на l oop через каталог swagger_docs и использовать все файлы swagger, чтобы мне не приходилось делать это вручную?

1 Ответ

3 голосов
/ 05 августа 2020

Вы можете использовать fileset функцию для глобализации всех файлов в этом каталоге. Судя по предоставленной информации, это конфигурация root, а не явный модуль. Следовательно, мы можем использовать следующую функцию:

fileset(path.root, "../swagger_docs/*.yml")

, и это вернет список всех документов Swagger API в этом каталоге. Затем мы можем выполнить итерацию по нему в вашем aws_api_gateway_rest_api ресурсе, например:

resource "aws_api_gateway_rest_api" "MyDemoAPIs" {
  for_each = toset(fileset(path.root, "../swagger_docs/*.yml"))

  name        = regex(each.key, "(.*) swagger.yml")[0] # regular expression to capture the name of the api from the document file name
  description = "Some description for the API"
  body        = file(each.key) # content of specific swagger doc in the iterator
}

, и это создаст ресурс AWS API Gateway для каждого документа Swagger с содержимым и именем Dynami c.

...