aws lambda使用_使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java
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相关推荐
- 使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java
在上一篇文章中,我们实现了基于Java的aws lambda函数,并使用CloudFront进行了部署. 由于我们已经设置了lambda函数,因此我们将使用AWS API Gateway将其与http ...
- 使用Lambda在AWS云上使用Java
如今,Amazon Web Services越来越受欢迎. Java是AWS的一等公民,它很容易上手. 部署应用程序有些不同,但是仍然很容易和方便. AWS Lambda是一种计算服务,您可以在其中将 ...
- java lambda表达式_凯哥带你从零学大数据系列之Java篇---第二十二章:Lambda表达式...
温馨提示:如果想学扎实,一定要从头开始看凯哥的一系列文章(凯哥带你从零学大数据系列),千万不要从中间的某个部分开始看,知识前后是有很大关联,否则学习效果会打折扣. 系列文章第一篇是拥抱大数据:凯哥带你 ...
- java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法
百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...
- lambda表达式_带Lambda表达式的Apache Wicket
lambda表达式 这是怎么回事? :) 我一直在从事一些项目,这些项目值得庆幸的是将Apache Wicket用于表示层. 我自然而然地想到了Java的8个lambda表达式如何与Wicket完美契 ...
- lambda设计模式_使用lambda的装饰器设计模式
lambda设计模式 随着Java中lambda的出现,我们现在有了一个新工具,可以更好地设计我们的代码. 当然,第一步是使用流,方法引用和Java 8中引入的其他简洁功能. 展望未来,我认为下一步是 ...
- aws高额账单_取消堆放以提高延迟并减少AWS账单
aws高额账单 大多数性能问题可以通过几种不同的方式解决. 多数人都容易理解和应用许多适用的解决方案. 一些解决方案(例如从JVM管理的堆中删除某些数据结构)更加复杂. 因此,如果您不熟悉此概念,我建 ...
- AWS API Gateway与AWS Lambda代理集成构建REST API
项目地址 https://github.com/JessicaWin/aws lambda分支为自动创建API Gateway REST API资源的部署方式 apigateway分支为自定义API ...
- websockets_如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序
websockets by Janitha Tennakoon 通过詹妮莎·特纳库恩 如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序 (How to ...
最新文章
- Jira停售Server版政策客观解读——如何最小化风险?
- python 判断是不是汉字危机阅读答案_《汉字危机》阅读练习及答案
- Mysql查漏补缺笔记
- python-主成分分析-降维-PCA
- php如何防止重复提交表单,如何防止php重复提交表单方法
- Hyper-V用差异磁盘克隆系统
- ogg oracle 到mysql_借助OGG完成Oracle到MySQL的数据迁移
- C++-实现matlab的meshgird(OpenCV)
- 信息图:iOS 7开发者需要知道的事
- XP cmd命令 部分
- 纽约出租车计费问题:数据清洗与初探
- C语言 知识点总结完美版
- 上位机、下位机、单片机的关系
- r语言的runmed函数_干旱指数新宠—SPEI的C语言版、R语言版与单独执行软件SPEI Calculator...
- 已解决:不小心卸载pip后(重新安装pip的两种方式)
- gRPC 流式传输极简入门指南
- springboot基于微信小程序的运动软件前端的设计与实现毕业设计源码100932
- 常用网络命令:ping命令的使用
- 自定义一个Chrome翻译插件
- 万维钢解读,从数学上解释为什么绝大多数投资者都会输给市场?最可能值,远远小于平均值...