Criar Scripts e Arquivos de Estado com a Descoberta de Recursos

Gere arquivos do Terraform para recursos existentes em seu compartimento.

Use o recurso de descoberta de recursos do OCI para:

  • Crie arquivos de estado para recursos existentes na Console e adicione esses recursos a uma configuração do Terraform.
  • Duplique sua infraestrutura existente em uma nova tenancy ou região.
  • Detecte desvio de estado para recursos atualizados.

Neste tutorial, você cria scripts e arquivos de estado para recursos em sua conta por meio da funcionalidade de descoberta de recursos. Em seguida, você usa o Terraform para gerenciar os recursos.

As principais tarefas incluem:

  • Crie um recurso por meio da Console.
  • Crie scripts e um arquivo de estado para o recurso por meio da funcionalidade de descoberta de recursos.
  • Atualize o recurso com o Terraform.
  • Confirme se o recurso foi atualizado na Console.
Um diagrama de um usuário conectado de um ambiente local a uma tenancy do Oracle Cloud Infrastructure. O ambiente local é o Linux e tem arquivos binários do Provedor de OCI Terraform instalados. Há uma seta do ambiente local conectado ao Registro do Terraform na nuvem. Há uma segunda seta do ambiente local que envia uma mensagem à tenancy do Oracle Cloud Infrastructure. A seta se chama 'Autenticar?'. A terceira seta é da tenancy para o ambiente local chamado Extrair Dados, Criar Scripts e Criar um Arquivo de Estado. Essas setas sugerem que o usuário configurou as variáveis do provedor do OCI para serem autenticadas por sua tenancy. O usuário pode buscar informações da tenancy e criar scripts e arquivos de estado, usando os comandos do provedor OCI do Terraform e o Registro do Terraform. A tenancy contém um bucket com o nome rd-bucket, em um compartimento chamado rd-compartment. A Descoberta de Recursos está extraindo informações sobre este bucket, para criar scripts do Terraform e um arquivo de estado no ambiente do usuário.

Para obter mais informações, consulte:

Antes de Começar

Para executar este tutorial com sucesso, você precisa ter o seguinte:

Requisitos
  • Uma conta no Oracle Cloud Infrastructure. Consulte Solicitar e Gerenciar Promoções do Oracle Cloud Grátis
  • Um computador com MacOS, Linux ou Windows.
  • Recursos do tutorial Terraform:
    • Execute todas as etapas em Configurar Descoberta de Recursos.
    • Anote o comando do provedor Terraform do OCI:
      • Cloud Shell: terraform-provider-oci_<version> de /usr/bin
      • Instância de computação ou um ambiente local: Use o <shorter-alias> criado no tutorial anterior para usar em vez do comando terraform-provider-oci_<version>.
        • Exemplo: tf-oci
  • Terraform v1.1.3+:
    • Se você estiver usando o Cloud Shell, não precisará instalar o Terraform. O Terraform já está instalado.
    • Se você estiver usando uma instância de computação ou um ambiente local, siga as etapas em Instalar o Terraform.

1. Criar um Recurso

Crie um bucket em sua tenancy por meio da Console. Este bucket não tem um script Terraform. Posteriormente, use a descoberta de recursos para criar um script Terraform e um arquivo de estado para o bucket.

Adicionar Política de Compartimento

Se seu nome de usuário estiver no grupo Administrators, ignore esta seção. Caso contrário, peça ao administrador para adicionar a seguinte política à sua tenancy:

allow group <a-group-your-username-belongs-to> to manage compartments in tenancy

Com esse privilégio, você pode criar um compartimento para todos os recursos do seu tutorial.

Etapas para Adicionar a Política
  1. Acesse a Console do Oracle Cloud.
  2. No menu de navegação , selecione o menu Perfil Ícone do menu Perfil e, em seguida, selecione Definições do usuário ou Meu perfil, dependendo da opção que você vir.
  3. Selecione Grupos ou Meus grupos, dependendo da opção exibida.
  4. Em um bloco de notas, copie o nome de um grupo ao qual seu nome de usuário pertence.
  5. Abra o menu de navegação e selecione Identidade e Segurança. Em Identidade, selecione Políticas.
  6. Selecione o compartimento: <your-tenancy>(root)
  7. Selecione Criar Política.
  8. Na página Criar Política, informe os seguintes valores:
    • Nome: manage-compartments
    • Descrição: Allow the group <a-group-your-username-belongs-to> to list, create, update, delete and recover compartments in the tenancy.
    • Compartimento: <your-tenancy>(root)
  9. Para Criador de Política, selecione Mostrar editor manual.
  10. Cole na seguinte política:
    allow group <a-group-your-username-belongs-to> to manage compartments in tenancy
  11. Selecione Criar.

Referência: Detalhes para Combinações de Verbos + Tipo de Recurso (consulte o tipo de recurso compartments)

Criar um Compartimento

Crie um compartimento para os recursos criados neste tutorial.

  1. Na Console: abra o menu de navegação , selecione Identidade e Segurança. Em Identidade, selecione Compartimentos.
  2. Selecione Criar Compartimento.
  3. Informe os seguintes valores:
    • Nome: <your-compartment-name>
    • Descrição Compartment for <your-description>.
    • Compartimento Principal: <your-tenancy>(root)
  4. Selecione Criar Compartimento.

Referência: Criando um Compartimento

Adicionar Política de Recursos

Se seu nome de usuário estiver no grupo Administrators, ignore esta seção. Caso contrário, peça ao administrador para adicionar a seguinte política à sua tenancy:

allow group <a-group-your-username-belongs-to> to manage all-resources in compartment <your-compartment-name>

Com esse privilégio, você pode gerenciar todos os recursos em seu compartimento, dando a você direitos administrativos nesse compartimento.

Etapas para Adicionar a Política
  1. Na Console: Abra o menu de navegação e selecione Identidade e Segurança. Em Identidade, selecione Políticas.
  2. Selecione seu compartimento.
  3. Selecione Criar Política.
  4. Na página Criar Política, informe os seguintes valores:
    • Nome: manage-<your-compartment-name>-resources
    • Descrição: Allow users to list, create, update, and delete resources in <your-compartment-name>.
    • Compartimento: <your-tenancy>(root)
  5. Para o Criador de Políticas, informe os seguintes valores:
    • Casos de uso da política: Compartment Management
    • Modelos de política comum: Let compartment admins manage the compartment
    • Domínio de identidades: <identity-domain>
    • Grupos <a-group-your-username-belongs-to>
    • Local: <your-compartment-name>
  6. Selecione Criar.

Referência: Políticas Comuns

Criar um Bucket

Crie um bucket no seu compartimento.

  1. Abra o menu de navegação e selecione Armazenamento. Em Object Storage & Archive Storage, selecione Buckets.
  2. Selecione o compartimento: <your-compartment-name>.
  3. Selecione Criar Bucket.
  4. Informe os seguintes valores:
    • Nome do Bucket: <your-bucket-name>
    • Mantenha o restante dos padrões.
  5. Selecione Criar.
Você criou com sucesso um bucket privado.
Observação

Certifique-se de criar seu bucket em <your-compartment-name>.

2. Descobrir o Recurso

Descubra o bucket criado no seu compartimento.

Descobrir o Bucket
  1. No diretório $HOME, exclua e crie novamente o diretório resource-discovery criado para o tutorial Configurar Descoberta de Recurso.
    cd
    rm -R resource-discovery
    mkdir resource-discovery
  2. Execute o seguinte comando:
    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Cloud Shell:
    terraform-provider-oci_<version> -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    • Substitua <your-compartment-name> pelo nome do compartimento.
    Amostra de saída:
    ...
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    Observação

    Você poderá receber a seguinte mensagem:
    <date> ERROR IN GET: Service error: LifecyclePolicy NotFound. The bucket '<your-bucket-name>' does not define a lifecycle policy.. http status code: 404. Opc request id: iad-1:xxx

    A falta de uma política de ciclo de vida está OK para este tutorial. Para planejar o serviço para arquivar ou excluir automaticamente esse bucket, consulte Usando o Gerenciamento de Ciclo de Vida de Objetos.

  3. Revise os scripts Terraform gerados.
    cd resource-discovery
    ls
    • object_storage.tf
    • provider.tf
    • vars.tf
  4. Exiba o script object_storage.tf.
    cat object_storage.tf
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
Você descobriu com sucesso recursos do Object Storage no seu compartimento.
Explicação
  • Vá para Uso (Descoberta de Recursos).

    Duas opções de comando são listadas.

  • Selecione a opção de comando que usa compartment_name como um comando base:
    terraform-provider-oci -command=export -compartment_name=<xxx> -output_path=<xxx>
  • Atualize o comando base:
    • Em vez de terraform-provider-oci, use seu comando de link simbólico:

      tf-oci

    • Revise a seção Descrição do Parâmetro para adicionar valores apropriados aos parâmetros no comando base:
      • Use o comando export para executar a descoberta de recursos:

        -command=export

      • Informe o nome do compartimento cujos recursos você está descobrindo:

        -compartment_name=<your-compartment-name>

      • Crie e depois especifique um diretório para os recursos descobertos:

        Exemplo: -output_path=$HOME/resource-discovery

  • Adicione o seguinte parâmetro da seção Descrição do Parâmetro ao comando base:
    • services
  • Nos nomes de serviço listados para services, use:
    • object_storage
    • Exemplo: -services=object_storage
    • Para descobrir mais de um serviço, separe os nomes de serviço com uma vírgula.
    • Exemplo: -services=object_storage,core
    • Você não precisa de aspas nos nomes de serviço.
  • Construa o comando:

    Por exemplo:

    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Observação

    Diagnóstico e Solução de Problemas
    [ERROR] output_path does not exist: stat /$HOME/resource-discovery: no such file or directory

    O comando de descoberta de recursos não cria um diretório para os recursos descobertos. Crie um diretório e especifique o caminho no seu comando.

    [ERROR] no output directory specified

    O parser é interrompido no parâmetro no qual falta um hífen. Certifique-se de adicionar um traço ao início de cada parâmetro. Por exemplo, se você usar services em vez de -services, o parser não acessará o diretório de saída.

Gerar um Arquivo de Estado
Para rastrear seus recursos, o Terraform armazena o estado dos seus recursos em um arquivo de estado. Em seguida, toda vez que você atualizar um recurso com o Terraform, o Terraform atualizará o arquivo de estado com essa alteração.
  1. Execute o comando de descoberta de recursos com o flag -generate_state:
    • No Cloud Shell:
    • terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    • Em sua instância de computação ou em seu ambiente local:
      tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    Amostra de saída:
    ...
    Terraform has been successfully initialized!
    ...
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    
    Observação

    Diagnóstico e Solução de Problemas:
    • Erro: Falha ao consultar pacotes de provedores disponíveis:
      • Se você estiver em uma VPN, verifique as configurações do proxy.
  2. Exiba o conteúdo do diretório resource-discovery.
    ls

    Amostra de saída:

    • object_storage.tf
    • provider.tf
    • terraform.tfstate
    • vars.tf
    Observação

    O comando de descoberta de recursos substitui os arquivos <resource>.tf sempre que você o executa. Se um serviço não for especificado, ele criará um arquivo <resource>.tf para cada recurso no compartimento especificado.
  3. Exiba o arquivo de estado do Terraform gerado.
    cat terraform.tfstate

    Amostra de saída:

    ...
    "instances": [
      {
          "bucket_id": "ocid1.bucket.xxx",
          "compartment_id": "ocid1.compartment.xxx",
          "created_by": "ocid1.user.xxx",
          "id": "xxx/<your-bucket-name>",
    ...

Parabéns! Você criou um arquivo de estado para seu recurso de bucket.

Referências:

3. Atualizar o Recurso

Atualize o nome do seu bucket no arquivo object_storage.tf e execute os scripts Terraform. Sua conta autentica os scripts e, em seguida, o Terraform atualiza o nome do bucket. Confirme o novo nome do bucket pela Console.

Alterar Nome do Bucket
  1. No seu editor, abra o arquivo object_storage.tf e altere o nome do bucket de <your-bucket-name> para <your-bucket-name>-2.
    Observação

    Você só pode renomear buckets vazios.
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>-2"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
  2. Salve o arquivo object_storage.tf.
Inicializar
Quando você cria um arquivo de estado, a descoberta de recursos inicializa um diretório de trabalho que inclui arquivos de configuração do Terraform. Adquira o hábito de executar esse comando sempre que os scripts do Terraform forem atualizados.
  1. Verifique o conteúdo do diretório resource-discovery.
    ls -a

    Você tem uma pasta chamada .terraform que inclui os plug-ins do provedor oci.

  2. Confirme se você tem o Terraform instalado.
    terraform -v
  3. Execute o comando init:
    terraform init

    Exemplo de saída:

    Initializing the backend...
    
    Initializing provider plugins...
    - Using previously-installed hashicorp/oci vx.x.x
    ...
    Terraform has been successfully initialized!
Plano
Um plano de execução é a lista de alterações que o Terraform planeja aplicar à sua conta.
  1. Crie um plano de execução:
    terraform plan
  2. Revise o plano de execução.

    Com o comando terraform plan, você verifica se as alterações mostradas no plano de execução correspondem às suas expectativas, sem passar para os recursos reais. Exemplo de saída:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
    -/+ destroy and then create replacement
    
    Terraform will perform the following actions:
    
      # oci_objectstorage_bucket.export_<your-bucket-name> must be replaced
    -/+ resource "oci_objectstorage_bucket" "export_<your-bucket-name>" {
    ...
        ~ name = "<your-bucket-name>" -> "<your-bucket-name>-2" # forces replacement
            namespace = "<your-tenancy>"
            ...
    
    Plan: 1 to add, 0 to change, 0 to destroy.
Aplicação

Atualizar o Bucket

  1. Execute seus scripts do Terraform:
    terraform apply
  2. Quando for solicitada a confirmação, informe yes para que o nome do bucket seja substituído.

    Exemplo de saída:

    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Localizar Novo Nome do Bucket na Console

  1. Abra o menu de navegação e selecione Armazenamento. Em Object Storage & Archive Storage, selecione Buckets.
  2. Selecione o compartimento: <your-compartment-name>.
  3. Na lista de buckets, assinale o nome do bucket.

    O nome do bucket agora é <your-bucket-name>-2.