相关操作

最近更新时间:2024-05-12 10:46:22

我的收藏

在轻量应用服务器中构建及部署函数

如果您习惯使用在轻量应用服务器中进行远程开发,可以直接在轻量应用服务器内进行函数的构建与部署,此方式不依赖容器镜像仓库。



命令行登录

OpenFaaS 应用镜像内已内置 faas-cli 命令行工具,在轻量应用服务器内使用 faas-cli 命令行登录可以在登录轻量应用服务器实例后使用以下命令。
cat /var/lib/faasd/secrets/basic-auth-password | faas-cli login -s

创建函数

使用 faas-cli 创建一个名为 lh-faas-go 的函数,该函数语言为 Golang。
faas-cli new lh-faas-go --lang go


创建成功后,会新建 lh-faas-go、lh-faas-go.yml、template。


云函数的入口位于 lh-faas-go/handler.go,在这里可以编写您的第一个 Golang 云函数。
package function

import (
"fmt"
"time"
)

// Handle a serverless request
func Handle(req []byte) string {
return fmt.Sprintf(
"Hello, Lighthouse. You said: %s, at: %s",
string(req), time.Now().Format(time.RFC3339),
)
}

构建函数

完成函数创建后,使用以下命令构建函数。
faas-cli build -f lh-faas-go.yml --shrinkwrap
构建成功后会看到目录内多出了 build 文件夹。





切换至 root 用户并进入 ./build/lh-faas-go 目录构建容器镜像。
注意
faasd 函数部署在 openfaas-fn 命名空间,如果没有镜像仓库,可以直接将镜像放入 openfaas-fn 命名空间。OpenFaaS 应用镜像中已内置构建函数所需的 nerdctl 和 buildkit。
sudo su
cd ./build/lh-faas-go
nerdctl build --namespace openfaas-fn -t lh-faas-go:latest .



您可以通过以下命令查看制作好的容器镜像。
nerdctl --namespace openfaas-fn image ls




部署函数

完成函数镜像构建之后,从 ./build/lh-faas-go 返回项目目录,执行部署命令。
faas-cli deploy -f lh-faas-go.yml




测试函数

刷新 OpenFaaS 控制台,即可看到我们的 lh-faas-go 函数出现在左侧函数列表里,可以在控制台测试函数的返回结果。




本地构建函数并部署至轻量应用服务器

您可以在本地编写云函数,制作并上传函数容器镜像至容器镜像仓库,然后在轻量应用服务器中部署该云函数。



命令行登录

安装 faas-cli

Linux 下可以使用 curl 安装:
curl -sSL https://cli.openfaas.com | sh
macOS 推荐使用 homebrew 安装:
brew install faas-cli
Windows 推荐在 Powershell 内执行命令安装,或直接 下载应用程序
$version = (Invoke-WebRequest "https://api.github.com/repos/openfaas/faas-cli/releases/latest" | ConvertFrom-Json)[0].tag_name
(New-Object System.Net.WebClient).DownloadFile("https://github.com/openfaas/faas-cli/releases/download/$version/faas-cli.exe", "faas-cli.exe")


登录

在本地环境使用以下命令进行登录
faas-cli login --username admin --password 'password' --gateway http://{{lighthouse_ip}}




准备容器镜像仓库

在本示例中,我们将构建函数镜像,并推送至腾讯云 个人版容器镜像服务。您也可以推送至其他对外提供容器镜像服务的容器镜像仓库。
首先创建命名空间,然后在本地登录个人版容器镜像服务。



创建函数

使用 faas-cli 创建一个名为 lh-faas-py3 的函数,该函数语言为 Python3,并设置镜像前缀地址和待部署的轻量应用服务器公网 IP 地址。
faas-cli new lh-faas-py3 --lang python3 --prefix ccr.ccs.tencentyun.com/lh-openfaas --gateway http://{{lighthouse_ip}}





编写函数

编辑 lh-faas-py3/handler.py 并保存,该函数将会返回入参,并增加“Lighthouse response: ”前缀。
def handle(req):
"""handle a request to the function
Args:
req (str): request body
"""

return "Lighthouse response: " + req


部署函数

使用以下命令构建、推送以及部署函数。
构建:
faas-cli build -f lh-faas-py3.yml

推送:
faas-cli push -f lh-faas-py3.yml

部署:
faas-cli deploy -f lh-faas-py3.yml

部署成功后显示如下:


测试函数

刷新 OpenFaaS 控制台,即可看到我们的 lh-faas-py3 函数出现在左侧函数列表里,可以在控制台测试函数的返回结果。




云函数调用方式

微信小程序内HTTP调用

通过 POST 请求 OpenFaaS 控制台里对应函数的 URL,即可完成一次调用。
例如:在小程序内调用 figlet 函数,并在页面内展示返回结果。
Page({
/**
* 页面的初始数据
*/
data: {
messages: []
},
/**
* 生命周期函数--监听页面加载
*/
onLoad() {
let figletStr = "Hello, Lighthouse!"
let url = "https://miniprogramdomain/function/figlet"
wx.request({
url: url,
method: "POST",
data: figletStr,
success: (res) => {
let messages = [{
title: figletStr,
date: "8 November",
summary: res.data,
image: imageUrl,
preShow: true
}]
this.setData({ messages: messages })
}
})
},
})

在微信小程序内预览本示例的效果如下:




HTTP 调用

可以通过 HTTP 请求直接调用云函数:
curl -d 'Hello, Lighthouse!' http://{{lighthouse_ip}}/function/figlet
调用成功后显示如下:




命令行

您可以通过 faas-cli 命令行进行函数调用:
echo '欢迎使用OpenFaaS' | faas-cli invoke lh-faas-py3 --gateway http://{{lighthouse_ip}}
调用成功后显示如下: