2016-09-29 67 views
7

我一直在努力研究如何使用Lambda代理集成來表達(在cloudformation中)具有Lambda函數集成類型的API網關資源。如何通過lambda代理集成雲端API網關資源

這很容易在AWS控制檯做到,因爲是一個複選框,您可以選擇: API gateway console showing the Use Lambda Proxy Integration checkbox

但是,現在在AWS :: ApiGateway ::方法CloudFormation資源沒有相應的字段(它應該在Integration property)。

如何在雲端配置此功能?

+2

我們正在努力讓CloudFormation更新他們的文檔,但正如下面所述,您將集成類型設置爲AWS_PROXY,並將HttpMethod設置爲POST –

+0

您可以在此處看到一個工作示例:https://stackoverflow.com/questions/48740949 /λ-權限錯誤 - 當 - 設置 - 使用 - cloudformation和-API網關代理/ 48752056#48752056 – Ilya

回答

7

積分類型應設置爲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" 
} 
1

我已經通過簡單的改變解決了這個相同的問題的

Integration: 
Type: AWS_PROXY 

Integration: 
Type: AWS 

雲形成文檔目前是稀缺的,API網關cloudformation文檔不匹配在控制檯上可以看到什麼妨礙任何試圖解決問題的人。

希望這會有所幫助!

相關問題