首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在部署的Azure api管理器中应用策略

无法在部署的Azure api管理器中应用策略
EN

Stack Overflow用户
提问于 2021-08-12 17:38:46
回答 2查看 1.1K关注 0票数 0

在我的apim中尝试在我的操作上部署策略时,我无法实现我的策略。

错误日志

代码语言:javascript
运行
复制
Error: creating or updating API Policy (Resource Group "rg-opendata-dev" / API Management Service "apimopendata-dev" / API "apim-opendata-dev"): apimanagement.APIPolicyClient#CreateOrUpdate: Failure responding to request: StatusCode=400 -- Original Error: autorest/azure: Service returned an error. Status=400 Code="ValidationError" Message="Entity with specified identifier not found"
│ 
│   with azurerm_api_management_api_policy.apipolicy,
│   on main.tf line 78, in resource "azurerm_api_management_api_policy" "apipolicy":
│   78: resource "azurerm_api_management_api_policy" "apipolicy" {
│ 
╵

我不明白这一点,因为我很确定我写的变量是正确的,还是我给了这个变量错误的名称?

您还认为用下面所示的xml代码添加策略是部署策略的正确方法吗?

main.tf文件的一部分

代码语言:javascript
运行
复制
resource "azurerm_api_management_api" "api" {
    name = "apim-opendata-${var.env}"
    resource_group_name = data.azurerm_resource_group.rg.name
    api_management_name = azurerm_api_management.apim.name
    revision = "1"
    display_name = "${var.display_name}"
    service_url = "${var.service_url}"
    protocols = ["https"]
}

resource "azurerm_api_management_api_operation" "apioperation" {
  operation_id = "get-data"
  api_name = azurerm_api_management_api.api.name
  api_management_name = azurerm_api_management.apim.name
  resource_group_name = data.azurerm_resource_group.rg.name
  display_name = "Get Data"
  method = "GET"
  url_template = "/"
  description = "Get data inside of the container"

  response {
    status_code = 200
  }
}

resource "azurerm_api_management_api_policy" "apipolicy" {
    api_name = azurerm_api_management_api.api.name
    api_management_name = azurerm_api_management.apim.name
    resource_group_name = data.azurerm_resource_group.rg.name

    xml_content = <<XML
<policies>
    <inbound>
        <set-variable name="ContainerName" value="@(context.Request.Headers.GetValueOrDefault("Container"))" />
        <set-variable name="BlobName" value="@(context.Request.Headers.GetValueOrDefault("Blob"))" />
        <base />
        <set-header name="Blob" exists-action="delete" />
        <set-header name="Container" exists-action="delete" />
        <set-header name="x-ms-version" exists-action="override">
            <value>@{string version = "2017-11-09"; return version;}</value>
        </set-header>
        <set-backend-service base-url="@{
string containerName = context.Variables.GetValueOrDefault<string>("ContainerName");
string blobName = context.Variables.GetValueOrDefault<string>("BlobName");
return String.Format("https://${var.storage_account_name}.blob.core.windows.net/{0}/{1}", containerName, blobName);
}" />
        <authentication-managed-identity resource="https://storage.azure.com/" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>
XML  
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-20 10:53:36

此问题可能是由于未设置基-URL&后端- id属性而发生的,在这种情况下,API Manager服务不会使用id检测后端组件。因此,我们需要同时指定基URL和后端id。

同样的问题的解决方案

如果您仍然面临问题,请检查以下步骤:

此策略将调用路由到两个后端服务中最近的一个,如果返回HTTP 404,则该策略将失败转移到辅助服务器。

它假设API管理器部署在‘东美国’和‘西欧’。同样,该策略(按原样)假设在同一区域提供两个后端服务,vis:

https://hello-eus.azurewebsites.net/ (东美国);及

https://hello-weu.azurewebsites.net/ (西欧)

如果从后端服务返回失败(HTTP 404),策略将重新路由调用到故障转移区域。

该策略使用缓存的值来跟踪哪个服务在过去10秒中返回了错误,以避免将新请求路由到可能会失败的后端。

代码语言:javascript
运行
复制
<retry condition="@(context.Response.StatusCode == 404)" count="2" interval="1" max-interval="10" delta="1" first-fast-retry="true">

使用重试策略中的逻辑引用这里

参考这里

票数 1
EN

Stack Overflow用户

发布于 2022-11-24 10:45:47

在使用OpenAPI JSON文件在APIM中创建API时,我也面临着同样的问题。

我能够通过在(azurerm_api_management_api_operation.apioperation资源中添加depends_on =依赖资源名称(在您的例子中是azurerm_api_management_api_policy )来解决这个问题。

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68762007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档