Я использую terraform для создания "aws_api_gateway_rest_api". Я хотел бы использовать OpenAPI / Swagger для определения API. Прямо сейчас я использую «template_file» для генерации окончательного OpenAPI JSON в качестве атрибута тела. Примерно так:
resource "aws_api_gateway_rest_api" "myapi" {
name = "MYAPI"
endpoint_configuration {
types = ["REGIONAL"]
}
binary_media_types = [
"application/json"
]
body = "${data.template_file.swagger.rendered}"
}
Это работает нормально, если у меня также нет авторизатора:
resource "aws_api_gateway_authorizer" "cognito_authorizer" {
name = "cognito-authorizer"
rest_api_id = aws_api_gateway_rest_api.myapi.id
identity_source = "method.request.header.Authorization"
type = "COGNITO_USER_POOLS"
provider_arns = ["${aws_cognito_user_pool.pool.arn}"]
}
Ссылка на авторизатор в файле определения API по имени:
"security": [
{
"cognito-authorizer": [
"cognito-authorizer"
]
}
],
Очевидная проблема заключается в том, что terraform развертывает ресурсы и методы API до , когда был создан авторизатор:
- Создайте API и все ресурсы, методы (на которые ссылается Authorizer нет существует еще)
- Создать авторизатор
Terraform "apply" не показывает никаких проблем, но в развернутых методах API нет авторизатора.
Проблема существует только при использовании атрибута "body". Если я определяю ресурсы API, методы и интеграции непосредственно в terraform, зависимости можно разрешить очень хорошо, так как порядок создания:
- Создать ресурс API
- Создать авторизатор
- Создание ресурсов, методов и интеграций (ссылочный авторизатор существует)
Мне нужен ресурс terraform, который выполняет те же функции, что и атрибут body, но отдельно от создания API. Есть ли альтернатива использованию атрибута "body" для использования OpenAPI / Swagger с "aws_api_gateway_rest_api"?