问题描述
我正在使用 Terraform 部署 Azure Api 管理.到目前为止,能够创建服务、api、策略和操作,但没有一个模块可以在其中找到操作的 json 格式定义以及如何将操作与定义相关联.
这是我找到的所有组件:
数据azurerm_resource_group"rg"{名称 = ${var.resource_group_name}"}数据azurerm_api_management"apim_service"{名称=${var.apim_service}"resource_group_name = "${var.resource_group_name}"}地形{required_providers {天蓝色 = {来源=hashicorp/azurerm";版本== 2.66.0"}}}# 配置 Microsoft Azure 提供程序提供者azurerm"{特征 {}}资源azurerm_api_management_api"样本 API"{名称=测试2";resource_group_name = data.azurerm_resource_group.rg.nameapi_management_name = data.azurerm_api_management.apim_service.name修订=1";display_name = "API-1";路径 = API"协议 = [https",http"]描述=示例";}资源azurerm_api_management_api_operation";获取信息"{operation_id =信息";api_name = azurerm_api_management_api.sample-api.nameapi_management_name = data.azurerm_api_management.apim_service.nameresource_group_name = data.azurerm_resource_group.rg.namedisplay_name = "获取信息测试";方法=获取";url_template = "/info";描述=foo";回复 {状态码 = 200}回复 {状态码 = 400}回复 {状态码 = 401}回复 {状态码 = 403}回复 {状态码 = 404}}资源azurerm_api_management_api_policy"样本 API"{api_name = azurerm_api_management_api.sample-api.nameapi_management_name = data.azurerm_api_management.apim_service.nameresource_group_name = data.azurerm_resource_group.rg.name#operation_id = azurerm_api_management_api_operation.sample-api.operation_idxml_content = <<XML<政策><入站><基础/><rewrite-uri 模板="/api/info";复制参数=真";/><set-backend-service base-url="https://foo-dev.azurewebsites.net"/></入站><后端><基础/></后端><出境><基础/></出站><错误时><基础/></on-error></政策>XML
}
我使用您的代码在我的环境中进行了一些更改,对此进行了测试.如果您想将定义添加到操作中,则可以使用以下内容来完成:
代码:
数据 "azurerm_resource_group" "rg" {name = "您的资源组名称"}数据azurerm_api_management"apim_service"{name = "您的 apim 服务名称"resource_group_name = data.azurerm_resource_group.rg.name}地形{required_providers {天蓝色 = {来源 =hashicorp/azurerm"版本 = "=2.66.0"}}}# 配置 Microsoft Azure 提供程序提供者azurerm"{特征 {}}资源 "azurerm_api_management_api" "sample-api" {名称 = 测试 2"resource_group_name = data.azurerm_resource_group.rg.nameapi_management_name = data.azurerm_api_management.apim_service.name修订=1"display_name = "API-1"路径 = "API"协议 = ["https", "http"]描述=示例"}资源azurerm_api_management_api_schema"示例"{api_name = azurerm_api_management_api.sample-api.nameapi_management_name = azurerm_api_management_api.sample-api.api_management_nameresource_group_name = azurerm_api_management_api.sample-api.resource_group_nameschema_id = "示例模式"content_type = "应用程序/vnd.oai.openapi.components+json"值 = <<JSON{特性": {"contentType": "application/vnd.oai.openapi.components+json",文档": {组件": {模式":{定义1":{类型":对象",特性": {字符串1":{类型":字符串"}}},定义2":{类型":对象",特性": {字符串2":{类型":整数"}}}}}}}}JSON}资源azurerm_api_management_api_operation"获取信息"{operation_id = "信息"api_name = azurerm_api_management_api.sample-api.nameapi_management_name = data.azurerm_api_management.apim_service.nameresource_group_name = data.azurerm_resource_group.rg.namedisplay_name = "获取信息测试"方法=发布"url_template = "/信息"描述=富"要求 {表示{schema_id = azurerm_api_management_api_schema.example.schema_idcontent_type = azurerm_api_management_api_schema.example.content_type示例 = azurerm_api_management_api_schema.example.valuetype_name = "测试"}}回复 {状态码 = 200}回复 {状态码 = 400}回复 {状态码 = 401}回复 {状态码 = 403}回复 {状态码 = 404}}
输出:
注意:这只是一个例子.您可以在资源azurerm_api_management_api_schema";示例"
值.
至于解决方案,我们已经创建了 api 模式,然后通过添加以下内容在操作中使用它:
请求{表示{schema_id = azurerm_api_management_api_schema.example.schema_idcontent_type = azurerm_api_management_api_schema.example.content_type示例 = azurerm_api_management_api_schema.example.valuetype_name = "测试";}}
已为其创建定义.
I´m using Terraform to deploy Azure Api management. So far Was able to create the service, api, policies and operations but there is not a module in where I can find definitions in json format for the operations and how I can associate an operation with a definition.
This are all the components that I found: link
Is there a way of include them with terraform somehow?
data "azurerm_resource_group" "rg" {
name = "${var.resource_group_name}"
}
data "azurerm_api_management" "apim_service" {
name = "${var.apim_service}"
resource_group_name = "${var.resource_group_name}"
}
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=2.66.0"
}
}
}
# Configure the Microsoft Azure Provider
provider "azurerm" {
features {}
}
resource "azurerm_api_management_api" "sample-api" {
name = "Test-2"
resource_group_name = data.azurerm_resource_group.rg.name
api_management_name = data.azurerm_api_management.apim_service.name
revision = "1"
display_name = "API-1"
path = "API"
protocols = ["https", "http"]
description = "example"
}
resource "azurerm_api_management_api_operation" "get-info" {
operation_id = "info"
api_name = azurerm_api_management_api.sample-api.name
api_management_name = data.azurerm_api_management.apim_service.name
resource_group_name = data.azurerm_resource_group.rg.name
display_name = "Get info Testing"
method = "GET"
url_template = "/info"
description = "foo"
response {
status_code = 200
}
response {
status_code = 400
}
response {
status_code = 401
}
response {
status_code = 403
}
response {
status_code = 404
}
}
resource "azurerm_api_management_api_policy" "sample-api" {
api_name = azurerm_api_management_api.sample-api.name
api_management_name = data.azurerm_api_management.apim_service.name
resource_group_name = data.azurerm_resource_group.rg.name
#operation_id = azurerm_api_management_api_operation.sample-api.operation_id
xml_content = <<XML
<policies>
<inbound>
<base />
<rewrite-uri template="/api/info" copy-params="true" />
<set-backend-service base-url="https://foo-dev.azurewebsites.net" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
XML
}
I tested this on my environment using your code by doing some changes.If you want to add the definition to the operation, then you can do it by using something like below:
CODE:
data "azurerm_resource_group" "rg" {
name = "Your resource group name"
}
data "azurerm_api_management" "apim_service" {
name = "your apim service name"
resource_group_name = data.azurerm_resource_group.rg.name
}
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=2.66.0"
}
}
}
# Configure the Microsoft Azure Provider
provider "azurerm" {
features {}
}
resource "azurerm_api_management_api" "sample-api" {
name = "Test-2"
resource_group_name = data.azurerm_resource_group.rg.name
api_management_name = data.azurerm_api_management.apim_service.name
revision = "1"
display_name = "API-1"
path = "API"
protocols = ["https", "http"]
description = "example"
}
resource "azurerm_api_management_api_schema" "example" {
api_name = azurerm_api_management_api.sample-api.name
api_management_name = azurerm_api_management_api.sample-api.api_management_name
resource_group_name = azurerm_api_management_api.sample-api.resource_group_name
schema_id = "example-schema"
content_type = "application/vnd.oai.openapi.components+json"
value = <<JSON
{
"properties": {
"contentType": "application/vnd.oai.openapi.components+json",
"document": {
"components": {
"schemas": {
"Definition1": {
"type": "object",
"properties": {
"String1": {
"type": "string"
}
}
},
"Definition2": {
"type": "object",
"properties": {
"String2": {
"type": "integer"
}
}
}
}
}
}
}
}
JSON
}
resource "azurerm_api_management_api_operation" "get-info" {
operation_id = "info"
api_name = azurerm_api_management_api.sample-api.name
api_management_name = data.azurerm_api_management.apim_service.name
resource_group_name = data.azurerm_resource_group.rg.name
display_name = "Get info Testing"
method = "POST"
url_template = "/info"
description = "foo"
request {
representation {
schema_id = azurerm_api_management_api_schema.example.schema_id
content_type = azurerm_api_management_api_schema.example.content_type
sample = azurerm_api_management_api_schema.example.value
type_name = "test"
}
}
response {
status_code = 200
}
response {
status_code = 400
}
response {
status_code = 401
}
response {
status_code = 403
}
response {
status_code = 404
}
}
Output:
As for the solution we have created api schema and then used it in operation by adding the below:
request {
representation {
schema_id = azurerm_api_management_api_schema.example.schema_id
content_type = azurerm_api_management_api_schema.example.content_type
sample = azurerm_api_management_api_schema.example.value
type_name = "test"
}
}
for which the definition has been created .
这篇关于Azure APIM 定义的 Terrform 模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!