BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

AWS发布用于本地构建和测试AWS Lambda无服务器应用的“SAM Local”

| 作者 Daniel Bryant 关注 740 他的粉丝 ,译者 大愚若智 关注 9 他的粉丝 发布于 2017年8月23日. 估计阅读时间: 9 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

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 packagesam deploy的作用分别等同于AWS CLI中的aws cloudformation packageaws cloudformation deploy命令。

有关SAM Local的更多信息可访问AWS博客文章:“新增 - AWS SAM Local (Beta) – 本地构建并测试无服务器应用程序”,或访问该项目的GitHub代码库

阅读英文原文AWS Release ‘SAM Local’ to Facilitate Local Build and Test of AWS Lambda Serverless Applications

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT