Configurar o Ambiente de Execução de Terraform

O ambiente de execução Terraform inclui o layout das pastas e os arquivos de configuração Terraform necessários para criar a topologia de rede de várias camadas.

Sobre o Ambiente de Execução Terraform

O layout do ambiente de execução Terraform é projetado para crescimento modularidade e futuro.

Os diretórios e arquivos que contêm sua configuração Terraform constituem o ambiente de execução. Cada subdiretório representa um módulo Terraform. Juntos, os subdiretórios formam uma biblioteca reutilizável de recursos.

A estrutura de diretório a seguir representa o ambiente de execução que você criou nesta solução.

A seguir, descrição de local_directory_structure.png
Descrição da ilustração local_directory_structure.png

Toda a configuração está dentro de um diretório-raiz que tem um nome de sua escolha. Esse diretório deve estar vazio quando você começar.

Após a criação da configuração, o diretório-raiz contém os seguintes diretórios e arquivos:

  • O diretório compartments contém os parâmetros de configuração para os compartimentos.
  • O diretório iam contém os parâmetros de configuração para as políticas e os grupos.
  • O diretório vcn contém os parâmetros de configuração para a rede virtual na nuvem e os gateways.
  • Os seguintes arquivos estão no diretório-raiz:
    • datasources.tf determina o número de domínios de disponibilidade na região e obtém seus nomes.
    • provider.tf define os parâmetros dos provedores Terraform a serem usados.
    • root.tf define os módulos que o Terraform deve executar.
    • terraform.tvars define os valores das variáveis que você passa para o Terraform.
    • variables.tf declara as variáveis que os módulos na configuração usam.

Criar o Módulo-Raiz

No módulo-raiz, defina os parâmetros necessários para o Terraform estabelecer conexão com o Oracle Cloud Infrastructure . Você também define os dados e as variáveis que os módulos na configuração usam.

  1. No computador em que você instalou o Terraform, crie um diretório chamado de diretório-raiz no restante desta solução.
  2. Crie os seguintes subdiretórios no diretório-raiz:
    • compartments
    • iam
    • vcn
  3. Crie um arquivo de texto chamado variables.tf no diretório-raiz e cole o código a seguir no arquivo.
    Esse código declara as variáveis que os módulos na configuração Terraform usam. Na próxima etapa, você especifica os valores dessas variáveis.
    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. Crie um arquivo de texto chamado terraform.tfvars no diretório-raiz e cole o código a seguir no arquivo.
    Neste código, você define os valores das variáveis que foram declaradas na etapa anterior.
    # 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. Atualize os valores das variáveis em terraform.tfvars conforme descrito na tabela a seguir:
    Variável Descrição
    tenancy_ocid O ID do Oracle Cloud (OCID) da locação.

    Para localizar o OCID da sua locação, selecione Administração no menu serviços e, em seguida, clique em Detalhes da Tenancy.

    user_ocid O ID do Oracle Cloud (OCID) do usuário que você deseja que o Terraform use para autenticar o Oracle Cloud Infrastructure .

    Para localizar o OCID do usuário, selecione Identidade no menu de serviços e, em seguida, selecione Usuários . Encontre o nome do usuário na lista e copie o valor de OCID.

    impressão digital A impressão digital da chave de assinatura da API cujo upload foi feito.
    private_key_path O caminho para o arquivo que contém sua chave privada.
    private_key_password A frase-senha da chave privada. Se a chave não tiver uma senha, deixe esta variável vazia.
    home_region A região inicial da locação. Compartimentos, políticas e grupos são criados na região home.

    Para obter a região inicial, selecione Administração no menu de serviços, clique em Detalhes da Tenancy e copie o valor no campo Região Inicial .

    região A região onde você deseja criar a rede, o computação e outros recursos. Esta região pode ser a região inicial ou qualquer outra região do Oracle Cloud Infrastructure .
    app_tag Um prefixo a ser usado nos nomes de seus recursos, para indicar a aplicação à qual cada recurso se destina. Uma prática recomendada é usar todos os caracteres minúsculos.
    ambiente Um prefixo a ser usado nos nomes de seus recursos, para indicar o ambiente para o qual cada recurso é para: desenvolvimento, teste, preparação ou produção. Uma prática recomendada é usar todos os caracteres minúsculos.
    vcn_cidr O intervalo de endereços da VCN, no formato CIDR. Planeje este intervalo cuidadosamente. Não é possível alterá-lo posteriormente.
  6. Crie um arquivo de texto chamado datasources.tf no diretório-raiz e cole o código a seguir no arquivo.
    O código em datasources.tf determina o número de domínios de disponibilidade na região e seus nomes. Esse código usa a região que você especifica na variável 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. Crie um arquivo de texto chamado provider.tf no diretório-raiz e cole o código a seguir no arquivo.
    O código em provider.tf define os parâmetros para o provedor que o Terraform deve usar. Um provedor converte os comandos Terraform em chamadas de API específicas de um provedor de serviços em nuvem.
    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}"
    }
    Este exemplo define dois provedores. Ambos os provedores são para o Oracle Cloud Infrastructure . O primeiro provedor é para a região inicial, na qual você cria os recursos do Oracle Cloud Infrastructure Identity and Access Management . O segundo provedor é para a região na qual você deseja criar a rede, o computação e outros recursos.
  8. Crie um arquivo de texto chamado root.tf no diretório-raiz e cole o código a seguir no arquivo.
    Este código especifica os módulos que o Terraform deve executar. O provedor é especificado explicitamente para os módulos compartments e iam, porque os compartimentos, grupos e políticas devem ser criados na região home.
    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"
      }
    }
    As variáveis app_tag e environment impõem um esquema de nomeação. O uso de um esquema de nomeação não é necessário, mas é uma prática recomendada.