私は、Lambdaプロキシ統合を使用して、Lambda関数統合タイプを持つAPIゲートウェイリソースを(cloudformationで)表現する方法を模索しています。
選択できるチェックボックスがあるため、これはAWSコンソールで簡単に実行できます。
ただし、AWS :: ApiGateway :: Method CloudFormationリソースに対応するフィールドはありません( Integrationプロパティ にある必要があります)。
これをcloudformationでどのように構成できますか?
統合タイプは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"
}
私たちはこの正確な問題に直面しました。インフラストラクチャにはAnsibleを使用しています。 CLI、Cloudformation、またはSDKにも適用できます
この問題の解決策は、使用しようとしているラムダのAPI Gatewayのエンドポイント動詞に対してLambdaポリシーが細かく定義されていることを確認することでした。
たとえば、複数のルートがありました。各ルート(またはルートのセット)には、lambda:InvokeFunctionを許可する独自のラムダポリシーが定義されている必要があります。これは、AnsibleのLambdaポリシーモジュールで定義されています。これにより、ラムダトリガーが自動的に有効になります。
私は単純に変更することでこの同じ問題を解決しました
Integration:
Type: AWS_PROXY
に
Integration:
Type: AWS
現在、クラウドフォーメーションのドキュメントは不足しており、APIゲートウェイのクラウドフォーメーションのドキュメントは、コンソールに表示されるものと一致しないため、問題を解決しようとしている人を妨げています。
お役に立てれば!