Observação:

Importar Recursos do Oracle Cloud Infrastructure para um Arquivo de Estado do Terraform

Introdução

Há muitos benefícios de usar o Terraform para gerenciar seus Recursos do OCI (Oracle Cloud Infrastructure). Uma delas é que ela traz consistência e reprodutibilidade para suas implantações de infraestrutura. Outra é que as configurações do Terraform podem ser modularizadas e reutilizadas em todos os projetos, facilitando o gerenciamento e a escala das configurações de infraestrutura. Da mesma forma, com o Terraform, o provisionamento e o gerenciamento da infraestrutura podem ser automatizados, levando a implantações consistentes e repetíveis. Outro aspecto importante é que o Terraform mantém um arquivo de estado que rastreia o estado atual da sua infraestrutura. Esse arquivo de estado é usado para planejar e aplicar alterações, permitindo que o Terraform determine quais alterações precisam ser feitas para atingir o estado desejado.

No entanto, há situações em que nem todos os recursos do OCI (Oracle Cloud Infrastructure) são gerenciados pelo Terraform. Isso geralmente ocorre quando você provisiona recursos usando o Terraform, que então estão presentes no arquivo de estado, enquanto outros recursos são criados manualmente por outra pessoa. Posteriormente, você poderá descobrir que precisa desses recursos criados manualmente para serem gerenciados pelo Terraform.

Considere o seguinte:

Se quiser gerenciar a computação recém-adicionada usando o arquivo de configuração e estado do Terraform que você já tem, poderá usar o comando de importação do Terraform, mas há mais etapas a serem seguidas e você deverá atualizar o arquivo de configuração do Terraform.

O Terraform v1.5.0 e posterior suporta blocos de importação. Com essa abordagem, seu código Terraform existente permanece inalterado. Talvez você queira optar por integrá-lo ao seu arquivo de configuração existente do Terraform, mas isso não é necessário. O objetivo é importar recursos do OCI para um arquivo de estado do Terraform que não seja gerenciado pelo Terraform.

Um aspecto importante é que o bloco de importação funciona com pipelines CI/CD. Além disso, permite visualizar uma operação de importação antes de modificar o estado. No final, tudo depende de você e da complexidade do caso de uso.

Objetivos

Pré-requisitos

Tarefa 1: Verificar Infraestrutura Existente Criada com o Terraform

  1. Execute o comando terraform state list para verificar os recursos do OCI gerenciados pelo arquivo de configuração do Terraform.

    terraform state list
    module.network.data.oci_core_services.all_oci_services
    module.network.oci_core_internet_gateway.igw["igw"]
    module.network.oci_core_nat_gateway.ngw["ngw"]
    module.network.oci_core_route_table.route_table["rt_priv"]
    module.network.oci_core_route_table.route_table["rt_pub"]
    module.network.oci_core_security_list.sl["sl_priv"]
    module.network.oci_core_security_list.sl["sl_public"]
    module.network.oci_core_service_gateway.this["sgw"]
    module.network.oci_core_subnet.subnets["sn1_priv"]
    module.network.oci_core_subnet.subnets["sn1_pub"]
    module.network.oci_core_subnet.subnets["sn2_priv"]
    module.network.oci_core_subnet.subnets["sn3_priv"]
    module.network.oci_core_virtual_network.vcn["vcn1"]
    

    Como você pode ver, temos VCN, sub-redes, listas de segurança e tabelas de roteamento.

  2. Aqui estão meus arquivos de configuração do Terraform.

    ~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -l
    total 120
    -rwxr-xr-x@ 1 fvass  staff    849 Jul 10  2023 main.tf
    drwxr-xr-x@ 3 fvass  staff     96 May 25  2023 modules
    -rwxr-xr-x@ 1 fvass  staff    387 May 25  2023 output.tf
    -rw-r--r--  1 fvass  staff    379 Apr  3 09:18 provider.auto.tfvars
    -rw-r--r--  1 fvass  staff  29040 Apr  3 11:00 terraform.tfstate
    -rw-r--r--  1 fvass  staff    182 Apr  3 11:00 terraform.tfstate.backup
    -rwxr-xr-x@ 1 fvass  staff   6007 Apr  3 10:59 terraform.tfvars
    -rwxr-xr-x@ 1 fvass  staff   2869 May 25  2023 variables.tf
    

Tarefa 2: Criar uma VM do OCI Compute usando a Console do OCI

Crie uma VM do OCI Compute na mesma região em que outros recursos do OCI são criados na Tarefa 1. Para este tutorial, estamos criando-o em uma das sub-redes que existem na Tarefa 1 (não é necessário estar em uma dessas sub-redes). Depois de criá-lo, obtenha o OCID (Oracle Cloud Identifier) de computação, conforme necessário em outras tarefas.

Observação: No momento, essa VM não é gerenciada pelo Terraform.

Tarefa 3: Criar o Arquivo import_block.tf

Crie um arquivo chamado import_block.tf (você pode dar outro nome a ele) na mesma pasta em que o código do Terraform está localizado.

Importaremos um recurso de computação usando o tipo oci_core_instance. O nome do recurso será demo_inst_1. Quando executarmos o comando terraform plan, o Terraform lerá esse arquivo e reconhecerá que ele precisa importar um novo recurso para o arquivo de estado existente.

Tarefa 4: Executar o Comando terraform plan

Execute o seguinte comando. Esse argumento generate-config-out gerará um arquivo com a configuração do Terraform para a computação criada na Tarefa 2.

terraform plan --generate-config-out=compute.tf

A saída deve ser semelhante a:

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
╷
│ Warning: Config generation is experimental
│
│ Generating configuration during import is currently experimental, and the generated configuration format may change in future versions.
╵

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform has generated configuration and written it to compute.tf. Please review the configuration and edit it as necessary before adding it to version control.

Agora, temos um arquivo compute.tf.

~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -ltr
total 144
-rwxr-xr-x@ 1 fvass  staff    387 May 25  2023 output.tf
drwxr-xr-x@ 3 fvass  staff     96 May 25  2023 modules
-rwxr-xr-x@ 1 fvass  staff   2869 May 25  2023 variables.tf
-rw-r--r--  1 fvass  staff    379 Apr  3 09:18 provider.auto.tfvars
-rwxr-xr-x@ 1 fvass  staff   6007 Apr  3 10:59 terraform.tfvars
-rw-r--r--  1 fvass  staff    182 Apr  3 11:00 terraform.tfstate.backup
-rw-r--r--  1 fvass  staff  29040 Apr  3 11:00 terraform.tfstate
-rwxr-xr-x@ 1 fvass  staff    855 Apr  3 11:12 main.tf
-rw-r--r--  1 fvass  staff    142 Apr  3 11:12 import_block.tf
-rw-r--r--  1 fvass  staff   4421 Apr  3 11:17 compute.tf

Tarefa 5: Executar o Comando terraform apply

Execute o comando a seguir para adicionar computação ao seu arquivo de estado do Terraform.

terraform apply

A saída deve ser semelhante a:

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Agora, aplique a configuração.

Tarefa 6: Verificar o Arquivo de Estado

Execute o comando terraform state list e veja se o oci_core_instance.demo_inst_1 está presente.

~/workORCL/_MY_OCI_INFRA/oci-vcn> terraform state list
oci_core_instance.demo_inst_1
module.network.data.oci_core_services.all_oci_services
module.network.oci_core_internet_gateway.igw["igw"]
module.network.oci_core_nat_gateway.ngw["ngw"]
module.network.oci_core_route_table.route_table["rt_priv"]
module.network.oci_core_route_table.route_table["rt_pub"]
module.network.oci_core_security_list.sl["sl_priv"]
module.network.oci_core_security_list.sl["sl_public"]
module.network.oci_core_service_gateway.this["sgw"]
module.network.oci_core_subnet.subnets["sn1_priv"]
module.network.oci_core_subnet.subnets["sn1_pub"]
module.network.oci_core_subnet.subnets["sn2_priv"]
module.network.oci_core_subnet.subnets["sn3_priv"]
module.network.oci_core_virtual_network.vcn["vcn1"]

Tarefa 7: Remover o Arquivo import_block.tf

Neste ponto, podemos remover o arquivo import_block.tf com segurança. Ele será ignorado pelo Terraform de qualquer maneira.

Tarefa 8: Testar no Compute

Você pode alterar a forma de sua computação. Em compute.tf, altere memory_in_gbs de shape_config e execute terraform plan para ver a alteração.

A saída deve ser semelhante a:

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # oci_core_instance.demo_inst_1 will be updated in-place
  ~ resource "oci_core_instance" "demo_inst_1" {
        id                  = "ocid1.instance.oc1.iad.anuwcljswe.........."
        # (20 unchanged attributes hidden)

      ~ shape_config {
          ~ memory_in_gbs                 = 16 -> 32
            # (8 unchanged attributes hidden)
        }

        # (7 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

Confirmação

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.