从本地源运行函数
通过本教程,使用 Code Engine CLI 从本地系统上的代码运行函数
函数是一个无状态代码片段,当 HTTP 请求调用时执行任务。 借助 IBM Code Engine 功能,您可以以可扩展且无需服务器的形式运行业务逻辑。 IBM Code Engine 函数提供优化的运行时环境,支持低延迟和快速扩展场景。 您的功能代码可以写在托管运行时中,托管运行时包括特定的 Node.js 或 Python 版本。
代码束是表示函数代码的文件的集合。 此代码束将注入到运行时容器中。 代码束由 Code Engine 创建,并存储在容器注册表中或与函数直接插入。 代码束不是开放式容器计划 (OCI) 标准容器映像。
准备工作
所有 Code Engine 用户都需要具有现收现付帐户。 教程可能会产生成本。 使用成本估算器,根据您的预计使用量生成成本估算。 有关更多信息,请参阅 Code Engine 定价。
设置环境
-
登录到 IBM Cloud CLI。
ibmcloud login -r us-south
-
通过运行以下命令将资源组设定为目标。 要查看资源组的列表,请运行
ibmcloud resource groups
。ibmcloud target -g <resource_group>
示例输出
Targeted resource group default
-
在 Code Engine 中创建名为
sample
的项目。ibmcloud ce project create --name sample
示例输出
Creating project 'sample'... ID for project 'sample' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'. Waiting for project 'sample' to be active... Now selecting project 'sample'. OK
请注意,您的项目也已选择用于上下文,因此所有后续与应用程序相关的命令都在此新的
sample
项目的范围内。 -
通过查看命令选项来熟悉函数命令。
ibmcloud ce fn --help
创建源代码
使用以下样本代码创建名为 funhello.js
的 Node.js 源文件。
function main(params) {
var msg = 'You did not tell me who you are.';
if (params.name) {
msg = `Hello, ${params.name}!`
} else {
msg = `Hello, Functions on CodeEngine!`
}
return {
headers: { 'Content-Type': 'text/html; charset=utf-8' },
body: `<html><body><h3>${msg}</h3></body></html>`
}
}
module.exports.main = main;
创建函数
从 funhello.js
文件创建函数。
ibmcloud ce fn create --name funhello --runtime nodejs-20 --build-source funhello.js
命令输出
Preparing function 'funhello' for build push...
Creating function 'funhello'...
Packaging files to upload from source path 'hello.js'...
Submitting build run 'funhello-run-230623-090738611'...
Creating image 'private.stg.icr.io/ce--8a6a0-13c66hbi3rhz/function-funhello:230623-1407-s8kzr'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n funhello-run-230623-090738611' to check the build run status.
Waiting for function 'funhello' to become ready...
Function 'funhello' is ready.
OK
Run 'ibmcloud ce function get -n funhello' to see more details.
https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
在函数调用 URL 可用后,使用以下命令查找函数的相关信息。
ibmcloud ce fn get -n funhello
让我们更深入地了解先前的 function create
命令。 请注意,function create
命令的输出提供了有关在创建和部署函数之前构建运行的进度的信息。
- Code Engine 接收从源代码创建函数的请求。
- Code Engine 检查与所选项目关联的 IAM 服务标识和 API 密钥。 此服务标识必须有权读写 IBM Cloud Container Registry。 如果不存在任何服务标识,那么 Code Engine 将为您创建一个服务标识。 请注意,此服务标识用于从同一项目运行的后续 Code Engine 构建请求。
- 此示例从本地源 (
--build-source
) 构建代码。源代码 (hello.js
) 将打包到代码束文件中,并上载到帐户中 IBM Cloud Container Registry 实例内的受管名称空间。 请注意,只能将 IBM Cloud Container Registry 作为本地构建的目标。 有关 IBM Container Registry 的更多信息,包括配额限制和访问权限,请参阅 IBM Cloud Container Registry 入门指南。 - Code Engine 将源代码构建到代码束中。 将在与源归档文件相同的名称空间中创建源代码捆绑软件。
- 构建完成后,将部署您的功能。 您可以从提供的 URL 访问您的功能。
调用函数
将 URL 粘贴到浏览器窗口中,即可调用该功能。 您还可以在命令行中使用 curl
命令。
Hello, Functions on CodeEngine!
您已成功创建并调用 Code Engine 函数!
为函数提供参数
在 URL 后面加上 ?name=Sunshine
,然后粘贴到浏览器窗口中,即可调用 URL 函数并传入参数。
https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud?name=Sunshine
Hello, Sunshine!
清除
您可以使用以下命令来删除功能。
ibmcloud ce fn delete -n funhello
删除功能时,还会删除关联的构建文件。
最后,删除构建从 IBM Cloud Container Registry创建的代码束。
- 导航 Container Registry>图片在里面IBM Cloud安慰。
- 在地点您登录时选择的下拉菜单IBM Cloud。
- 通过搜索函数名称来查找与函数关联的图像(代表代码包)(例如,
funhello
)。 - 选择图像(例如,
au.icr.io/ce--27b98-1jp42v8n9n3o/function-funhello@sha256:b53683f47e0e548b4fa1d3fc93404399fdc4008b54ccecc0852794ea88d01538
)并选择删除从省略号(...)菜单中。
后续步骤
-
URL 创建函数后,您可以通过点击控制台中的 “测试函数” 或使用
function get
命令找到。 -
您可以创建 定制域映射 并将其分配给函数。
-
创建并部署函数后,可以从控制台或使用
ibmcloud ce function update
命令更新函数以满足您的需求。 如果要更新源以用于功能,那么必须在function update
命令上提供--build-source
选项。
创建函数后,您可以使用以下 任何 方法来更新函数及其引用的代码,而与您创建或先前更新函数的方式无关:
-
如果您有现有代码束,那么只需要提供对映像的引用,该引用指向部署应用程序时容器注册表的位置。 有关更多信息,请参阅 从现有代码束创建函数工作负载。
如果使用
function create
命令创建了函数,并且指定了--build-source
选项以从本地或存储库源构建代码束,并且要将函数更改为指向其他代码束,那么必须首先从函数中除去构建的关联。 例如,运行ibmcloud ce function update -n FUN_NAME --build-clear
。 从函数中除去构建的关联后,可以更新该函数以引用另一个映像。 -
如果您是从位于 Git 存储库中的源代码开始,那么可以选择让 Code Engine 从源构建代码束并使用 单个 操作创建函数。 在此场景中,Code Engine 将代码束上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 从存储库源代码创建函数。
-
如果从本地工作站上的源代码开始,那么可以选择 Code Engine 从源构建代码束,并使用 单个 CLI 命令创建函数。 在此场景中,Code Engine 将源代码和代码束上载到 IBM Cloud® Container Registry。
例如,您可以为 Code Engine 选择在开发函数的源时构建本地源。 然后,在代码束成熟后,您可以更新函数以引用所需的特定代码束。 您可以根据需要重复此过程。
要查找更多代码示例吗? 请查看 样本 IBM Cloud Code Engine GitHub 存储库。