AWS Lambda 已支持用 Go 语言编写的无服务器应用

  • Sergio De Simone
  • 张兰月

2018 年 2 月 6 日

话题:语言 & 开发

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Go 语言是亚马逊最近才在 AWS Lambda 提供支持的语言之一,其它语言包括 Node.js、Python、Java 和 C#。

为了让你的 Go 代码能够在 AWS 上部署,你的代码首先必须位于一个处理程序 (handler) 函数内,然后 AWS 会将这个函数传入 lambda.Start()。在被调用时,lambda.Start() 并不生成返回值,它会与 Lambda 内部端点进行通信,并将调用请求传递给处理程序。该处理程序函数可能会有 0-2 个参数,其中包括请求对象,并且该函数可能会返回 0-2 个值,其中包括一个 error 对象,例如:

// main.go

package main



import (

  "github.com/aws/aws-lambda-go/lambda"

)



func hello(request Request) (string, error) {

  return "Hello!", nil

}



func main() {

  // Make the handler available for Remote Procedure Call by AWS Lambda

  lambda.Start(hello)

}

AWS 要求编写的 Go 代码必须能在 AWS Lambda for Linux 里使用,并且需要将代码压缩为 zip 文件,以便于在 AWS Lambda 中进行部署。你可以运行以下代码来实现它:

GOOS=linux go build -o main main.go

zip main.zip main

该 zip 文件的名字必须与被部署的 Lambda 函数的 Handler 配置属性相匹配。

在代码被压缩为 zip 文件后,你就可以通过以下 AWS CLI 来部署它了:

$ aws lambda create-function \

--region us-west-1 \

--function-name HelloFunction \

--zip-file fileb://./main.zip \

--runtime go1.x \

--tracing-config Mode=Active

--role arn:aws:iam:::role/ \

--handler main

此外,AWS 还为 Go 提供了 AWS X-Ray。AWS X-Ray 是一组类库,它可以生成跟踪数据,以便于 X-Ray 守护进程(daemon)分析和调试 Go 函数。

为了让开发者用 Go 来开发 AWS Lambda 函数更加简便,亚马逊公布了一个 GitHub 资源库,其中包含大量库、样本和工具。你可以点击此链接获取更多有关如何在 AWS 上测试、构建和部署 Go 代码的信息。

查看英文原文AWS Lambda Now Supports Go for Serverless Applications


感谢冬雨对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

语言 & 开发