项目地址

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相关推荐

  1. 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 ...

  2. Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb

    Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb Amazon API GateWay 简介 Amazon API Gateway 是由 ...

  3. aws dynamodb_如何使用AWS Lambda将DynamoDB集成到您的API中

    aws dynamodb by Sam Williams 通过山姆·威廉姆斯 如何使用AWS Lambda将DynamoDB集成到您的API中 (How to Integrate DynamoDB i ...

  4. aws api gateway 设置WebSocket API集成请求

    设置一个集成请求包括以下内容. 选择一个路由密钥来集成到后端. 指定要调用的后端端点,如AWS服务或HTTP端点. 通过指定一个或多个请求模板,配置如何将路由请求数据(如有必要)转换为集成请求数据. ...

  5. websockets_如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序

    websockets by Janitha Tennakoon 通过詹妮莎·特纳库恩 如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序 (How to ...

  6. 如何从Amazon API Gateway将查询字符串或路由参数传递到AWS Lambda

    本文翻译自:How to pass a querystring or route parameter to AWS Lambda from Amazon API Gateway for instanc ...

  7. aws创建html网页,AWS: 在AWS上创建一个网站,综合运用(Lambda + Api Gateway + Dynamodb + S3)...

    简介 本文将创建一个微型网站,以达到综合运用AWS服务的目的: 1.Dynamodb:一种完全托管的NoSQL数据库服务 2.Lambda:实现具体的业务逻辑,基于python3编写,它会调用dyna ...

  8. AWS Lambda 搭配 Amazon API Gateway (HTTP API)

    AWS Lambda 搭配 Amazon API Gateway (HTTP API) AWS Lambda 是一种无伺服器.事件推动的运算服务,而 Amazon API Gateway 可以让开发人 ...

  9. AWS Lambda 搭配 Amazon API Gateway (REST API)

    AWS Lambda 搭配 Amazon API Gateway (REST API) AWS Lambda 是一种无伺服器.事件推动的运算服务,而 Amazon API Gateway 可以让开发人 ...

最新文章

  1. centOS外部浏览器无法访问tomcat8000端口解决办法
  2. Web API实现微信公众平台开发-接收数据Post
  3. 微软Build 2016前瞻:让开发者编写能畅行所有设备的app
  4. GWT,GWT-Ext(SmartGWT),GXT(Ext GWT)常见任务
  5. 使用统计异常消除滤波器来消除异常
  6. 容器编排技术 -- Kubernetes kubectl label 命令详解
  7. duckduckgo 国内_DuckDuckGo的Instant Answers项目的7课
  8. Caffe的简介、依赖、框架
  9. 无法定位软件包dbus-glib-1
  10. macOS官方镜像下载
  11. 坐标旋转次序 欧拉角定义 左乘 右乘
  12. 手机WIFI传文件到局域网服务器,局域网内手机和电脑怎么实现无线传输文件?
  13. 对话混沌创新商学院6期校友:“朋克养生”背后的产业密码
  14. 真正高质量的免费高速高防空间!
  15. stm32h7b0替代h750程序导致单片机挂掉无法烧录程序问题
  16. 宝塔BT面板专业版(付费)和免费版有什么区别?
  17. 虚拟机安装华为模拟器eNSP过程中所遇问题与解决办法
  18. 成功的 Git 分支模型
  19. 国密SM2的证书制作及验证
  20. 海信电视linux安装软件,海信电视无法安装软件怎么办,两种最新方法完美解决!...

热门文章

  1. 推荐25本android开发的免费电子书下载
  2. 2015年终总结,忙碌和无所事事的一年
  3. excel二级联动指令
  4. java游戏boss是冰龙_炉石传说冒险模式冰龙区BOSS克尔苏加德打法攻略
  5. 如何在WordPress中创建自定义主页
  6. 整合SpringBoot + Nginx-http-flv-module + JavaCV(FFmpeg) RTSP推流,使用VUE + Flv.js播放
  7. 【STM32cubeMX+HAL库】US100超声波模块原理篇
  8. 5.4学习计划 越出青春young
  9. 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...
  10. python中eps是什么意思_如何在中使用参数epsabsscipy.integrate.quad在Python中?