在靠近用户的地方部署容器
本工程教育(EngEd)计划由科支持。
在全球范围内即时部署容器。Section是经济实惠、简单而强大的。
免费入门。
使用AWS Lambda和Golang创建无服务器函数(FaaS)
9月13日, 2021
- 主题词。
- 边缘计算
无服务器架构是一种新的范式,正在被用于现代应用的开发中。无服务器一词指的是将服务器从应用开发中抽象出来。
与服务器计算相比,无服务器计算的一个优势是,云提供商负责服务器,而你则专注于应用开发。
功能即服务(FaaS)是一种在云上运行模块化代码的无服务器方法。你可以使用FaaS来编写由事件触发的代码。
例如,当用户点击你的Web应用中的一个按钮时,就会执行一个特定的云函数。
在本教程中,我们将建立一个用户资料生成器函数。
该函数将接受一些用户数据,并根据这些数据返回一个简介。
将生成器函数上传到AWS Lambda后,我们将创建一个客户端程序,与AWS Lambda上的用户配置文件生成函数进行通信。
如果你是无服务器计算的新手,强烈建议你浏览一下这些文章。
要求
- 使用AWS账户访问AWS lambda仪表盘。
- 使用
git clone https://github.com/Bamimore-Tomi/faas-golang.git,下载本演示的源代码。 - 在你的机器上安装Go 1.x运行时。
设置AWS Lambda函数
- 创建你的AWS账户后,在主仪表板上,搜索
Lambda。

当你点击Lambda ,AWS Lambda仪表盘就会显示出来,如下图所示。

- 点击
Create function按钮,创建一个新的AWS Lambda函数。

在这里,我们指定该函数的名称为user-profile 。
- 在该函数的仪表板上,我们将上传我们想要在云端运行的函数。

在下一节,我们将看看如何制作一个在AWS Lambda上运行的函数。
在Golang中创建一个用户配置文件函数
在这一节中,我们将看到如何创建一个函数,在上传到AWS Lambda上之前将其转换为一个压缩文件。
我们需要安装aws-lambda-go 包,使用。
go mod initgo get github.com/aws/aws-lambda-go/lambda
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
// Struct for the input the program expects from the client
type InfoEvent struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
Age int `json:"age"`
}
// Struct for the output the server will send back to the client
type Response struct {
Profile string `json:"profile"`
}
// Event handler, this function handles requests from clients
func HandleInfoEvent(event InfoEvent) (Response, error) {
return Response{Profile: fmt.Sprintf("Their name is %s %s, they are %d ", event.Firstname, event.Lastname, event.Age)}, nil
}
func main() {
lambda.Start(HandleInfoEvent)
}
导航到server 文件夹,看这个源代码。
在上面的程序中,我们创建了HandleInfoEvent 函数。这个方法在云中运行。
使用下面的步骤来编译和压缩程序。
安装 - MacOS和Linux
- 编译可执行文件。
GOOS=linux go build main.go
- 用以下命令创建压缩文件。
zip user-profile-function.zip main
安装--Windows
- 从GitHub下载
build-lambda-zip工具。
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
- 现在你可以使用之前下载的工具来创建压缩文件。
Set GOOS=linux
Go build -o main main.go
%USERPROFILE%\Go\bin\build-lambda-zip.exe -output main.zip main
现在你可以将生成的压缩文件上传到AWS Lambda。
你可以测试一下这个函数,看看它是否运行良好。
首先,我们需要将处理程序的名称从默认的hello 改为main 。
Lambda函数处理程序是你函数代码中处理事件的方法。

点击Edit 。

将处理程序字段从hello 改为main ,然后点击Save 。
在AWS Lambda上测试该函数
- 在主仪表板上,点击
Test。

- 在页面上的JSON编辑器中输入这个样本数据,然后点击
Test。
{
"firstname": "Oluwatomisin",
"lastname": "Bamimore",
"age": 19
}

结果将是。

从Golang调用Lambda函数
我们也可以在本地执行同样的函数。
为此,我们必须安装AWS Go SDK ,如图所示。
go get github.com/aws/aws-sdk-go
现在我们可以使用这个代码段在云端执行该函数,并在本地看到结果。
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/lambda"
"github.com/joho/godotenv"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
)
type Info struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
Age int `json:"age"`
}
type Response struct {
Profile string `json:"profile"`
}
func main() {
// Load the environment variable which has the IAM credentials needed to connect to AWS
godotenv.Load()
// Initialize new aws session
sess := session.Must(session.NewSessionWithOptions(session.Options{SharedConfigState: session.SharedConfigEnable}))
// Initialize new aws client using IAM credentials
client := lambda.New(sess, &aws.Config{Region: aws.String("us-east-1"), Credentials: credentials.NewStaticCredentials(os.Getenv("aws_access_key_id"), os.Getenv("aws_secret_access_key"), "")})
// Prepare request parameters
request := Info{Firstname: "Oluwatomisin", Lastname: "Bamimore", Age: 16}
payload, err := json.Marshal(request)
if err != nil {
fmt.Println("Error marshalling request")
os.Exit(0)
}
result, err := client.Invoke(&lambda.InvokeInput{FunctionName: aws.String("user-profile"), Payload: payload})
if err != nil {
fmt.Println("Error calling user-profile function", err)
os.Exit(0)
}
var resp Response
err = json.Unmarshal(result.Payload, &resp)
if err != nil {
fmt.Println("Error unmarshalling user-profile response")
os.Exit(0)
}
// Print response from lambda function
fmt.Println(resp.Profile)
}
你需要创建一个具有正确权限的IAM用户。
将aws_access_key_id 和aws_secret_access_key 存储在你目前工作的目录中的.env 文件中。

运行该程序后,AWS将执行云函数,你将得到这个结果。

该程序将一些参数(json格式)传入云函数并返回结果。
总结
我们已经看到了如何部署和消费AWS Lambda函数。
在本教程中,我们通过建立一个用Golang编写的用户配置文件生成器函数来学习。
我们还通过使用一个实际的客户端程序和AWS上的Lambda控制台发送触发器来测试Lambda函数。
在其他语言中,如Python、JavaScript和Java,我们使用相同的机制来创建无服务器函数。
编码愉快。
进一步阅读
同行评审投稿人:。Srishilesh P S
类似文章
[

边缘计算
为什么你的物联网项目需要事件驱动架构?
阅读更多

边缘计算
机器人的数字双胞胎和物联网
阅读更多

边缘计算
计算型存储是解决边缘存储问题的新方法吗?
阅读更多