Как преобразовать ресурс шлюза API в облако с интеграцией лямбда-прокси

Я пытался понять, как выразить (в облачной информации) ресурс шлюза API, который имеет тип интеграции функции Lambda, используя интеграцию Lambda Proxy.

Это легко сделать в консоли AWS, поскольку вы можете установить флажок: Консоль шлюза API с флажком

Однако в ресурсе AWS :: ApiGateway :: Method CloudFormation нет соответствующего поля (оно должно быть в Свойство интеграции).

Как я могу настроить это в облачной информации?


person sihil    schedule 29.09.2016    source источник
comment
Мы работаем над тем, чтобы CloudFormation обновлял свои документы, но, как указано ниже, вы устанавливаете тип интеграции на AWS_PROXY, а также на HttpMethod на POST.   -  person jackko    schedule 29.09.2016
comment
Здесь вы можете увидеть рабочий пример: stackoverflow.com/questions/48740949/   -  person Ilya    schedule 14.02.2018
comment
Для меня просто безумие, что то, что так легко сделать через консоли, так сложно сделать, используя рекомендуемый маршрут формирования облака. Я полагаю, что облачный форматер должен был помочь восполнить этот пробел. Жаль, что это так устарело.   -  person GroovyDotCom    schedule 11.07.2019


Ответы (3)


Тип интеграции должен быть установлен на AWS_PROXY. Ниже приведен пример фрагмента метода из рабочего шаблона YAML CloudFormation.

ProxyResourceAny:
  Type: AWS::ApiGateway::Method
  Properties:
    AuthorizationType: NONE
    HttpMethod: ANY
    ResourceId:
      Ref: ProxyResource
    RestApiId:
      Ref: API
    Integration:
      Type: AWS_PROXY
      IntegrationHttpMethod: POST
      Uri: !Sub
        - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${Arn}/invocations
        - Arn:
            Fn::GetAtt:
            - RestorerLambda
            - Arn

Стоит сказать, как я это понял ...

Почесав голову некоторое время, я изучил вывод команды aws apigateway get-method CLI для метода, который был настроен таким образом с помощью консоли. Это дало мне следующий JSON, и я понял, что флажок может быть закодирован в тип. Я проверил свое предположение и получил CloudFormation выше.

{
    "apiKeyRequired": false,
    "httpMethod": "ANY",
    "methodIntegration": {
        "integrationResponses": {
            "200": {
                "responseTemplates": {
                    "application/json": null
                },
                "statusCode": "200"
            }
        },
        "passthroughBehavior": "WHEN_NO_MATCH",
        "cacheKeyParameters": [],
        "uri": "arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:XXXXXXXXX:function:Shildrew-Restorer-Play-Lambda/invocations",
        "httpMethod": "POST",
        "cacheNamespace": "64bl3tgw4g",
        "type": "AWS_PROXY"
    },
    "requestParameters": {},
    "authorizationType": "NONE"
}
person sihil    schedule 29.09.2016

Я решил эту же проблему, просто изменив

Integration:
Type: AWS_PROXY

To

Integration:
Type: AWS

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

Надеюсь это поможет!

person Alex Johnston    schedule 02.10.2017

Мы столкнулись именно с этой проблемой. Мы используем Ansible для нашей инфраструктуры. Может применяться к интерфейсу командной строки, облачной информации или даже к SDK.

Решение нашей проблемы заключалось в том, чтобы убедиться, что политика лямбда была определена детально для глаголов конечной точки в API Gateway для лямбда, который вы пытаетесь использовать.

Например, у нас было несколько маршрутов. Для каждого маршрута (или набора маршрутов) требуется определенная собственная лямбда-политика, которая разрешает lambda: InvokeFunction. Это определено в модуле лямбда-политики для Ansible. При этом лямбда-триггер был включен автоматически.

person Don U    schedule 06.03.2020