Временно отключить (отключить) отдельный API в API Gateway без удаления?

#amazon-web-services #aws-api-gateway

#amazon-web-services #aws-api-gateway

Вопрос:

Возможно ли в AWS API Gateway «отключить» / «отключить» API в API Gateway, не удаляя сам API?Я надеюсь сохранить конфигурацию API, не теряя ее из-за удаления в противном случае, которого я надеюсь избежать; это также имело бы полезную параллельную мотивацию предотвращения использования API, оплачиваемого AWS.

Возможно ли это или удалить единственный вариант?

Комментарии:

1. На всякий случай, если кто-то пытается эффективно «отключить» API с поддержкой Lambda — обратите внимание, что вы также можете установить дроссель для базового Lambda ( put-function-concurrency )

Ответ №1:

вы можете установить ограничение пакетной передачи / ограничение скорости для вашего этапа равным нулю. В консоли: API Gateway -> выберите API -> Защита / регулирование -> выберите свой этап -> ИЗМЕНИТЬ регулирование маршрута по умолчанию -> Пакетное ограничение = 0, ограничение скорости = 0

Работает, по крайней мере, для меня. При вызове API вы получаете:

{«сообщение»: «Слишком много запросов»}

Комментарии:

1. Блестяще, это работает и для HTTP API, у которых нет этапов

2. Мне также нравится, как эта настройка вступает в силу сразу после нажатия кнопки Сохранить.

3. с вас все равно взимается плата или нет?

Ответ №2:

Кнопки отключения нет, но есть две возможности, которые можно рассматривать как обходной путь:

  1. Удалите этап (этапы) API. Без stage API не будет доступен.
  2. Поскольку это может быть проблематично, если есть несколько этапов с множеством пользовательских настроек, вы можете добавить Deny политику базы ресурсов в API.
 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "execute-api:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}"
        }
    ]
}
  

Политика будет отклонять все вызовы API, делая его фактически отключенным. Но вызовы все равно будут учитываться при использовании API.

Комментарии:

1. Спасибо за это; вероятно, примет это, если через несколько дней не будет других ответов.. «Запретить» звучит как достойное частичное решение, учитывая, что фактического отключения нет. Похоже, единственный способ избежать учета запросов / вызовов в отношении (оплачиваемого) использования API — это, к сожалению, действительно удалить этап.

2. Конечно, конфигурация в виде кода, фиксирующего конфигурацию API или stage, была бы надежным решением, которое в основном смягчило бы недостаток удаления [1.].

3. @cellepo Если у вас есть свой API в шаблоне CloudFormation, вы можете полностью удалить его, а затем воссоздать при необходимости.

4. Примечание: не забудьте повторно развернуть свой API после обновления политики: docs.aws.amazon.com/apigateway/latest/developerguide /. … Кроме того, вероятно, будет задержка между развертыванием и распространением изменения. Эмпирически я наблюдал задержку около 12 секунд, прежде чем «Запретить» вступило в силу.

Ответ №3:

Я бы предложил следующее в качестве обходного пути:

  1. Вы можете просто ограничить планы использования этого конкретного API, активировав Включить квоту и установив ее, например, на (1 запрос в месяц). введите описание изображения здесь

  2. Затем, при необходимости, в разделе «Ответы шлюза» вы можете переназначить ответ с превышением квоты на 500. введите описание изображения здесь

  3. Последний шаг для внесения изменений: перейдите в раздел Ресурсы, затем нажмите действия, Развертывание API, затем выберите этап и нажмите Развернуть. введите описание изображения здесь