@liuhui0803
2017-08-19T09:55:48.000000Z
字数 2891
阅读 4331
DevOps
IaaS
AWS
云计算
AWSLambda
摘要:
AWS最近发布了一款测试版的新工具SAM Local,该工具可以帮助开发者在本地计算机上更轻松地构建并测试无服务器AWS Lambda应用程序。SAM Local提供的核心功能包括:在本地运行的Docker中测试AWS Lambda函数,通过一个简单的CLI启动本地API网关,以及针对各种AWS事件源的测试工作生成示例载荷。
正文:
AWS最近发布了一款测试版的新工具SAM Local,该工具可以帮助开发者在本地计算机上更轻松地构建并测试无服务器AWS Lambda应用程序。SAM Local提供的核心功能包括:在本地运行的Docker中测试AWS Lambda函数,借助SAM模板通过一个简单的CLI启动本地API网关并置于Lambda函数之前,验证SAM模板,以及针对S3、Kinesis、CloudTrail等各种AWS事件源的测试工作生成示例载荷。
AWS去年发布的无服务器应用程序模型(Serverless Application Model,SAM),意在帮助开发者更轻松地部署无服务器应用。SAM是一种开源规范,基于AWS CloudFormation构建并对其进行了扩展,这是AWS提供的基础架构即代码(IaC)产品,可供开发者以声明的方式指定云资源的部署和配置。
SAM Local的主要功能包括:
通过SAM Local在本地运行无服务器项目和函数需要安装并运行Docker,此时SAM Local将使用DOCKER_HOST环境变量连接Docker守护进程。SAM Local可通过NPM安装(npm install -g aws-sam-local
),或可从原代码库直接安装最新版(访问github.com/awslabs/aws-sam-loca,并创建一个名为aws-sam-local
,而非sam
的二进制文件)。
开发者可通过增强的CloudFormation模板格式指定函数的部署配置以及相关的集成式AWS资源(这种格式最终会转换为标准的CloudFormation模板)。例如,下列template.yaml
文件定义了一个简单的DynamoDB表,一个基于Python的Lambda函数(源代码包含在一个单独的文件中,其名称可通过'Handler property' lambda_function.py指定),以及一个支持GET和POST方法的API网关实例。
---
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
VotesTable:
Type: "AWS::Serverless::SimpleTable"
VoteSpacesTabs:
Type: "AWS::Serverless::Function"
Properties:
Timeout: 30
Runtime: python3.6
Handler: lambda_function.lambda_handler
Policies: AmazonDynamoDBFullAccess
Environment:
Variables:
TABLE_NAME: !Ref VotesTable
Events:
GetVotes:
Properties:
Method: get
Path: /
Type: Api
Vote:
Properties:
Method: post
Path: /
Type: Api
Randall Hunt撰写的一篇AWS博客文章提供了SAM部署与API网关集成的范例,并演示了SAM Local对整个开发流程提供的帮助。相关说明已经很完善,但实际使用时需要首先创建相应的DynamoDB表,随后才能测试函数(例如下列示例通过AWS CLI执行了create-table
命令),此外在针对测试用途运行本地DynamoDB时,还需要将函数中的DynamoDB主机名改为计算机的本地网络IP地址,不能直接使用localhost
,这是因为函数实际上运行在Docker容器内,而Mac或Windows上的Docker都运行在自己的虚拟机内,此时localhost
代表不同的上下文。
aws dynamodb create-table \
--table-name spaces-tabs-votes \
--attribute-definitions \
AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--endpoint-url http://localhost:8000
SAM Local可以针对测试用途生成AWS服务事件,例如运行sam local generate-event <service>
这样的CLI命令,此外还可通过受支持的IDE进行交互式调试。在Java和Node.js中,-d标志和端口可传递至sam local
CLI命令,借此可立刻启动调试器。AWS博客建议对Python使用诸如epdb这样的二进制库。
在本地开发并测试无服务器应用后,可以使用SAM CLI将应用程序打包并部署到生产环境。sam package
命令可将代码压缩为Zip格式,上传至S3,并生成一个可直接通过AWS CloudFormation部署至Lambda的SAM文件。sam deploy
命令可将打包后的SAM模板部署至CloudFormation。sam package
和sam deploy
的作用分别等同于AWS CLI中的aws cloudformation package和aws cloudformation deploy命令。
有关SAM Local的更多信息可访问AWS博客文章:“新增 - AWS SAM Local (Beta) – 本地构建并测试无服务器应用程序”,或访问该项目的GitHub代码库。
作者:Daniel Bryant,阅读英文原文:AWS Release ‘SAM Local’ to Facilitate Local Build and Test of AWS Lambda Serverless Applications