AWS API Gateway与AWS Lambda代理集成构建REST API
项目地址
https://github.com/JessicaWin/aws
- lambda分支为自动创建API Gateway REST API资源的部署方式
- apigateway分支为自定义API Gateway REST API资源的部署方式
创建Lambda Handler
创建父模块
使用idea创建一个maven工程: File->New->Project
在左侧菜单栏中选择Maven,点击Next:
输入groupId和artifactId,点击Next:
最终点击finish创建完成.
修改父模块的pom文件,引入aws lambda, log, json相关的jar包管理:
<properties><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source></properties><dependencyManagement><dependencies><dependency><groupId>com.amazonaws</groupId><artifactId>aws-lambda-java-core</artifactId><version>1.2.0</version></dependency><dependency><groupId>com.amazonaws</groupId><artifactId>aws-lambda-java-events</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.26</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.26</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version></dependency></dependencies></dependencyManagement>
创建子模块
首先选中aws project,然后Intellij -> File -> New Module,在弹出的对话框中选择Maven, 使用默认配置,然后Next进入下一步配置。
配置项目的group和artifact等信息(可以根据自己需要进行配置),点击Next进入下一步配置。
- Grouop: com.jessica
- Artifact:aws-lambda
设置module name为aws-lambda,点击finish完成创建.
修改子模块的pom文件,引入aws lambda, log, json相关的jar包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>aws</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>aws-lambda</artifactId><properties><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source></properties><dependencies><dependency><groupId>com.amazonaws</groupId><artifactId>aws-lambda-java-core</artifactId></dependency><dependency><groupId>com.amazonaws</groupId><artifactId>aws-lambda-java-events</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><configuration><createDependencyReducedPom>false</createDependencyReducedPom></configuration><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><!-- remove version from package name --><finalName>${project.artifactId}</finalName><createDependencyReducedPom>false</createDependencyReducedPom></configuration></execution></executions></plugin></plugins></build>
</project>
在子模块的src/main/resources目录下添加日志配置文件log4j.properties
log4j.rootLogger=DEBUG,system.out
log4j.appender.system.out=org.apache.log4j.ConsoleAppender
log4j.appender.system.out.layout=org.apache.log4j.PatternLayout
log4j.appender.system.out.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
在子模块中创建lambda函数的request和response
GreetingRequestVo.java
package com.jessica.aws.lambda;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GreetingRequestVo {private String name;private String time;private String city;private String day;
}
GreetingResponseVo.java
package com.jessica.aws.lambda;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GreetingResponseVo {private String greeting;
}
在子模块中创建一个Lambda Handler
LambdaProxyHandler.java
package com.jessica.aws.lambda;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LambdaProxyHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {private static final Logger LOGGER = LoggerFactory.getLogger(LambdaProxyHandler.class);private static final ObjectMapper mapper = new ObjectMapper();@Overridepublic APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {GreetingRequestVo greetingRequestVo = null;try {LOGGER.info("api gateway event is: " + event);String requestBody = event.getBody();LOGGER.info("api requestBody: " + event);greetingRequestVo = mapper.readValue(requestBody, GreetingRequestVo.class);String greeting = String.format("Good %s, %s of %s.[ Happy %s!]",greetingRequestVo.getTime(), greetingRequestVo.getName(), greetingRequestVo.getCity(), greetingRequestVo.getDay());LOGGER.info("name is " + greetingRequestVo.getName());GreetingResponseVo response = GreetingResponseVo.builder().greeting(greeting).build();String responseBody = mapper.writeValueAsString(response);APIGatewayProxyResponseEvent responseEvent = new APIGatewayProxyResponseEvent();responseEvent.setBody(responseBody);responseEvent.setStatusCode(200);return responseEvent;} catch (JsonProcessingException e) {APIGatewayProxyResponseEvent responseEvent = new APIGatewayProxyResponseEvent();responseEvent.setStatusCode(500);return responseEvent;}}
}
创建config.yml文件
在aws-lambda子模块中创建config.yml文件,该文件主要用于配置当前service的通用参数设置,同时用于作为lambda函数的环境变量
# Variant of each developer
variant: jessicastage: develop# The region you will deploy your lambda to
region: ap-southeast-1# The bucket your upload your lambda resource(Including jar) to
deploymentBucket: ${self:provider.stage}-social-network-deploy# AWS Account ID
ACCOUNT_ID:Ref: 'AWS::AccountId'versionFunctions: false
创建serverless.yml部署文件
serverless.yml文件用于创建lambda函数, apigateway的相关资源(AWS::ApiGateway::RestApi, AWS::ApiGateway::Resource, AWS::ApiGateway::Method),lambda函数的调用条件,权限等.
自动创建API Gateway REST API资源
在serverless.yml中配置lambda函数,在函数部署时会自动为该函数创建LogGroup,如果指定了http类型的event,则在部署时会自动为该函数创建event对应的apigateway的相关资源(AWS::ApiGateway::RestApi, AWS::ApiGateway::Resource, AWS::ApiGateway::Method),以及apigateway event调用lambda函数的权限.
部署文件
service: aws-lambda
frameworkVersion: ">=1.2.0 <2.0.0"
plugins:- serverless-pseudo-parameterscustom:configFile: ${file(config.yml)}provider:name: awsstage: ${self:custom.configFile.stage}variant: ${self:custom.configFile.variant}runtime: java8region: ${self:custom.configFile.region}timeout: 30 # The default is 6 seconds. Note: API Gateway current maximum is 30 secondsmemorySize: 1024 # Overwrite the default memory size. Default is 1024. Increase by 64.deploymentBucket: ${self:custom.configFile.deploymentBucket}environment: ${file(config.yml)}stackName: ${self:provider.stage}-${self:provider.variant}-${self:service}versionFunctions: ${self:custom.configFile.versionFunctions}package:artifact: target/aws-lambda.jarfunctions:LambdaProxyHandler:# name must have length less than or equal to 64name: ${self:provider.stage}-${self:provider.variant}-LambdaProxyHandlerhandler: com.jessica.aws.lambda.LambdaProxyHandlerrole: arn:aws:iam::#{AWS::AccountId}:role/AdminRoleevents:- http:path: /hellomethod: POST
部署
$ sls deploy -v
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (4.7 MB)...
Serverless: Validating template...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - develop-jessica-aws-lambda
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - LambdaProxyHandlerLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - LambdaProxyHandlerLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - LambdaProxyHandlerLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceHello
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - LambdaProxyHandlerLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceHello
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Resource - ApiGatewayResourceHello
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - LambdaProxyHandlerLambdaFunction
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - LambdaProxyHandlerLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Permission - LambdaProxyHandlerLambdaPermissionApiGateway
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Permission - LambdaProxyHandlerLambdaPermissionApiGateway
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Deployment - ApiGatewayDeployment1592312567124
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Deployment - ApiGatewayDeployment1592312567124
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Deployment - ApiGatewayDeployment1592312567124
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Permission - LambdaProxyHandlerLambdaPermissionApiGateway
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - develop-jessica-aws-lambda
Serverless: Stack create finished...
Service Information
service: aws-lambda
stage: develop
region: ap-southeast-1
stack: develop-jessica-aws-lambda
api keys:None
endpoints:POST - https://********.execute-api.ap-southeast-1.amazonaws.com/develop/hello
functions:LambdaProxyHandler: aws-lambda-develop-LambdaProxyHandler
layers:NoneStack Outputs
ServiceEndpoint: https://********.execute-api.ap-southeast-1.amazonaws.com/develop
ServerlessDeploymentBucketName: develop-social-network-deploy
通过log可以看出,lambda函数部署时一共创建了7个资源:
- AWS::ApiGateway::RestApi
- AWS::Logs::LogGroup
- AWS::ApiGateway::Resource
- AWS::Lambda::Function
- AWS::ApiGateway::Method
- AWS::Lambda::Permission
- AWS::ApiGateway::Deployment
测试
打开apigateway的页面:https://ap-southeast-1.console.aws.amazon.com/apigateway/main/apis?region=ap-southeast-1
在api列表中可以找到刚部署的名为 develop-aws-lambda的api:
打开api页面,可以看到api相关信息,点击/hello下面的POST方法,可以看到hello api的完整信息:
击点TEST可以进行测试,测试时输入如下的request body:
{
"name":"jesscia",
"time":"21:00",
"city":"shanghai",
"day":"2020/06/10"
}
自定义API Gateway REST API资源
在aws-lambda的serverless.yml中只配置lambda函数,不指定event.
在aws-lambda的根目录下创建一个api目录,并在其中创建一个serverless.yml用于对apigateway的相关资源(AWS::ApiGateway::RestApi, AWS::ApiGateway::Resource, AWS::ApiGateway::Method)以及调用lambda函数的权限进行配置.
lambda配置文件aws-lambda/serverless.yml
service: aws-apigateway-lambda
frameworkVersion: ">=1.2.0 <2.0.0"
plugins:- serverless-pseudo-parameterscustom:configFile: ${file(config.yml)}provider:name: awsstage: ${self:custom.configFile.stage}variant: ${self:custom.configFile.variant}runtime: java8region: ${self:custom.configFile.region}timeout: 30 # The default is 6 seconds. Note: API Gateway current maximum is 30 secondsmemorySize: 1024 # Overwrite the default memory size. Default is 1024. Increase by 64.deploymentBucket: ${self:custom.configFile.deploymentBucket}environment: ${file(config.yml)}stackName: ${self:provider.stage}-${self:provider.variant}-${self:service}versionFunctions: ${self:custom.configFile.versionFunctions}package:artifact: target/aws-lambda.jarfunctions:LambdaProxyHelloHandler:# name must have length less than or equal to 64name: ${self:provider.stage}-${self:provider.variant}-LambdaProxyHelloHandlerhandler: com.jessica.aws.lambda.LambdaProxyHandlerrole: arn:aws:iam::#{AWS::AccountId}:role/AdminRoleresources:Outputs:LambdaProxyHelloHandlerArn:Description: The ARN for the hello functionValue:# the first param must be: string.contact(functionId, LambdaFunction)Fn::GetAtt:- LambdaProxyHelloHandlerLambdaFunction- ArnExport:Name: ${self:provider.stage}-${self:provider.variant}-LambdaProxyHelloHandlerArn
apigateway配置文件aws-lambda/api/serverless.yml
service: aws-apigateway-api
frameworkVersion: ">=1.2.0 <2.0.0"
plugins:- serverless-pseudo-parameterscustom:configFile: ${file(../config.yml)}provider:name: awsstage: ${self:custom.configFile.stage}variant: ${self:custom.configFile.variant}region: ${self:custom.configFile.region}deploymentBucket: ${self:custom.configFile.deploymentBucket}stackName: ${self:provider.stage}-${self:provider.variant}-${self:service}helloFunctionArn:Fn::ImportValue: ${self:provider.stage}-${self:provider.variant}-LambdaProxyHelloHandlerArnresources:Resources:# api gateway rootApiGatewayRestApi:Type: AWS::ApiGateway::RestApiProperties:Name: ${self:provider.stage}_${self:provider.variant}_ApiGatewayRootRestApiEndpointConfiguration:Types:- REGIONAL# /helloApiGatewayResourceHello:Type: AWS::ApiGateway::ResourceProperties:RestApiId:Ref: ApiGatewayRestApiParentId:Fn::GetAtt:- ApiGatewayRestApi- RootResourceIdPathPart: helloRootMethod:Type: AWS::ApiGateway::MethodProperties:ResourceId:Fn::GetAtt:- ApiGatewayRestApi- RootResourceIdRestApiId:Ref: ApiGatewayRestApiHttpMethod: GETAuthorizationType: NONEMethodResponses:- StatusCode: 302ResponseParameters:method.response.header.Location: trueIntegration:Type: MOCKRequestTemplates:'application/json': '{"statusCode":200}'IntegrationResponses:- StatusCode: 302ApiGatewayMethodHelloPost:Type: AWS::ApiGateway::MethodProperties:HttpMethod: POSTRequestParameters: {}ResourceId:Ref: ApiGatewayResourceHelloRestApiId:Ref: ApiGatewayRestApiApiKeyRequired: falseAuthorizationType: NONEIntegration:IntegrationHttpMethod: POSTType: AWS_PROXYUri:# Fn::Join object requires two parameters, (1) a string delimiter and (2) a list of strings to be joinedFn::Join:- ''- - 'arn:'- Ref: 'AWS::Partition'- ':apigateway:'- Ref: 'AWS::Region'- ':lambda:path/2015-03-31/functions/'- ${self:provider.helloFunctionArn}- /invocationsMethodResponses: []LambdaProxyHandlerLambdaPermissionApiGateway:Type: AWS::Lambda::PermissionProperties:FunctionName: ${self:provider.helloFunctionArn}Action: lambda:InvokeFunctionPrincipal: apigateway.amazonaws.comSourceArn:Fn::Join:- ''- - 'arn:'- Ref: 'AWS::Partition'- ':execute-api:'- Ref: 'AWS::Region'- ':'- Ref: 'AWS::AccountId'- ':'- Ref: ApiGatewayRestApi- /*/*Outputs:ApiGatewayRestApiId:Value:Ref: ApiGatewayRestApiExport:Name: ${self:provider.stage}-${self:provider.variant}-ApiGatewayRootRestApiIdApiGatewayRootResourceId:Value:Fn::GetAtt:- ApiGatewayRestApi- RootResourceIdExport:Name: ${self:provider.stage}-${self:provider.variant}-ApiGatewayRootResourceIdApiGatewayResourceIdHello:Value:Ref: ApiGatewayResourceHelloExport:Name: ${self:provider.stage}-${self:provider.variant}-ApiGatewayResourceId-helloServiceEndpoint:Description: 'URL of the service endpoint'Value:Fn::Join:- ''- - 'https://'- Ref: ApiGatewayRestApi- '.execute-api.'- Ref: 'AWS::Region'- '.'- Ref: 'AWS::URLSuffix'- '/'- ${self:provider.stage}
部署lambda函数
$ $ sls deploy -v
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (4.7 MB)...
Serverless: Validating template...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - develop-jessica-aws-apigateway-lambda
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - LambdaProxyHelloHandlerLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - LambdaProxyHelloHandlerLogGroup
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - LambdaProxyHelloHandlerLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - LambdaProxyHelloHandlerLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - LambdaProxyHelloHandlerLambdaFunction
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - LambdaProxyHelloHandlerLambdaFunction
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - develop-jessica-aws-apigateway-lambda
Serverless: Stack create finished...
Service Information
service: aws-apigateway-lambda
stage: develop
region: ap-southeast-1
stack: develop-jessica-aws-apigateway-lambda
api keys:None
endpoints:None
functions:LambdaProxyHelloHandler: aws-apigateway-lambda-develop-LambdaProxyHelloHandler
layers:NoneStack Outputs
LambdaProxyHelloHandlerArn: arn:aws:lambda:ap-southeast-1:*********:function:develop-jessica-LambdaProxyHelloHandler
ServerlessDeploymentBucketName: develop-social-network-deploy
通过log可以看出,lambda函数部署时一共创建了2个资源:
- AWS::Logs::LogGroup
- AWS::Lambda::Function
部署apigateway
$ sls deploy -v
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Validating template...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - develop-jessica-aws-apigateway-api
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceHello
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - RootMethod
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Permission - LambdaProxyHandlerLambdaPermissionApiGateway
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceHello
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - RootMethod
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Permission - LambdaProxyHandlerLambdaPermissionApiGateway
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Resource - ApiGatewayResourceHello
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - RootMethod
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Permission - LambdaProxyHandlerLambdaPermissionApiGateway
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - develop-jessica-aws-apigateway-api
Serverless: Stack create finished...
Service Information
service: aws-apigateway-api
stage: develop
region: ap-southeast-1
stack: develop-jessica-aws-apigateway-api
api keys:None
endpoints:
functions:None
layers:NoneStack Outputs
ApiGatewayRestApiId: ******
ApiGatewayRootResourceId: ******
ApiGatewayResourceIdHello: ******
ServiceEndpoint: https://******.execute-api.ap-southeast-1.amazonaws.com/develop
ServerlessDeploymentBucketName: develop-social-network-deploy
通过log可以看出,lambda函数部署时一共创建了5个资源:
- AWS::ApiGateway::RestApi
- AWS::ApiGateway::Resource
- AWS::ApiGateway::Method - RootMethod
- AWS::ApiGateway::Method - ApiGatewayMethodHelloPost
- AWS::Lambda::Permission
测试
打开apigateway的页面:https://ap-southeast-1.console.aws.amazon.com/apigateway/main/apis?region=ap-southeast-1
在api列表中可以找到刚部署的名为 develop_jessica_ApiGatewayRootRestApi的api:
打开api页面,可以看到api相关信息,点击/hello下面的POST方法,可以看到hello api的完整信息:
点击 TEST可以对api进行测试,输入图示的request body进行测试,可以得到正确的返回结果:
{
"name":"jesscia",
"time":"21:00",
"city":"shanghai",
"day":"2020/06/10"
}
参考
https://www.serverless.com/framework/docs/providers/aws/guide/functions/
https://www.serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-integration
https://www.gorillastack.com/news/splitting-your-serverless-framework-api-on-aws/
https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html
https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html
https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html
AWS API Gateway与AWS Lambda代理集成构建REST API相关推荐
- aws lambda_AWS API Gateway和AWS Lambda示例
aws lambda The purpose of this article is to present the most relevant details and not-so-straight s ...
- Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb
Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb Amazon API GateWay 简介 Amazon API Gateway 是由 ...
- aws dynamodb_如何使用AWS Lambda将DynamoDB集成到您的API中
aws dynamodb by Sam Williams 通过山姆·威廉姆斯 如何使用AWS Lambda将DynamoDB集成到您的API中 (How to Integrate DynamoDB i ...
- aws api gateway 设置WebSocket API集成请求
设置一个集成请求包括以下内容. 选择一个路由密钥来集成到后端. 指定要调用的后端端点,如AWS服务或HTTP端点. 通过指定一个或多个请求模板,配置如何将路由请求数据(如有必要)转换为集成请求数据. ...
- websockets_如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序
websockets by Janitha Tennakoon 通过詹妮莎·特纳库恩 如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序 (How to ...
- 如何从Amazon API Gateway将查询字符串或路由参数传递到AWS Lambda
本文翻译自:How to pass a querystring or route parameter to AWS Lambda from Amazon API Gateway for instanc ...
- aws创建html网页,AWS: 在AWS上创建一个网站,综合运用(Lambda + Api Gateway + Dynamodb + S3)...
简介 本文将创建一个微型网站,以达到综合运用AWS服务的目的: 1.Dynamodb:一种完全托管的NoSQL数据库服务 2.Lambda:实现具体的业务逻辑,基于python3编写,它会调用dyna ...
- AWS Lambda 搭配 Amazon API Gateway (HTTP API)
AWS Lambda 搭配 Amazon API Gateway (HTTP API) AWS Lambda 是一种无伺服器.事件推动的运算服务,而 Amazon API Gateway 可以让开发人 ...
- AWS Lambda 搭配 Amazon API Gateway (REST API)
AWS Lambda 搭配 Amazon API Gateway (REST API) AWS Lambda 是一种无伺服器.事件推动的运算服务,而 Amazon API Gateway 可以让开发人 ...
最新文章
- centOS外部浏览器无法访问tomcat8000端口解决办法
- Web API实现微信公众平台开发-接收数据Post
- 微软Build 2016前瞻:让开发者编写能畅行所有设备的app
- GWT,GWT-Ext(SmartGWT),GXT(Ext GWT)常见任务
- 使用统计异常消除滤波器来消除异常
- 容器编排技术 -- Kubernetes kubectl label 命令详解
- duckduckgo 国内_DuckDuckGo的Instant Answers项目的7课
- Caffe的简介、依赖、框架
- 无法定位软件包dbus-glib-1
- macOS官方镜像下载
- 坐标旋转次序 欧拉角定义 左乘 右乘
- 手机WIFI传文件到局域网服务器,局域网内手机和电脑怎么实现无线传输文件?
- 对话混沌创新商学院6期校友:“朋克养生”背后的产业密码
- 真正高质量的免费高速高防空间!
- stm32h7b0替代h750程序导致单片机挂掉无法烧录程序问题
- 宝塔BT面板专业版(付费)和免费版有什么区别?
- 虚拟机安装华为模拟器eNSP过程中所遇问题与解决办法
- 成功的 Git 分支模型
- 国密SM2的证书制作及验证
- 海信电视linux安装软件,海信电视无法安装软件怎么办,两种最新方法完美解决!...
热门文章
- 推荐25本android开发的免费电子书下载
- 2015年终总结,忙碌和无所事事的一年
- excel二级联动指令
- java游戏boss是冰龙_炉石传说冒险模式冰龙区BOSS克尔苏加德打法攻略
- 如何在WordPress中创建自定义主页
- 整合SpringBoot + Nginx-http-flv-module + JavaCV(FFmpeg) RTSP推流,使用VUE + Flv.js播放
- 【STM32cubeMX+HAL库】US100超声波模块原理篇
- 5.4学习计划 越出青春young
- 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...
- python中eps是什么意思_如何在中使用参数epsabsscipy.integrate.quad在Python中?