在轻量应用服务器中构建及部署函数
如果您习惯使用在轻量应用服务器中进行远程开发,可以直接在轻量应用服务器内进行函数的构建与部署,此方式不依赖容器镜像仓库。
命令行登录
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 functionimport ("fmt""time")// Handle a serverless requestfunc 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 sucd ./build/lh-faas-gonerdctl 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 functionArgs: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}}
调用成功后显示如下: