#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:
Кнопки отключения нет, но есть две возможности, которые можно рассматривать как обходной путь:
- Удалите этап (этапы) API. Без stage API не будет доступен.
- Поскольку это может быть проблематично, если есть несколько этапов с множеством пользовательских настроек, вы можете добавить
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:
Я бы предложил следующее в качестве обходного пути:
-
Вы можете просто ограничить планы использования этого конкретного API, активировав Включить квоту и установив ее, например, на (1 запрос в месяц).
-
Затем, при необходимости, в разделе «Ответы шлюза» вы можете переназначить ответ с превышением квоты на 500.
-
Последний шаг для внесения изменений: перейдите в раздел Ресурсы, затем нажмите действия, Развертывание API, затем выберите этап и нажмите Развернуть.