关于在 Windows 系统上配置 Terraform

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

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

在运行 Terraform 之前:

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

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

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

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

安装 Terraform

要在 Windows 系统上安装 Terraform,请从 Terraform Web 站点下载相应的程序包。

  1. 转至https://www.terraform.io/downloads.html
  2. 将适用的程序包下载到本地系统。
  3. 将程序包提取到文件夹C:\Program Files (x86)
    此路径用作示例。但是,您还可以对本地系统中的任何其他位置执行 Terraform 可执行文件。
  4. 更新路径环境变量以包括 Terraform 可执行文件所在的文件夹。
    1. 转至控制面板。
    2. 单击系统。
    3. 在 Windows 10 系统上,单击高级系统设置。此选项在不同版本的 Windows 中可能有所不同。
      此时将显示“系统属性 ”窗口的高级选项卡。
    4. 单击窗口底部附近的环境变量
      此时将显示“环境变量 ”窗口。
    5. 系统变量窗格中,单击路径,然后单击编辑。
    6. 单击新建。向 Terraform 可执行文件所在的文件夹添加路径。
    7. 单击确定以保存更改,然后单击确定以退出“环境变量 ”窗口。然后再次单击确定以退出“系统属性 ”窗口。
  5. 要验证安装并检查版本,请启动 Windows PowerShell,然后输入:terraform -version
    您将看到输出中显示的 Terraform 版本。例如:Terraform v0.11.8

下载 Terraform 模块

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

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

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

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

可以使用 PuTTYgen 生成 SSH 密钥对。请不要为 SSH 密钥设置密码短语。

  1. 启动 PuTTYgen。
  2. 接受默认密钥类型 SSH-2 RSA 并将生成的密钥中的位数设置为 2048 (如果尚未设置)。
  3. 单击生成,然后在空白区域中移动鼠标以生成随机性。
    将生成密钥,其值显示在用于粘贴到 OpenSSH authorized_keys 文件的公钥下方。
  4. 单击保存私有密钥。系统将提示您确认是否要在不带密码短语的情况下保存密钥。单击是。您可以将此密钥存储在任何位置,但为了简便起见,将其存储在 Terraform 模块所在的同一文件夹中。
  5. 下来,要保存公共密钥,请选择公共密钥中显示的所有已生成密钥,以便粘贴到 OpenSSH authorized_keys 文件字段中,复制密钥并将其粘贴到文本文件中。将此文件保存在与私有密钥相同的位置。不使用保存公共密钥按钮,因为该按钮没有以 OpenSSH 格式保存密钥。
您现在已在本地系统中生成并存储了 SSH 密钥对。请确保记下存储此密钥对的位置。

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

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

用于允许从基础主机到其他实例进行访问的 SSH 密钥对必须使用实用程序(例如 OpenSSL 或 ssh-keygen.)生成。无法使用 PuTTY 生成的 SSH 密钥对 , 因为 PuTTY 使用的.ppk 格式在 Oracle Linux 或其他 UNIX 类似操作系统上不受支持。请记住,基本主机将 SSH 通信量转发到其他实例,使用 Oracle Linux 映像。

  1. 开始 Git Bash。
  2. 输入: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 密钥对并将其保存在指定位置。记下此位置。

生成 API 签名密钥

必须以隐私增强的邮件(PEM)格式提供 RSA 密钥对以使用 Oracle Cloud Infrastructure 验证 Terraform 脚本。请注意,此 API 签名密钥与用于访问实例的 SSH 密钥对不同。可以使用 Git Bash 中的 OpenSSL 生成此密钥对。您应该已经在本地系统上安装了 Git Bash。

  1. 开始 Git Bash。
  2. 创建隐藏文件夹以存储 PEM 密钥。您可以将 PEM 密钥存储在任何位置,但为了简化起见,请在 Terraform 模块所在的文件夹下创建此文件夹。请确保记下存储密钥对的位置。导航到该位置,然后输入:mkdir ./.oci
  3. 要创建 API 签名密钥,请输入:openssl genrsa -out ./.oci/key_name.pem 2048
  4. 更改私有密钥的权限以确保只有您可以读取该私有密钥。输入:chmod go-rwx ./.oci/key_name.pem
  5. 接下来,要为给定私有密钥生成公共密钥,请输入: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. 在本地系统上,启动 Git Bash。导航到您存储 API 签名密钥对的文件夹。
  6. 要复制公共密钥,请输入:cat ./key_name_public.pem.。将显示公共密钥值。复制此值,包括行-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----.
  7. 在控制台中,粘贴公钥值并单击添加。

设置环境变量

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

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

  • 租户 Oracle Cloud Infrastructure ID (OCID)

  • 用户 OCID

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

  • 区域

  • 区间 OCID

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

  1. 在本地系统上,导航到 Terraform 模块所在的目录。
  2. 在文本编辑器中打开 env-vars.ps1 文件。
  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 公共密钥和 SSH 私有密钥的完整路径和文件名。请确保指定在基础主机上使用的公共密钥和私有密钥是使用 PuTTY 创建的密钥对以及您指定用于其他实例的密钥对是使用 ssh-keygen.创建的密钥对
  7. 检查您是否正确输入了所有值。如果您忽略了任何值,则在运行 Terraform 时将提示您输入。如果您提供的值不正确,Terraform 将出错。当您满意所有值都正确时,保存并关闭 env-vars 文件。
  8. 要设置在 env-vars 文件中指定的环境变量,请启动 Windows PowerShell,导航到 Terraform 模块所在的文件夹,然后输入:env-vars.ps1
    这将运行 env-vars.ps1 文件,该文件为当前会话设置此文件中指定的所有变量。
  9. 要检查是否已设置环境变量,请输入:dir env:
    此表列出了所有环境变量。可以查看 TF_VAR 变量以验证其值是否已按预期设置。

验证您的 Terraform 配置

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

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