关于在类似 UNIX 的系统上配置 Terraform

要使用 Terraform 创建 Oracle Cloud Infrastructure 组件,必须下载和安装 Terraform。您还将下载 Terraform 模块,这些模块创建将使用的配置文件以创建所需的基础结构组件。

安装 Terraform 和存储 Teraform 模块的系统可以位于内部部署或云中。为了方便起见,我们将作为本地系统或本地主机参考它。

在运行 Terraform 之前:

  • 生成用于允许您访问计算实例的 SSH 密钥对

  • 生成用于验证由 Terraform 发出的 API 调用的 API 签名密钥

  • 设置 Terraform 用于验证访问和执行其计划的环境变量

完成这些步骤后,即可应用 Terraform 配置文件以在 Oracle Cloud Infrastructure 上创建基础结构组件。

安装 Terraform

要在 Linux 或 UNIX 类似系统上安装 Terraform,请从 Terraform Web 站点下载相应的程序包。

  1. 转至https://www.terraform.io/downloads.html
  2. 将适用的程序包下载到本地系统。
  3. 将程序包提取到路径/usr/local/bin/
    不需要进一步安装。Terraform 现已安装并可供使用。

    还可以将 Terraform 提取到本地系统中的任何其他位置。只需确保将该位置添加到系统上的 PATH 变量中。

  4. 要验证安装并检查版本,请打开终端,然后运行 terraform -version
    您将看到输出中显示的 Terraform 版本。例如:Terraform v0.11.8

下载 Terraform 模块

要开始使用 Terraform 在 Oracle Cloud Infrastructure 中创建基础结构组件,请下载 Terraform 模块。

  1. 使用 Git 或 Web 浏览器在本地系统上克隆或下载 Terraform 模块。针对指向 Git 资料档案库的链接,在左侧导航中单击下载代码。
  2. 将 Terraform 模块解压缩到本地系统上的目录。
  3. 导航到 Terraform 模块所在的目录。运行 terraform init。这还将下载用于 Terraform 的 Oracle Cloud Infrastructure 提供方。
    Terraform 用 OCI 提供方插件初始化模块。初始化完成后,您将看到消息 Terraform has been successfully initialized!

生成 SSH 密钥对以访问基础主机

SSH 密钥对用于安全地访问在公共子网中创建的实例。您可以在本地主机上生成 SSH 密钥对。通过 Terraform 模块,将 SSH 公共密钥添加到基础主机。当您需要通过公共 Internet 连接到基础主机时,可提供 SSH 私有密钥以验证访问权限。

可以使用 ssh-keygen 实用程序生成 SSH 密钥对。请不要为 SSH 密钥设置密码短语。

  • 要使用 ssh-keygen 实用程序生成 SSH 密钥对,请在终端中输入:ssh-keygen -t rsa -N "" -b 2048 -C "<key_name>" -f <path/root_name>
    在此命令中:
    • -t rsa 指定应使用 RSA 算法生成密钥

    • -N ""指定要与此关键字关联的密码短语。不要在引号之间输入任何内容。创建的关键字没有密码短语。

    • -b 2048指定您要生成 2048–bit 密钥。这是默认值,也是建议值的最小值。

    • -C "<key_name>"指定此密钥对的名称。

    • -f <path/root_name>指定用于保存密钥的位置以及公共密钥和私有密钥的根名称。公共密钥附加到根名称的.pub

此时将生成 SSH 密钥对并将其保存在指定位置。记下此位置。

生成 SSH 密钥对以访问其他实例

场所主机用于允许通过公共 IP 地址将 SSH 转发到不具有公共 IP 地址的其他实例,不允许通过公共 Internet 进行访问。要安全地从基础主机访问其他实例,可以使用 SSH 密钥对,其中专用子网的实例上存储的公共密钥与本地计算机上存储的私有密钥相匹配。作为安全最佳实践,此 SSH 密钥对不应与用于访问基础主机的 SSH 密钥对相同。

在本地主机上使用 ssh-keygen 来生成另一个 SSH 密钥对。记下保存此 SSH 密钥对的位置。

生成 API 签名密钥

必须以隐私增强的邮件(PEM)格式提供 RSA 密钥对以使用 Oracle Cloud Infrastructure 验证 Terraform 脚本。请注意,此 API 签名密钥与用于访问实例的 SSH 密钥对不同。可以使用 OpenSSL 生成此密钥对。

  1. 主目录区域中创建隐藏目录以存储 PEM 密钥。输入:mkdir ~/.oci
  2. 使用 OpenSSL 可以生成私有密钥。记住,在生成私有密钥时指定 2048 位或更高版本。输入:openssl genrsa -out ~/.oci/key_name.pem 2048
  3. 更改私有密钥的权限以确保只有您可以读取该私有密钥。输入:chmod go-rwx ~/.oci/key_name.pem
  4. 下来,使用 OpenSSL 为给定私有密钥生成公共密钥。输入:openssl rsa -pubout -in ~/.oci/key_name.pem -out ~/.oci/key_name_public.pem
您可以将 API 签名密钥存储在您选择的任何其他位置。但是,请确保记下此位置。

使用控制台上载 API 签名密钥

在生成 API 签名密钥之后,您必须在 Oracle Cloud Infrastructure 中上载关联用户的公共密钥。首次上载 API 签名密钥时,必须使用控制台。之后,还可以使用 API 上载 API 密钥。

  1. 登录 Oracle Cloud Infrastructure Console。
  2. 单击身份,然后单击用户。
  3. 单击要为其添加 API 签名密钥的用户。
  4. 在“用户详细信息”页上,单击添加公共密钥。
  5. 在本地系统上,要复制公钥,请输入:cat ~/.oci/key_name_public.pem | pbcopy
    如果您将密钥保存在其他位置,请改为输入该位置的路径。
  6. 在控制台中,粘贴公钥值并单击添加。

设置环境变量

使用此处提供的 Terraform 模块,可以通过在文本文件中指定所需的值来设置环境变量。然后,您只需对该文件进行源确保正确设置了所有必需的环境变量。

开始之前,请登录 Oracle Cloud Infrastructure 控制台。您将使用控制台找到以下信息。

  • 租户 Oracle Cloud Infrastructure ID (OCID)

  • 用户 OCID

  • 要使用的 API 签名密钥的指纹

  • 区域

  • 区间 OCID

另请确保您知道 API 签名密钥和 SSH 密钥对存储在本地系统中的位置。

  1. 在本地系统上,导航到 Terraform 模块所在的目录。
  2. 在文本编辑器中打开 env-vars 文件。
  3. env-vars 文件包含四个部分。从“验证详细信息”部分开始。
    1. 输入租户 OCID。您可以在 Oracle Cloud Infrastructure 控制台底部找到租户 OCID。它是一个类似于 ocid1.tenancy.oc1..aaaaa...的字符串。将此值粘贴到 env-vars 文件中。
    2. 输入用户 OCID。要查找用户 OCID,请在 Oracle Cloud Infrastructure Console 中依次单击身份用户。将显示用户列表以及用户 OCID。单击用户名下的复制以复制所需的用户 OCID。将此值粘贴到 env-vars 文件中。
    3. 输入 API 签名密钥指纹。在 Oracle Cloud Infrastructure 控制台的“用户 ”页上,单击用户可查看用户详细信息页。从 API 密钥部分中列出的密钥复制 API 密钥指纹。将此值粘贴到 env-vars 文件中。
    4. 输入本地系统上 API 私有密钥的完整路径和文件名。
  4. env-vars 文件的区域部分中,输入要在其中创建基础结构组件的区域。当前正在查看的区域显示在 Oracle Cloud Infrastructure 控制台的顶部。还可以使用控制台查找您有权访问的其他区域。
  5. env-vars 文件的区间部分中,输入要在其中创建基础结构组件的区间的区间 OCID。确保您先前指定的用户属于对此处指定的区间具有所需权限的组。要查找划分 OCID,请转到 Oracle Cloud Infrastructure 控制台。依次单击身份划分。此时将显示划分列表以及划分 OCID。单击区间名称下方的复制以复制所需的区间 OCID。将此值粘贴到 env-vars 文件中。
  6. env-vars 文件的公共/私有密钥部分中,对于主机和其他实例,输入本地系统上相应 SSH 公共密钥和私有密钥的完整路径和文件名。私有密钥的格式应为 openssh
  7. 检查您是否正确输入了所有值。如果您忽略了任何值,则在运行 Terraform 时将提示您输入。如果您提供的值不正确,Terraform 将出错。当您满意所有值都正确时,保存并关闭 env-vars 文件。
  8. 要设置在 env-vars 文件中指定的环境变量,请打开一个终端,然后导航到 Terraform 模块所在的目录。输入:source ./env-vars

验证您的 Terraform 配置

在设置所有所需的环境变量之后,验证是否已准备好运行 Terraform。

  • 在终端中,导航到 Terraform 模块所在的目录。输入:terraform plan
    此命令的输出将显示当前目录中所有模块的所有配置的执行计划。此错误说明 Terraform 为了更改当前基础结构以匹配配置而需要执行的操作。如果当前未创建任何组件,则输出中将显示运行 terraform apply 时将创建的组件的列表。如果您只希望验证配置是否成功以及所有必需的验证值已经存储在相应的环境变量中,则此命令不会创建任何组件并安全运行。