この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。 日本列島が酷暑とのことですが、札幌は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なんですよ・・・