API Gateway + Lambda のCloudFormationテンプレート
渡辺です。 日本列島が酷暑とのことですが、札幌は23-4℃となっております。
書く機会があったので。 適当に修正してご利用ください。
/Lambda関数名
というリソースを定義し、POSTで対応するLambda関数を呼び出すテンプレートです。
--- AWSTemplateFormatVersion: 2010-09-09 Description: "API Gateway" Parameters: FunctionName: Type: String Description: "Lambda Function Name (ex: hello-world)" Resources: Api: Type: "AWS::ApiGateway::RestApi" Properties: Name: "api" Resource: Type: "AWS::ApiGateway::Resource" Properties: RestApiId: !Ref Api ParentId: !GetAtt Api.RootResourceId PathPart: !Sub "${FunctionName}" LambdaPermission: Type: "AWS::Lambda::Permission" Properties: FunctionName: !Sub "${FunctionName}" Action: "lambda:InvokeFunction" Principal: "apigateway.amazonaws.com" ResourceMethod: Type: "AWS::ApiGateway::Method" Properties: RestApiId: !Ref Api ResourceId: !Ref Resource AuthorizationType: "None" HttpMethod: "POST" Integration: Type: "AWS" IntegrationHttpMethod: "POST" Uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}/invocations" DependsOn: "LambdaPermission"
Lambda関数はCloudFormationで管理すると面倒なため、適当な方法でデプロイしてください。
ポイントとなるのは、AWS::Lambda::Permission
リソースでLambdaにApiGatewayからの実行権限を付与することと、Integration(統合)でAWSをTypeに指定することです。
IntegrationのTypeがAWS_PROXYの場合、ApiGatewayのヘッダ情報等もLambdaに渡されることになります。
ボディのみに興味がある場合はAWS、ヘッダ情報なども必要な場合はAWS_PROXYで。
管理コンソールでいうところの、「Lambdaプロキシ統合の利用」に相当します。
ググっても、出てくるテンプレートは全部MOCKなんですよ・・・