Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se cadastrar em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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:
-
Crie uma VCN com o Terraform para que você tenha um arquivo de estado e um arquivo de configuração do Terraform que gerencie essa VCN.
-
Adicione manualmente um novo recurso (uma computação) em sua tenancy do OCI.
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
- Crie o recurso manualmente (uma Máquina Virtual do OCI Compute) e importe para um arquivo de estado do Terraform existente para ser gerenciado ainda mais pelo Terraform.
Pré-requisitos
-
Terraform
v1.5.0
e superior. -
Ambiente de infraestrutura criado e gerenciado pelo Terraform. Neste tutorial, temos uma VCN com algumas sub-redes, listas de segurança, tabelas de roteamento etc.
Tarefa 1: Verificar Infraestrutura Existente Criada com o Terraform
-
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.
-
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.
-
import_block.tf
.import { to = oci_core_instance.demo_inst_1 id = "ocid1.instance.oc1.iad.anuwcljswe6j4fqcqxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
- id: OCID da sua computação criada na Tarefa 2.
- para: O endereço da instância que esse recurso terá em seu arquivo de estado.
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.
Links Relacionados
Confirmação
- Autor - Francisc Vass
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.
Import Oracle Cloud Infrastructure Resources into a Terraform State File
F96416-01
April 2024