Атрибут «вызовы» недействителен: значение «выходит за пределы допустимого диапазона значений»

Я хочу добавить условие, которое позволяло бы мне добавлять индивидуальный лимит скорости, только если он задан (local.limit == true), в противном случае не добавляйте его в политику. он работает нормально, если есть ограничение скорости, но если ограничения скорости нет, выдает ошибку

Атрибут «вызовы» недействителен. Значение «выходит за пределы допустимого». диапазон значений.

согласно https://learn.microsoft.com/en-us/azure/api-management/rate-limit-policy Calls является обязательным полем.

variable "rate_limit" {
  type = string
}

locals {
  j       = "context.Request.Headers.GetValueOrDefault(\"Authorization\", \"\").AsJwt()?.Subject"
  s       = "context.Subscription.Id"
  limit   = var.rate_limit != ""
}
<choose>
          <when condition = "@((${local.j} != null || ${local.s} != null) && (${local.limit == true}))">
               <rate-limit-by-key calls = "${var.rate_limit}" renewal-period = "60" counter-key = "@(${local.j} ?? ${local.s})" />
          </when>
          <when condition = "@(context.Request.Headers.GetValueOrDefault("ApiKey") == "Default")">
               <rate-limit-by-key calls = "100" renewal-period = "60" counter-key = "@(context.Request.IpAddress)" />
          </when>
</choose>

План выглядит так

<when condition = "@((context.Request.Headers.GetValueOrDefault("Authorization", "").AsJwt()?.Subject != null || context.Subscription.Id != null) && (false))">
   <rate-limit-by-key calls = "" renewal-period = "60" counter-key = "@(context.Request.Headers.GetValueOrDefault("Authorization", "").AsJwt()?.Subject ?? context.Subscription.Id)" />
</when>

Если вы передаете первое условие, выдается ошибка? @Панда

Jahnavi 11.04.2024 08:48

Да, если я получаю ограничение скорости из какой-то конфигурации API. Это работает нормально, но если в какой-то конфигурации API нет ограничения скорости, то выдается ошибка. Есть ли способ динамически добавлять условие, например, если установлено ограничение скорости, то следует добавлять только условие.

Panda 11.04.2024 09:10

Вместо передачи (${local.limit == true}) можете ли вы попробовать передать только ${local.limit}, чтобы он проверял, существует он или нет, и продолжил выполнение условий. @Панда

Jahnavi 11.04.2024 10:08

Я пробовал это раньше, но выдает ту же ошибку

Panda 11.04.2024 10:25

Вы пробовали использовать <empty-policy /> @Panda?

Jahnavi 11.04.2024 18:20

У вас есть пример?

Panda 12.04.2024 13:42
<choose><when condition='@((${local.s} != null) && ${local.limit})'> <empty-policy /> </when> Аналогично. @Панда
Jahnavi 12.04.2024 14:05

но я также хочу добавить политику, когда local.limit имеет значение false, что означает, что предоставляется ограничение скорости. И не хочу добавлять политику, если ограничение скорости не предусмотрено.

Panda 12.04.2024 14:17

Добавьте local.limit == false и попробуйте добавить указанное выше. @Панда

Jahnavi 12.04.2024 14:20

вы имеете в виду два отдельных условия?<when condition = "@((${local.j} != null || ${local.s} != null) && (${local.limit == true}))"> <rate-limit-by-key calls = "${var.rate_limit}" renewal-period = "60" counter-key = "@(${local.j} ?? ${local.s})" /> <when condition='@((${local.s} != null) && ${local.limit})'> <empty-policy /> </when>

Panda 12.04.2024 14:24

Да. Вы пробовали это? @Панда

Jahnavi 13.04.2024 16:04

я не пробовал, потому что это не то, что я хотел. Я нашел другое решение

Panda 15.04.2024 09:11
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
12
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

мне удалось это исправить

locals {
  j         = "context.Request.Headers.GetValueOrDefault(\"Authorization\", \"\").AsJwt()?.Subject"
  s   = "context.Subscription.Id"
  limit             = var.rate_limit != ""
  rate_limit_config = <<XML
  <when condition = "@(${local.j} != null || ${local.s} != null)">
                <rate-limit-by-key calls = "${var.rate_limit}" renewal-period = "60" counter-key = "@(${local.j} ?? ${local.s})" />
          </when>
  XML
}


<choose>
        ${var.api.rate_limit != "" ? local.rate_limit_config : var.api.rate_limit}
          <when condition = "@(context.Request.Headers.GetValueOrDefault("ApiKey") == "Default")">
      <rate-limit-by-key calls = "10" renewal-period = "1" counter-key = "@(context.Request.IpAddress)" />
          </when>

Другие вопросы по теме

Azure APIM и приложение-функция Oauth2.0. Аутентификация Azure AD
Политика управления API Azure: невозможно добавить условие для проверки, строка пуста
Управление API Azure (APIM) при использовании режима «Внутренний» ограничивает доступ к вызову внешних API
Есть ли способ ограничить круг пользователей Entra Id, которые могут входить на портал разработчиков управления API Azure?
Как получить журналы управления API Azure с помощью C#?
Как настроить ссылку на файлы с разбивкой на страницы в соединителе приложения логики Get Rows(V2) и передать ее через вызов API Azure?
В чем разница между Microsoft.ApiManagement/service/portalsettings и Microsoft.ApiManagement/service/portalconfigs
Включение минимальной версии apiVersion до 2021-08-01 в Azure API Management приводит к проблемам с сохранением или ошибкам развертывания для существующих приложений логики
Azure APIM: проверьте, существует ли параметр в словаре
Проблема с доступом к API Azure в Visual Studio Code