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網關端點并嘗試發布帖子。 
您可以在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的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 柔字怎么组词 柔的组词有哪些
- 下一篇: java mic波形识别_会议季Mic
