Azure APIM 定义的 Terrform 模块 [英] Terrform Module for Azure APIM Definitions

查看:16
本文介绍了Azure APIM 定义的 Terrform 模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 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:

NOTE: This is just an example .You can provide your own definition in the resource "azurerm_api_management_api_schema" "example" value.

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 模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆