配置 Terraform 执行环境

Terraform 执行环境包括构建多层网络拓扑所需的文件夹和 Terraform 配置文件的布局。

关于 Terraform 执行环境

Terraform 执行环境的布局是为模数和未来增长设计的。

包含 Terraform 配置的目录和文件构成执行环境。每个子目录代表 Terraform 模块。子目录共同构成了可重用资源库。

以下目录结构表示您在此解决方案中构建的执行环境。

后面是 local_directory_structure.png 的说明
插图 local_directory_structure.png 的说明

整个配置位于根目录中 , 具有您选择的名称。开始时此目录必须为空。

创建配置后,根目录包含以下目录和文件:

  • compartments 目录包含划分的配置参数。
  • iam 目录包含策略和组的配置参数。
  • vcn 目录包含虚拟云网络和网关的配置参数。
  • 以下文件位于根目录中 :
    • datasources.tf 确定区域中的可用性域数并获取其名称。
    • provider.tf 定义要使用的 Terraform 提供程序的参数。
    • root.tf 定义 Terraform 应执行的模块。
    • terraform.tvars 定义传递给 Terraform 的变量的值。
    • variables.tf 声明配置中的模块使用的变量。

创建根模块

在根模块中,定义用于连接到 Oracle Cloud Infrastructure 所必需的参数。您还可以定义配置中的模块使用的数据和变量。

  1. 在安装 Terraform 的计算机上,创建一个目录,该目录称为此解决方案剩余部分的根目录。
  2. 在根目录中创建以下子目录 :
    • compartments
    • iam
    • vcn
  3. 在根目录中创建一个名为 variables.tf 的文本文件,然后将以下代码粘贴到文件中。
    此代码声明 Terraform 配置中模块使用的变量。在下一步中,请指定这些变量的值。
    variable "tenancy_ocid" {}
    variable "user_ocid" {}
    variable "fingerprint" {}
    variable "private_key_path" {}
    variable "private_key_password" {}
    variable "app_tag" {}
    variable "environment" {}
    variable "home_region" {}
    variable "region" {}
    variable "vcn_cidr" {
      default = "10.0.0.0/16"
    }
    
  4. 在根目录中创建一个名为 terraform.tfvars 的文本文件,然后将以下代码粘贴到文件中。
    在此代码中,定义在上一步中声明的变量的值。
    # Parameters to authenticate with Oracle Cloud Infrastructure
    tenancy_ocid="EXAMPLE: ocid1.tenancy.oc1..aaaaaaaaf76usem7gyfrakr35anvky4tyowvdvbik7kbrcizlyjsgfxpdg2a"
    user_ocid="EXAMPLE: ocid1.user.oc1..aaaaaaaa5tds42w2zzbsdflkjwerkjghswdjfbvbts7imlb5yru2p10a"
    fingerprint="EXAMPLE: 9b:6a:ab:ab:32:0b:7f:d5:5b:6w:c0:fe:54:72:f1:pl"
    private_key_path="YOUR_HOME_DIRECTORY/.oci/oci_api_key.pem"
    
    # Leave empty if your private key does not have a password
    private_key_password=""
    
    # See https://docs.oracle.com/pls/topic/lookup?ctx=cloud&id=oci_general_regions
    home_region="EXAMPLE: us-ashburn-1"
    region="EXAMPLE: us-phoenix-1"
    
    # A short identifier for the application, used as a prefix for naming the compartments and other resources
    app_tag="myapp"
    
    # The environment that you're creating resources for: test, dev, prod, or staging
    environment="dev"
    
    # Base CIDR for the VCN
    vcn_cidr="10.0.0.0/16"
  5. 按照下表中的说明更新 terraform.tfvars 中的变量值:
    变量 说明
    tenancy_ocid 租户的 Oracle Cloud ID (OCID)。

    要查找租户的 OCID,请从服务菜单中选择管理,然后单击租户详细资料

    user_ocid 您希望 Terraform 用于通过 Oracle Cloud Infrastructure 进行验证的用户的 Oracle Cloud ID (OCID)。

    要查找用户的 OCID,请从服务菜单中选择身份,然后选择用户。在列表中查找您的用户名,并复制 OCID 值。

    指纹 上载的 API 签名密钥的指纹。
    private_key_path 包含私有密钥的文件的路径。
    private_key_password 私有密钥的密码短语。如果密钥没有密码短语,则将此变量留空。
    home_region 租户的主区域。在主页区域中创建划分、策略和组。

    要获取主页区域,请从服务菜单中选择管理,单击租户详细资料,然后复制“主页区域 ”字段中的值。

    区域 要在其中创建网络、计算和其他资源的区域。此区域可以是主区域或任何其他 Oracle Cloud Infrastructure 区域。
    app_tag 在资源名称中使用的前缀,用于指示每个资源对应的应用程序。最佳做法是使用所有小写字符。
    环境 要在资源名称中使用的前缀,用于指示每个资源所用的环境:开发、测试、暂存或生产。最佳做法是使用所有小写字符。
    vcn_cidr VCN 的地址范围(以 CIDR 格式表示)。仔细计划此范围。您稍后无法进行更改。
  6. 在根目录中创建一个名为 datasources.tf 的文本文件,然后将以下代码粘贴到文件中。
    datasources.tf 中的代码确定区域中的可用性域数及其名称。此代码使用在 region 变量中指定的区域。
    data "oci_identity_availability_domains" "ad" {
      compartment_id = "${var.tenancy_ocid}"
    }
    
    data "template_file" "ad_names" {
      count    = "${length(data.oci_identity_availability_domains.ad.availability_domains)}"
      template = "${lookup(data.oci_identity_availability_domains.ad.availability_domains[count.index], "name")}"
    }
  7. 在根目录中创建一个名为 provider.tf 的文本文件,然后将以下代码粘贴到文件中。
    provider.tf 中的代码定义 Terraform 应使用的提供方的参数。提供方将 Terraform 命令转换为特定于云服务提供方的 API 调用。
    provider "oci" {
      alias                = "home"
      region               = "${var.home_region}"
      tenancy_ocid         = "${var.tenancy_ocid}"
      user_ocid            = "${var.user_ocid}"
      fingerprint          = "${var.fingerprint}"
      private_key_path     = "${var.private_key_path}"
      private_key_password = "${var.private_key_password}"
    }
    
    provider "oci" {
      region               = "${var.region}"
      tenancy_ocid         = "${var.tenancy_ocid}"
      user_ocid            = "${var.user_ocid}"
      fingerprint          = "${var.fingerprint}"
      private_key_path     = "${var.private_key_path}"
      private_key_password = "${var.private_key_password}"
    }
    此示例定义两个提供程序。两个提供方适用于 Oracle Cloud Infrastructure。第一个提供方用于创建 Oracle Cloud Infrastructure Identity and Access Management 资源的主目录区域。第二个提供方用于要创建网络、计算和其他资源的区域。
  8. 在根目录中创建一个名为 root.tf 的文本文件,然后将以下代码粘贴到文件中。
    此代码指定 Terraform 必须执行的模块。为 compartmentsiam 模块显式指定提供程序,因为必须在主页区域中创建区间、组和策略。
    module "compartments" {
      source       = "./compartments"
      tenancy_ocid = "${var.tenancy_ocid}"
      app_tag      = "${var.app_tag}"
      environment  = "${var.environment}"
    
      providers = {
        oci = "oci.home"
      }
    }
    
    module "a_vcn" {
      source           = "./vcn"
      tenancy_ocid     = "${var.tenancy_ocid}"
      compartment_ocid = "${module.compartments.networks_id}"
      app_tag          = "${var.app_tag}"
      environment      = "${var.environment}"
      vcn_cidr         = "${var.vcn_cidr}"
    }
    
    module "iam" {
      source       = "./iam"
      tenancy_ocid = "${var.tenancy_ocid}"
      app_tag      = "${var.app_tag}"
      environment  = "${var.environment}"
    
      providers = {
        oci = "oci.home"
      }
    }
    app_tagenvironment 变量采用命名方案。不需要使用命名方案 , 但是最佳做法。