aws lambda使用

在上一篇文章中,我们实现了基于Java的aws lambda函数,并使用CloudFront进行了部署。 由于我们已经设置了lambda函数,因此我们将使用AWS API Gateway将其与http端点集成。

Amazon API Gateway是一项完全托管的服务,使开发人员可以轻松地创建,发布,维护,监控和保护各种规模的API。 在AWS管理控制台中单击几下,您可以创建一个API,充当应用程序从您的后端服务(例如Amazon Elastic Compute Cloud上运行的工作负载)访问数据,业务逻辑或功能的“前门”。 (Amazon EC2),在AWS Lambda或任何Web应用程序上运行的代码

对于此示例,将API网关想象为一个HTTP连接器。 我们将更改原始功能以实现划分。

package com.gkatzioura.deployment.lambda;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;import java.math.BigDecimal;
import java.util.Map;
import java.util.logging.Logger;/*** Created by gkatzioura on 9/10/2016.*/
public class RequestFunctionHandler implements RequestHandler<Map<String,String>,String> {private static final String NUMERATOR_KEY = "numerator";private static final String DENOMINATOR_KEY = "denominator";private static final Logger LOGGER = Logger.getLogger(RequestFunctionHandler.class.getName());public String handleRequest(Map <String,String> values, Context context) {LOGGER.info("Handling request");if(!values.containsKey(NUMERATOR_KEY)||!values.containsKey(DENOMINATOR_KEY)) {return "You need both numberator and denominator";}try {BigDecimal numerator = new BigDecimal(values.get(NUMERATOR_KEY));BigDecimal denominator= new BigDecimal(values.get(DENOMINATOR_KEY));return  numerator.divide(denominator).toString();} catch (Exception e) {return "Please provide valid values";}}}

然后,我们将更改lambda代码并在s3上对其进行更新。

aws s3 cp build/distributions/JavaLambdaDeployment.zip s3://lambda-functions/JavaLambdaDeployment.zip

下一步是更新我们的CloudFormation模板,并将api网关转发请求添加到我们的lambda函数。

首先,我们必须声明我们的Rest API

"AGRA16PAA": {"Type": "AWS::ApiGateway::RestApi","Properties": {"Name": "CalculationApi"}}

然后,我们需要添加一个休息资源。 在DependsOn元素内,我们可以看到rest api的ID。 因此,cloudwatch将在创建其余api之后创建资源。

"AGR2JDQ8": {"Type": "AWS::ApiGateway::Resource","Properties": {"RestApiId": {"Ref": "AGRA16PAA"},"ParentId": {"Fn::GetAtt": ["AGRA16PAA","RootResourceId"]},"PathPart": "divide"},"DependsOn": ["AGRA16PAA"]}

另一个关键部分是添加权限,以便能够调用我们的lambda函数。

"LPI6K5": {"Type": "AWS::Lambda::Permission","Properties": {"Action": "lambda:invokeFunction","FunctionName": {"Fn::GetAtt": ["LF9MBL", "Arn"]},"Principal": "apigateway.amazonaws.com","SourceArn": {"Fn::Join": ["",["arn:aws:execute-api:", {"Ref": "AWS::Region"}, ":", {"Ref": "AWS::AccountId"}, ":", {"Ref": "AGRA16PAA"}, "/*"]]}}}

最后一步是添加api网关方法,以便能够从api网关调用我们的lambda函数。 此外,我们将添加api网关部署指令。

"Deployment": {"Type": "AWS::ApiGateway::Deployment","Properties": {"RestApiId": { "Ref": "AGRA16PAA" },"Description": "First Deployment","StageName": "StagingStage"},"DependsOn" : ["AGM25KFD"]},"AGM25KFD": {"Type": "AWS::ApiGateway::Method","Properties": {"AuthorizationType": "NONE","HttpMethod": "POST","ResourceId": {"Ref": "AGR2JDQ8"},"RestApiId": {"Ref": "AGRA16PAA"},"Integration": {"Type": "AWS","IntegrationHttpMethod": "POST","IntegrationResponses": [{"StatusCode": 200}],"Uri": {"Fn::Join": ["",["arn:aws:apigateway:",{"Ref": "AWS::Region"},":lambda:path/2015-03-31/functions/",{"Fn::GetAtt": ["LF9MBL", "Arn"]},"/invocations"]]}},"MethodResponses": [{"StatusCode": 200}]}

因此,我们最终完成了新的cloudwatch配置。

{"AWSTemplateFormatVersion": "2010-09-09","Resources": {"LF9MBL": {"Type": "AWS::Lambda::Function","Properties": {"Code": {"S3Bucket": "lambda-functions","S3Key": "JavaLambdaDeployment.zip"},"FunctionName": "SimpleRequest","Handler": "com.gkatzioura.deployment.lambda.RequestFunctionHandler","MemorySize": 128,"Role": "arn:aws:iam::274402012893:role/lambda_basic_execution","Runtime": "java8"}},"Deployment": {"Type": "AWS::ApiGateway::Deployment","Properties": {"RestApiId": { "Ref": "AGRA16PAA" },"Description": "First Deployment","StageName": "StagingStage"},"DependsOn" : ["AGM25KFD"]},"AGM25KFD": {"Type": "AWS::ApiGateway::Method","Properties": {"AuthorizationType": "NONE","HttpMethod": "POST","ResourceId": {"Ref": "AGR2JDQ8"},"RestApiId": {"Ref": "AGRA16PAA"},"Integration": {"Type": "AWS","IntegrationHttpMethod": "POST","IntegrationResponses": [{"StatusCode": 200}],"Uri": {"Fn::Join": ["",["arn:aws:apigateway:",{"Ref": "AWS::Region"},":lambda:path/2015-03-31/functions/",{"Fn::GetAtt": ["LF9MBL","Arn"]},"/invocations"]]}},"MethodResponses": [{"StatusCode": 200}]},"DependsOn": ["LF9MBL","AGR2JDQ8","LPI6K5"]},"AGR2JDQ8": {"Type": "AWS::ApiGateway::Resource","Properties": {"RestApiId": {"Ref": "AGRA16PAA"},"ParentId": {"Fn::GetAtt": ["AGRA16PAA","RootResourceId"]},"PathPart": "divide"},"DependsOn": ["AGRA16PAA"]},"AGRA16PAA": {"Type": "AWS::ApiGateway::RestApi","Properties": {"Name": "CalculationApi"}},"LPI6K5": {"Type": "AWS::Lambda::Permission","Properties": {"Action": "lambda:invokeFunction","FunctionName": {"Fn::GetAtt": ["LF9MBL", "Arn"]},"Principal": "apigateway.amazonaws.com","SourceArn": {"Fn::Join": ["",["arn:aws:execute-api:", {"Ref": "AWS::Region"}, ":", {"Ref": "AWS::AccountId"}, ":", {"Ref": "AGRA16PAA"}, "/*"]]}}}}
}

最后但并非最不重要的一点是,我们必须更新以前的cloudformation堆栈。

所以我们上传了我们的最新模板

aws s3 cp cloudformationjavalambda2.template s3://cloudformation-templates/cloudformationjavalambda2.template

我们要做的就是更新堆栈。

aws cloudformation update-stack --stack-name JavaLambdaStack --template-url https://s3.amazonaws.com/cloudformation-templates/cloudformationjavalambda2.template

我们的堆栈刚刚更新。
我们可以到达我们的api网关端点并尝试发布帖子。

curl -H "Content-Type: application/json" -X POST -d '{"numerator":1,"denominator":"2"}' https://{you api gateway endpoint}/StagingStage/divide
"0.5"

您可以在github上找到源代码。

翻译自: https://www.javacodegeeks.com/2016/10/java-aws-cloud-using-lambda-api-gateway-cloudformation.html

aws lambda使用

aws lambda使用_使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java相关推荐

  1. 使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java

    在上一篇文章中,我们实现了基于Java的aws lambda函数,并使用CloudFront进行了部署. 由于我们已经设置了lambda函数,因此我们将使用AWS API Gateway将其与http ...

  2. 使用Lambda在AWS云上使用Java

    如今,Amazon Web Services越来越受欢迎. Java是AWS的一等公民,它很容易上手. 部署应用程序有些不同,但是仍然很容易和方便. AWS Lambda是一种计算服务,您可以在其中将 ...

  3. java lambda表达式_凯哥带你从零学大数据系列之Java篇---第二十二章:Lambda表达式...

    温馨提示:如果想学扎实,一定要从头开始看凯哥的一系列文章(凯哥带你从零学大数据系列),千万不要从中间的某个部分开始看,知识前后是有很大关联,否则学习效果会打折扣. 系列文章第一篇是拥抱大数据:凯哥带你 ...

  4. java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法

    百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...

  5. lambda表达式_带Lambda表达式的Apache Wicket

    lambda表达式 这是怎么回事? :) 我一直在从事一些项目,这些项目值得庆幸的是将Apache Wicket用于表示层. 我自然而然地想到了Java的8个lambda表达式如何与Wicket完美契 ...

  6. lambda设计模式_使用lambda的装饰器设计模式

    lambda设计模式 随着Java中lambda的出现,我们现在有了一个新工具,可以更好地设计我们的代码. 当然,第一步是使用流,方法引用和Java 8中引入的其他简洁功能. 展望未来,我认为下一步是 ...

  7. aws高额账单_取消堆放以提高延迟并减少AWS账单

    aws高额账单 大多数性能问题可以通过几种不同的方式解决. 多数人都容易理解和应用许多适用的解决方案. 一些解决方案(例如从JVM管理的堆中删除某些数据结构)更加复杂. 因此,如果您不熟悉此概念,我建 ...

  8. AWS API Gateway与AWS Lambda代理集成构建REST API

    项目地址 https://github.com/JessicaWin/aws lambda分支为自动创建API Gateway REST API资源的部署方式 apigateway分支为自定义API ...

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

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

最新文章

  1. Jira停售Server版政策客观解读——如何最小化风险?
  2. python 判断是不是汉字危机阅读答案_《汉字危机》阅读练习及答案
  3. Mysql查漏补缺笔记
  4. python-主成分分析-降维-PCA
  5. php如何防止重复提交表单,如何防止php重复提交表单方法
  6. Hyper-V用差异磁盘克隆系统
  7. ogg oracle 到mysql_借助OGG完成Oracle到MySQL的数据迁移
  8. C++-实现matlab的meshgird(OpenCV)
  9. 信息图:iOS 7开发者需要知道的事
  10. XP cmd命令 部分
  11. 纽约出租车计费问题:数据清洗与初探
  12. C语言 知识点总结完美版
  13. 上位机、下位机、单片机的关系
  14. r语言的runmed函数_干旱指数新宠—SPEI的C语言版、R语言版与单独执行软件SPEI Calculator...
  15. 已解决:不小心卸载pip后(重新安装pip的两种方式)
  16. gRPC 流式传输极简入门指南
  17. springboot基于微信小程序的运动软件前端的设计与实现毕业设计源码100932
  18. 常用网络命令:ping命令的使用
  19. 自定义一个Chrome翻译插件
  20. 万维钢解读,从数学上解释为什么绝大多数投资者都会输给市场?最可能值,远远小于平均值...

热门文章

  1. P4338-[ZJOI2018]历史【LCT】
  2. jzoj3348,bzoj3258-秘密任务【最短路,网络流最小割】
  3. P5022-旅行【基环树,dfs】
  4. P2698-花盆Flowerpot【单调队列】
  5. 【贪心】最大连续数列的和
  6. Spark SQL(六)之加载数据的参数配置
  7. Java 必须掌握的 12 种 Spring 常用注解
  8. 一文让你秒懂各种进制的前缀
  9. JSR303常见参数
  10. android 枚举类型比较大小写,Spring 3.0 MVC绑定枚举区分大小写