从现有代码束创建函数工作负载
在 IBM Cloud® Container Registry 中使用代码包创建您的 Code Engine 函数。 您可以在控制台或通过 CLI 创建函数。
代码束是表示函数代码的文件的集合。 此代码束将注入到运行时容器中。 代码束由 Code Engine 创建,并存储在容器注册表中或与函数直接插入。 代码束不是开放式容器计划 (OCI) 标准容器映像。
您无法从 Container Registry 以外的位置获取代码包。
准备工作
-
您必须在 IBM Cloud® Container Registry中具有代码束。 有关更多信息,请参阅 Container Registry 入门。 或者,可以从 存储库源 或 本地源 构建映像。
-
请确认您能够访问注册表。 请参阅 设置容器注册表的权限。
您是否希望将项目配置为:让所有项目用户都能在 Container Registry 中存储和访问图片,而无需手动创建注册表密钥? 通过足够的许可权,您可以根据每个位置 (区域) 配置此缺省注册表访问权。 如果您没有足够的许可权来执行这些操作,那么可以使用此页面来帮助您了解必需的许可权。 请参阅 配置项目范围的设置。
使用控制台在 Container Registry 中创建引用代码束的函数
使用 Code Engine 控制台创建一个使用现有代码包的函数。
Code Engine 可以自动从 Container Registry中提取代码束。
- 打开 Code Engine 控制台。
- 选择“开始创建”。
- 从可用项目列表中选择一个项目。 您还可以 创建新的。 您必须选择项目以创建函数。
- 选择“功能”。
- 输入函数名称;例如,
myfunction。 为函数起一个在项目中具有唯一性的名称。 - 为函数代码选择 运行时映像。 有关更多信息,请参阅 运行时。
- 选择 使用现有代码束。
- 以
registry/namespace/repository:tag格式指定代码束的位置。 - 如果代码束位于您的帐户或公共注册表中,那么无需指定注册表私钥。 如果代码束位于专用注册表中,那么必须添加注册表私钥。 要获取其他帮助,请单击 帮助我指定代码束。 有关更多信息,请参阅 访问容器注册表。
- 指定资源信息,包括 CPU 和内存组合 和 缩放延迟。
- (可选) 指定 定制域 或 环境变量。
- 单击创建。
- 在功能状态更改为 就绪后,您可以测试功能。 单击 测试功能,然后单击 发送请求。 要在网页中打开该函数,请点击 “函数”URL。
使用 CLI 部署具有现有代码束的函数
IBM Cloud® Container Registry 编写一个函数,使用CLI通过 ibmcloud ce fn create 命令。 有关选项的完整列表,请参阅 ibmcloud ce fn create 命令。
准备工作
- 设置 Code Engine CLI 环境。
- 创建和使用项目。
- 在可以使用引用 Container Registry中的代码束的 Code Engine 函数之前,必须先添加对注册表的访问权,以便 Code Engine 可以在创建该函数时提取代码束。 有关访问注册表所需的许可权的信息,请参阅 设置映像注册表的权限。
使用 CLI 从公共注册表部署函数
如果现有代码束位于您的帐户或公共注册表中,那么可以使用 ibmcloud ce fn create 命令。
例如,运行以下命令以从公共注册表中拉取现有代码束并创建函数。
ibmcloud ce fn create --name myhellofun --code-bundle icr.io/codeengine/samples/function-nodejs-codebundle --runtime nodejs
运行提供的 fn get 命令,以查找 URL。 然后,您可以使用 curl 命令来调用该 URL。
现有代码束的示例输出。
<html><body><h3>Hello, Functions on CodeEngine!</h3></body></html>
使用 CLI 从专用注册表部署函数
要从专用注册表访问现有代码束,必须设置对注册表的访问权,创建注册表私钥,然后在运行 ibmcloud ce fn create 命令时提供该私钥。
-
要添加对Container Registry 的访问,请 创建一个 IAM API 密钥。 要使用 CLI 创建“IBM CloudIAM API 密钥,请运行”
iam api-key-create命令。 例如,要创建一个名为 "cliapikey、描述名为 "My CLI API key的 API 密钥,并将其保存到名为 "key_file的文件中,请运行以下命令:ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file如果选择不将密钥保存到文件中,那么必须记录创建密钥时显示的 API 密钥。 以后将无法检索。
-
创建 API 密钥后,创建 Code Engine的注册表密钥。 要创建注册表私钥,请使用
ibmcloud ce secret create --format registry命令。 例如,以下命令将创建对名为myregistry的 Container Registry 实例的注册表访问权。 请注意,尽管在示例命令中指定了--server和--username选项,但--server选项的缺省值为us.icr.io,当服务器为us.icr.io时,--username选项缺省为iamapikey。ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEY示例输出
Creating registry secret 'myregistry'... OK -
在 Container Registry中的专用注册表中创建函数并引用代码束。 例如,使用
ibmcloud ce fn create命令来创建myhellofun函数,以使用myregistry访问信息来引用icr.io/codeengine/samples/function-nodejs-codebundle。ibmcloud ce fn create --name myhellofun --code-bundle icr.io/NAMESPACE/REGISTRY:TAG --registry-secret myregistry此函数的代码束名称的格式为
REGISTRY/NAMESPACE/REGISTRY:TAG,其中REGISTRY和TAG是可选的。 如果未指定REGISTRY,则默认值为icr.io。 如果未指定TAG,则默认值为latest。 -
在创建函数后,可以调用该函数。 要查找函数的 URL,请运行提供的
ibmcloud ce fn get命令。 然后,您可以使用curl命令来调用该 URL。
后续步骤
-
URL 函数创建完成后,您可以通过在控制台中点击“测试函数”,或使用
function get命令查找该函数的xml-ph-0000@deepl.internal。 -
您可以创建 定制域映射 并将其分配给函数。
-
创建并部署函数后,可以从控制台或使用
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 代码库中的示例。