从现有代码束创建函数工作负载

在 IBM Cloud® Container Registry 中使用代码包创建您的 Code Engine 函数。 您可以在控制台或通过 CLI 创建函数。

代码束是表示函数代码的文件的集合。 此代码束将注入到运行时容器中。 代码束由 Code Engine 创建,并存储在容器注册表中或与函数直接插入。 代码束不是开放式容器计划 (OCI) 标准容器映像。

您无法从 Container Registry 以外的位置获取代码包。

准备工作

您是否希望将项目配置为:让所有项目用户都能在 Container Registry 中存储和访问图片,而无需手动创建注册表密钥? 通过足够的许可权,您可以根据每个位置 (区域) 配置此缺省注册表访问权。 如果您没有足够的许可权来执行这些操作,那么可以使用此页面来帮助您了解必需的许可权。 请参阅 配置项目范围的设置

使用控制台在 Container Registry 中创建引用代码束的函数

使用 Code Engine 控制台创建一个使用现有代码包的函数。

Code Engine 可以自动从 Container Registry中提取代码束。

  1. 打开 Code Engine 控制台。
  2. 选择“开始创建”。
  3. 从可用项目列表中选择一个项目。 您还可以 创建新的。 您必须选择项目以创建函数。
  4. 选择“功能”。
  5. 输入函数名称;例如,myfunction。 为函数起一个在项目中具有唯一性的名称。
  6. 为函数代码选择 运行时映像。 有关更多信息,请参阅 运行时
  7. 选择 使用现有代码束
  8. registry/namespace/repository:tag 格式指定代码束的位置。
  9. 如果代码束位于您的帐户或公共注册表中,那么无需指定注册表私钥。 如果代码束位于专用注册表中,那么必须添加注册表私钥。 要获取其他帮助,请单击 帮助我指定代码束。 有关更多信息,请参阅 访问容器注册表
  10. 指定资源信息,包括 CPU 和内存组合缩放延迟
  11. (可选) 指定 定制域环境变量
  12. 单击创建
  13. 在功能状态更改为 就绪后,您可以测试功能。 单击 测试功能,然后单击 发送请求。 要在网页中打开该函数,请点击 “函数”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 命令时提供该私钥。

  1. 要添加对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 密钥。 以后将无法检索。

  2. 创建 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
    
  3. 在 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,其中 REGISTRYTAG 是可选的。 如果未指定 REGISTRY,则默认值为 icr.io。 如果未指定 TAG,则默认值为 latest

  4. 在创建函数后,可以调用该函数。 要查找函数的 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 代码库中的示例