AWS Lambda是Amazon的计算服务。 它使部署和配置非常简单,并且非常适合基于微服务的体系结构。 您可以在此处找到有关AWS Lambda的更多信息。 当前支持的平台是JVM,Node JS和Python。
lambda的编程模型包括Handler,Context Object,Logging和Exceptions 。 这些在这里描述。 Lambda不能保持状态,因为它们会根据需要进行调高和复制。 持久状态应存储在lambda生命周期之外的服务中,例如Amazon DynamoDB,S3等。
首先,请按照此处的说明设置AWS账户和AWS命令行界面,并记下您的账户ID。
步骤1:代码
最基本的lambda在Python中如下所示:
def lambda_handler(event, context):
return "Hello World!"
或类似于Java中的以下内容:
package example;
import com.amazonaws.services.lambda.runtime.Context;
public class Hello {
public String lambdaHandler(String event, Context context) {
return "Hello World!";
}
}
您可以按照此处的冗长说明来部署此功能……但这并不好玩! 让我们尽情发挥风格吧;)
将上面的Python代码粘贴到名为helloworld.py
的文件中。 如果要使用Java版本,请按照此处的说明构建Lambda并使用Maven创建部署程序包。
步骤2:角色
创建一个trust.json
文件。 信任使我们的职能可以承担AWS Lambda的角色 。
在trust.json
我们允许函数承担lambda.amazonaws.com
服务的角色,否则基础结构将不允许我们的函数运行。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
步骤3:部署
创建以下脚本( deploy.sh
)。 注意:该脚本假定您已设置AWS_ACCOUNT_ID
环境变量。
#!/bin/bash
### Create the lambda package
zip -j helloworld.zip *.py
### Create the role for the lambda to assume
role="helloworld_exec_role"
trust="trust.json"
aws iam create-role --role-name $role --assume-role-policy-document file://$trust
aws iam update-assume-role-policy --role-name $role --policy-document file://$trust
### Create the lambda function
function_name="helloworld"
handler_name="helloworld.lambda_handler"
package_file=helloworld.zip
runtime=python2.7
aws lambda create-function \
--function-name $function_name \
--handler $handler_name \
--runtime $runtime \
--memory 512 \
--timeout 60 \
--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/$role \
--zip-file fileb://$package_file
或对于Java:
#!/bin/bash
### Create the lambda package
mvn package
### Create the role for the lambda to assume
role="helloworld_exec_role"
trust="trust.json"
aws iam create-role --role-name $role --assume-role-policy-document file://$trust
aws iam update-assume-role-policy --role-name $role --policy-document file://$trust
### Create the lambda function
function_name="helloworld"
handler_name="example.Hello::lambdaHandler"
package_file="target/lambda-java-example-1.0-SNAPSHOT.jar"
runtime="java8"
aws lambda create-function \
--function-name $function_name \
--handler $handler_name \
--runtime $runtime \
--memory 512 \
--timeout 60 \
--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/$role \
--zip-file fileb://${package_file}
使脚本可执行文件chmod +x deploy.sh
并部署lambda ./deploy.sh
。 您可能会收到以下错误:“ Lambda无法承担为函数定义的角色。” 这是因为该角色尚未在亚马逊基础设施中复制。 只需再次运行部署脚本。 它将抱怨该角色已经存在,但是这次lambda创建应该通过。 将来,我们将检查状态,以确保在部署功能之前已完全创建角色。
步骤5:执行!
使用以下命令调用您的lambda。 您应该在名为output.txt
的文件中看到结果
aws lambda invoke --invocation-type RequestResponse --function-name helloworld --payload '[""]' output.txt
步骤6:清理
要删除lambda函数,然后将该角色粘贴到delete.sh
#!/bin/bash
role="helloworld_exec_role"
function_name="helloworld"
aws lambda delete-function --function-name $function_name
aws iam delete-role --role-name $role
然后使脚本可执行文件chmod +x delete.sh
并执行./delete.sh
第7步:放松……您已经到达;)
…,等待有关AWS frolics的下一篇文章
翻译自: https://www.javacodegeeks.com/2016/05/aws-lambda-beginners.html