准备本地开发环境

在开始使用 Oracle Functions 创建和部署函数之前,必须为函数开发设置本地环境。

虽然可以使用 Cloud Shell 或 Oracle Cloud Infrastructure 计算实例作为开发环境,但本文档假设您将使用本地 Linux 环境进行函数开发。

开始之前

除了本节中提出的用于为函数开发设置本地 Linux 实例的任务外,还必须执行以下任务:

创建签名密钥

在使用 Oracle Functions 之前,必须设置 Oracle Cloud Infrastructure API 签名密钥。

  1. 以函数开发人员身份登录到本地计算机开发环境。
  2. 生成使用您输入的密码短语加密的私有密钥:
    $ openssl genrsa -out ~/.oci/<private-key-file-name>.pem -aes128 2048

    其中 <private-key-file-name> 是您为私钥文件选择的名称。

  3. 出现提示时,输入密码短语以加密私有密钥文件。请确保记下输入的口令短语,因为稍后需要该口令短语。
  4. 提示时,重新输入密码短语以确认密码短语。
  5. 更改文件的权限以确保只有您才能读取该文件。
    $ chmod go-rwx ~/.oci/<private-key-file-name>.pem

    其中 <private-key-file-name> 是私有密钥文件的名称。

  6. 通过输入以下内容生成公共密钥(使用创建私有密钥时提供的相同密码短语加密):
    $ openssl rsa -pubout -in ~/.oci/<private-key-file-name>.pem -out ~/.oci/<public-key-file-name>.pem

    其中 <private-key-file-name> 是私有密钥文件的名称,<public-key-file-name> 是您为公钥文件选择的名称。

  7. 出现提示时,输入以前输入的同一密码短语以加密私有密钥文件。
  8. 通过输入以下内容复制刚创建的公钥文件的内容:
    $ cat ~/.oci/<public-key-file-name>.pem | pbcopy

    其中 <public-key-file-name> 是您选择的公共密钥文件的名称。

  9. 以函数开发人员身份登录控制台,打开右上角的 "User"(用户)菜单,然后选择 "User Settings"(用户设置)。
  10. 在 API 密钥页上,单击添加公共密钥。将公共密钥的值粘贴到窗口中,然后单击添加。将上载密钥并显示其指纹。

创建命令行界面 (CLI) 配置文件

在使用 Oracle Functions 之前,必须有一个 Oracle Cloud Infrastructure CLI 配置文件,其中包含将用于创建和部署功能的用户帐户的身份证明配置文件。

Oracle Cloud Infrastructure CLI 配置文件可以包含多个配置文件。如果已有一个包含一个或多个概要文件的配置文件,则必须将新概要文件添加到将使用 Oracle Functions 创建和部署函数的用户的现有文件中

  1. 以函数开发人员身份登录到本地计算机开发环境。
  2. 在文本编辑器中打开文件 ~/.oci/config。(如果目录和/或文件不存在,请创建它们)。
  3. 按如下所示将新配置文件添加到 ~.oci/config 文件:
    [<profile-name>]
    user=<user-ocid>
    fingerprint=<public-key-fingerprint>
    key_file=<full-path-to-private-key-pem-file>
    tenancy=<tenancy-ocid>
    region=<region-name>
    pass_phrase=<passphrase>

    其中:

    • <profile-name> 是您为概要信息选择的名称。
    • <user-ocid> 是将用于创建和部署函数的 Oracle Cloud Infrastructure 用户帐户的 OCID。
    • <public-key-fingerprint> 是先前在控制台中上载的公共 API 密钥值的指纹。
    • <full-path-to-private-key-pem-file> 是您以前创建的私钥文件的完整路径。
    • <tenancy-ocid> 是要在其中创建和部署函数的租户的 OCID。
    • <region-identifier> 是要在其中创建和部署函数的 Oracle Cloud Infrastructure 区域的标识符。例如,us-phoenix-1
    • <passphrase> 是在创建公共/私有密钥时指定的密码短语。
  4. 保存并关闭该文件。

复制和配置 oci-curl 脚本

可以使用脚本调用函数。oci-curl 脚本基于您在脚本正文中提供的身份证明创建签名的请求。

要使用 oci-curl 调用函数,必须提供 Oracle Cloud Infrastructure 用户的身份证明,该用户已被授予对同一租户中资源的访问权限,并且与该函数属于同一区间。

通常,您要调用函数作为为开发环境配置的函数开发者。下面的说明假设是这种情况。

  1. 登录开发环境。
  2. 在开发环境中创建 oci-curl 脚本文件的副本,并将身份证明添加到文件中,如下所示:
    1. 在浏览器中,导航到 https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/signing_sample_bash.txt 以将 oci-curl 代码视为原始文本。
    2. 选择所有文本并复制。
    3. 在文本编辑器中,在方便的位置打开新文件。

      例如,在终端窗口中,您可以在起始目录中创建新子目录,并通过输入以下内容在该目录中打开新文件:

      $ cd ~
      
      $ mkdir oci-curl
      
      $ vim ~/oci-curl/oci-curl.sh

      新文件的名称和位置由您决定,但以下说明采用 ~/oci-curl/oci-curl.sh

    4. 将先前复制的 oci-curl 脚本代码粘贴到新文件中。
    5. 保存文件,但将其保留为打开状态,以便您可以添加身份证明。
  3. oci-curl.sh 文件中的示例身份证明替换为要调用函数的用户帐户的身份证明:
    local tenancyId="<tenancy_id>";
    local authUserId="<user_id>";
    local keyFingerprint="<public_fingerprint>";
    local privateKeyPath="<private_key_path>";

    其中:

    • <tenancy_id> 是部署了函数的租户的 OCID。
    • <user_id> 是要运行函数的用户帐户的 OCID。用户帐户必须有权访问同一租户中与函数属于同一区间的资源。
    • <public_fingerprint> 是上载到 Oracle Cloud Infrastructure 的用户公钥的指纹。
    • <private_key_path> 是私有密钥文件的完整路径,该文件与您为其提供了指纹的公共密钥配对。例如:
      local privateKeyPath="/Users/johndoe/.oci/john_api_key_private.pem";
  4. 保存并关闭 oci-curl.sh 文件。

安装 Fn 项目命令行界面 (CLI)

在使用 Oracle Functions 之前,Fn Project 命令行界面 (CLI) 必须安装在开发环境中。

此过程使用 curl 在 Linux 实例上安装 CLI。GitHub 上的 Fn 项目的自述文件中提供了其他操作系统的说明。

  1. 以函数开发人员身份登录开发环境。
  2. 使用以下命令检索和运行安装脚本:
    $ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
    
    

    如果系统提示您输入口令,请输入超级用户的口令。

  3. 在终端窗口中,通过输入以下内容确认 CLI 已安装:
    $ fn version

    如果 CLI 已正确安装,则会显示版本。

创建 Fn 命令行界面上下文

最初安装 Fn Project 命令行界面 (CLI) 时,会将其配置为本地开发。要将 Fn Project CLI 配置为连接到 Oracle Cloud Infrastructure 租户,必须创建新的上下文。

上下文指定 Oracle Functions 端点、部署的函数所属的区间的 OCID 以及要推送和拉取图像的 Docker 注册表的地址。您可以定义多个上下文,每个上下文都以 .yaml 格式存储在不同的上下文文件中。

  1. 以函数开发人员身份登录开发环境。
  2. 在终端窗口中,为 Oracle Cloud Infrastructure 创建新的 Fn Project CLI 上下文:
    $ fn create context <my-context> --provider oracle

    其中 <my-context> 是您选择的名称。

  3. 指定 Fn Project CLI 将使用新上下文:
    $ fn use context <my-context>

    其中 <my-context> 是您指定的上下文名称。

  4. 指定要使用的命令行界面配置文件的名称:
    $ fn update context oracle.profile <profile-name>
  5. 指定将在其中部署部署函数的区间 OCID:
    $ fn update context oracle.compartment-id <compartment-ocid>
  6. 指定调用 API 时要使用的端点:
    $ fn update context api-url <api-endpoint>
    其中 <api-endpoint> 是格式的端点之一:
    https://functions.<region-identifier>.oci.oraclecloud.com
    其中 <region-identifier> 是要在其中创建和部署函数的 Oracle Cloud Infrastructure 区域的标识符。例如:
    us-phoenix-1
  7. 使用要与 Oracle Functions 一起使用的 Docker 注册表的地址配置新上下文:
    $ fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name>
    其中:
    • <region-key>Oracle Cloud Infrastructure Registry 区域的关键字。例如,phx 表示 Phoenix。

      Oracle 建议您指定的 Docker 注册表与要运行函数的子网位于同一区域。

    • <tenancy-namespace> 是要在其中创建资料档案库的租户的自动生成的 Oracle Cloud Infrastructure Object Storage 名称空间字符串(如租户信息页中所示)。
    • <repo-name> 是预挂载到您部署的函数名称的资料档案库名称。

    例如:

    $ fn update context registry phx.ocir.io/ansh81vru1zp/my-repo

创建验证标记

要在Oracle云基础设施中部署功能,必须创建验证令牌,以便在登录Oracle云基础设施注册表时用作密码。

  1. 登录到 Oracle Cloud Infrastructure 控制台,单击用户图标,然后选择用户设置
  2. 要创建新的验证标记,请在资源部分中单击验证标记,然后单击生成标记
  3. 提供验证令牌的说明,然后单击生成令牌。显示令牌时复制令牌。
  4. 单击制链接并将令牌信息存储在安全位置,因为关闭对话框时,您将无法在控制台中再次看到令牌。
  5. 单击关闭

登录到 Oracle Cloud Infrastructure Registry

在使用 Oracle Functions 之前,必须先登录 Docker 注册表,在其中将函数存储为 Docker 映像。这是您先前在 Fn Project 命令行界面 (CLI) 上下文中指定的 Docker 注册表。

登录注册表之前,必须首先执行以下操作:
  • 在开发环境中安装和启动了 Docker
  • 为 Fn 命令行界面 (CLI) 创建了 Oracle Cloud Infrastructure 上下文
  • 为用户创建了 Oracle Cloud Infrastructure 验证令牌

您可以在 Oracle Cloud Infrastructure Registry 的公共和专用资料档案库中存储函数,该资料档案库是基于 Oracle Cloud Infrastructure 构建的 Oracle 管理的注册表。

要完成以下步骤,必须提供 Oracle Cloud Infrastructure Object Storage 的租户名称空间、用户名和用户的验证令牌。

要将 Docker 登录到 Oracle Cloud Infrastructure Registry

  1. 以函数开发人员身份登录开发环境。
  2. 在终端窗口中,登录到 Oracle Cloud Infrastructure Registry
    $ docker login <region-key>.ocir.io

    其中 <region-key> 是 Fn Project CLI 上下文中指定的 Oracle Cloud Infrastructure Registry 区域的关键字。例如,phx 表示 Phoenix。

  3. 出现提示时,输入将创建和部署函数的用户的用户名
    <tenancy-namespace>/<username>
    其中:
    • <tenancy-namespace> 是要在其中创建资料档案库的租户的自动生成的 Oracle Cloud Infrastructure Object Storage 名称空间字符串(如租户信息页中所示)。
    • <username> 是将创建和部署函数的用户。
    如果您的租户与 Oracle Identity Cloud Service 联合,请使用以下格式:
    <tenancy-namespace>/oracleidentitycloudservice/<username>
  4. 提示输入令时,输入用户的 Oracle Cloud Infrastructure 验证令牌。