One place for hosting & domains

      Importar

      Cómo importar y exportar una base de datos de MongoDB en Ubuntu 20.04


      El autor seleccionó COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      MongoDB es uno de los motores de base de datos más populares de NoSQL. Es famoso por ser escalable, potente, confiable y fácil de usar. En este artículo, le mostraremos cómo importar y exportar sus bases de datos de MongoDB.

      Debemos aclarar que importar y exportar se refiere a aquellas operaciones que manejan los datos en un formato legible por el ser humano, compatible con otros productos de software. Por el contrario, las operaciones de copia de seguridad y restauración crean o utilizan datos binarios específicos de MongoDB, que preservan la uniformidad y la integridad de sus datos, y también sus atributos específicos de MongoDB. Por lo tanto, para migrar, generalmente es preferible usar la copia de seguridad y la restauración siempre que los sistemas de origen y destino sean compatibles.

      Las tareas de copia de seguridad, restauración y migración están fuera del alcance de este artículo. Para obtener más información, consulte Cómo respaldar, restaurar y migrar una base de datos de MongoDB en Ubuntu 20.04.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Paso 1: Importar la información a MongoDB

      Para aprender cómo funciona la importación de información a MongoDB vamos a utilizar una base de datos popular de MongoDB de muestra sobre restaurantes. Está en formato .json y se puede descargar con wget de esta manera:

      • wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

      Una vez completada la descarga, debería tener un archivo llamado primer-dataset.json (12 MB de tamaño) en el directorio actual. Importaremos los datos de este archivo a una nueva base de datos llamada newdb y a una colección llamada restaurants.

      Utilice el comando mongoimport de esta manera:

      • sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

      El resultado tendrá el siguiente aspecto:

      Output

      2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/ 2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import

      Como muestra el comando anterior, se han importado 25359 documentos. Dado que no teníamos una base de datos llamada newdb, MongoDB la creó de forma automática.

      Vamos a verificar la importación.

      Conéctese a la base de datos newdb recientemente creada:

      Ahora está conectado a la instancia de la base de datos newdb. Observe que la línea de comandos ha cambiado, indicando que está conectado a la base de datos.

      Cuente los documentos de la colección de restaurantes con el comando:

      El resultado mostrará 25359, que es el número de documentos importados. Para obtener una comprobación aún mejor, puede seleccionar el primer documento de la colección de restaurantes de esta manera:

      El resultado tendrá el siguiente aspecto:

      [secondary label Output]
      {
          "_id" : ObjectId("5fac3d937f12c471b3f26733"),
          "address" : {
              "building" : "1007",
              "coord" : [
                  -73.856077,
                  40.848447
              ],
              "street" : "Morris Park Ave",
              "zipcode" : "10462"
          },
          "borough" : "Bronx",
          "cuisine" : "Bakery",
          "grades" : [
              {
                  "date" : ISODate("2014-03-03T00:00:00Z"),
                  "grade" : "A",
                  "score" : 2
              },
      ...
          ],
          "name" : "Morris Park Bake Shop",
          "restaurant_id" : "30075445"
      }
      

      Una comprobación tan detallada podría revelar problemas con los documentos, tales como el contenido, la codificación, etc. El formato json utiliza la codificación UTF-8 sus exportaciones e importaciones deberían estar en dicha codificación. Tenga esto en cuenta si edita los archivos json de forma manual. De lo contrario, MongoDB se encargará de ello automáticamente.

      Para salir de la línea de comandos de MongoDB, escriba exit en la línea de comandos:

      Volverá a la línea de comandos normal como usuario no root.

      Paso 2: Exportar información desde MongoDB

      Como mencionamos antes, cuando exporta la información de MongoDB, puede obtener un archivo de texto legible por el ser humano con sus datos. De manera predeterminada, la información se exportará en formato json, pero también puede exportar a csv (valor separado por comas).

      Para exportar información desde MongoDB, utilice el comando mongoexport. Le permite exportar de forma muy detallada, de modo que puede especificar una base de datos, una colección, un campo e incluso utilizar una consulta para la exportación.

      Un ejemplo simple de mongoexport sería exportar la colección de restaurantes desde la base de datos newdb que hemos importado anteriormente. Puede hacerse de esta manera:

      • sudo mongoexport --db newdb -c restaurants --out newdbexport.json

      En el comando anterior, se utilizó --db para especificar la base de datos, -c para la colección y --out, para el archivo en el que se guardarán los datos.

      El resultado de una exitosa exportación de mongoexport debe tener el siguiente aspecto:

      Output

      2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/ 2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%) 2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%) 2020-11-11T19:39:58.871+0000 exported 25359 records

      El resultado anterior muestra que se han importado 25359 documentos, el mismo número que de los documentos importados.

      En algunos casos, es posible que necesite exportar solo una parte de su colección. Teniendo en cuenta la estructura y el contenido del archivo json de los restaurantes, vamos a exportar todos los restaurantes que cumplen los criterios de estar situados en el barrio del Bronx y de tener cocina china. Si queremos obtener esta información directamente mientras estamos conectados a MongoDB, vuelva a conectarse a la base de datos:

      Luego, utilice esta consulta:

      • db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

      Los resultados se muestran en el terminal:

      Output

      • 2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
      • 2020-12-03T01:35:25.410+0000 exported 323 records

      Para salir de la línea de comandos de MongoDB, escriba exit:

      Si desea exportar los datos de una línea de comandos sudo en lugar de mientras está conectado a la base de datos, haga que la consulta anterior forme parte del comando mongoexport especificándolo para el argumento -q de esta manera:

      • sudo mongoexport --db newdb -c restaurants -q "{"borough": "Bronx", "cuisine": "Chinese"}" --out Bronx_Chinese_retaurants.json

      Tenga en cuenta que estamos evitando las comillas dobles con una barra oblicua inversa () en la consulta. De manera similar, tiene que evitar cualquier otro carácter especial en la consulta.

      Si la exportación se realizó de forma correcta, el resultado debería tener el siguiente aspecto:

      Output

      2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/ 2020-11-11T19:49:21.765+0000 exported 323 records

      Lo anterior muestra que se han exportado 323 registros y puede encontrarlos en el archivo Bronx_Chinese_retaurants.json que especificamos.

      Utilice cat y less para escanear los datos:

      • cat Bronx_Chinese_retaurants.json | less

      Utilice SPACE para navegar por los datos:

      Output

      • date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
      • . . .

      Presione q para salir. Ahora puede importar y exportar una base de datos de MongoDB.

      Conclusión

      Este artículo le ha presentado los aspectos esenciales de importación y exportación de información desde y hacia una base de datos de MongoDB. Puede continuar leyendo sobre Cómo hacer una copia de seguridad, restaurar y migrar una base de datos de MongoDB en Ubuntu 20.04.

      También puede considerar usar la replicación. La replicación le permite continuar ejecutando su servicio de MongoDB sin interrupción desde un servidor de MongoDB esclavo mientras restaura el maestro tras un fallo. Parte de la replicación es el registro de operaciones (oplog), que registra todas las operaciones que modifican sus datos. Puede usar este registro, igual que usaría el registro binario en MySQL, para restaurar sus datos después de haber realizado la última copia de seguridad. Recuerde que las copias de seguridad suelen realizarse durante la noche, y si decide restaurar una copia de seguridad en la noche, se perderá todas las actualizaciones desde la última copia de seguridad.



      Source link

      Como importar e exportar um banco de dados MongoDB no Ubuntu 20.04


      O autor selecionou a COVID-19 Relief Fund​​​​​ para receber uma doação como parte do programa Write for DOnations.

      Introdução

      O MongoDB é um dos mecanismos de banco de dados NoSQL mais populares. Ele é famoso por ser escalável, poderoso, confiável e fácil de usar. Neste artigo, vamos mostrar como importar e exportar seus bancos de dados MongoDB.

      Devemos deixar claro que ao dizer importação e exportação, estamos nos referindo àquelas operações que lidam com dados em um formato legível para humanos e compatível com outros produtos de software. Em contrapartida, as operações de backup e restauração criam ou usam dados binários específicos do MongoDB, que preservam a consistência e integridade dos seus dados, além de seus atributos específicos do MongoDB. Assim, para a migração, geralmente é preferível usar o backup e restauração, desde que os sistemas de origem e de destino sejam compatíveis.

      As tarefas de backup, reinicialização e migração estão além do escopo deste artigo. Para obter mais informações, consulte Como fazer backup, restaurar e migrar um banco de dados MongoDB no Ubuntu 20.04.

      Pré-requisitos

      Para concluir este tutorial, você precisará do seguinte:

      Passo 1 — Importando informações para o MongoDB

      Para aprender como funciona a importação de informações para o MongoDB, vamos usar como exemplo um banco de dados MongoDB popular sobre restaurantes. Ele está no formato .json e pode ser baixado usando o wget desta forma:

      • wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

      Assim que o download terminar, você terá um arquivo chamado primer-dataset.json (com tamanho de 12 MB) no diretório atual. Vamos importar os dados desse arquivo para um novo banco de dados chamado newdb e para uma coleção chamada restaurants.

      Use o comando mongoimport desta forma:

      • sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

      O resultado ficará parecido com este:

      Output

      2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/ 2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import

      Como o comando acima mostra, 25359 documentos foram importados. Como não tínhamos um banco de dados chamado newdb, o MongoDB o criou automaticamente.

      Vamos verificar a importação.

      Conecte-se ao banco de dados newdb recém-criado:

      Agora, você está conectado à instância de banco de dados newdb. Note que seu prompt mudou, indicando que você está conectado ao banco de dados.

      Conte os documentos na coleção de restaurantes com o comando:

      O resultado mostrará 25359, que é o número de documentos importados. Para uma verificação ainda melhor, selecione o primeiro documento da coleção de restaurantes desta forma:

      O resultado ficará parecido com este:

      [secondary label Output]
      {
          "_id" : ObjectId("5fac3d937f12c471b3f26733"),
          "address" : {
              "building" : "1007",
              "coord" : [
                  -73.856077,
                  40.848447
              ],
              "street" : "Morris Park Ave",
              "zipcode" : "10462"
          },
          "borough" : "Bronx",
          "cuisine" : "Bakery",
          "grades" : [
              {
                  "date" : ISODate("2014-03-03T00:00:00Z"),
                  "grade" : "A",
                  "score" : 2
              },
      ...
          ],
          "name" : "Morris Park Bake Shop",
          "restaurant_id" : "30075445"
      }
      

      Uma verificação detalhada como essa poderia revelar problemas com os documentos, como seu conteúdo, codificação, etc. O formato json usa a codificação UTF-8 e suas exportações e importações devem estar naquela codificação. Tenha isso em mente se for editar manualmente algum arquivo json. Caso contrário, o MongoDB manuseará ele automaticamente para você.

      Para sair do prompt do MongoDB, digite exit no prompt:

      Você será enviado de volta ao prompt de linha de comando normal como seu usuário não raiz.

      Passo 2 — Exportando informações do MongoDB

      Como mencionado anteriormente, ao exportar informações do MongoDB, é possível adquirir um arquivo de texto legível para humanos com seus dados. Por padrão, as informações são exportadas no formato json, mas também é possível exportar para csv (valores separados por vírgula).

      Para exportar informações do MongoDB, use o comando mongoexport. Ele permite fazer uma exportação bastante refinada, sendo possível especificar um banco de dados, uma coleção, um campo e até mesmo usar uma consulta para a exportação.

      Um exemplo de mongoexport simples seria exportar a coleção de restaurantes do banco de dados newdb que importamos anteriormente. Isso pode ser feito desta forma:

      • sudo mongoexport --db newdb -c restaurants --out newdbexport.json

      No comando acima, usamos o --db para especificar o banco de dados, -c para a coleção e --out para o arquivo no qual os dados serão salvos.

      O resultado de um mongoexport executado com sucesso deve ser parecido com este:

      Output

      2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/ 2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%) 2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%) 2020-11-11T19:39:58.871+0000 exported 25359 records

      O resultado acima mostra que 25359 documentos foram importados — o mesmo número dos importados.

      Em alguns casos, pode ser necessário exportar apenas uma parte da sua coleção. Considerando a estrutura e o conteúdo do arquivo json de restaurantes, vamos exportar todos os restaurantes que satisfaçam os critérios de estar localizado no bairro do Bronx e ser de cozinha chinesa. Se quisermos obter essas informações diretamente enquanto conectados ao MongoDB, conecte-se novamente ao banco de dados:

      Então, use esta consulta:

      • db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

      Os resultados são exibidos no terminal:

      Output

      • 2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
      • 2020-12-03T01:35:25.410+0000 exported 323 records

      Para sair do prompt do MongoDB, digite exit:

      Se quiser exportar os dados de uma linha de comando sudo sem estar conectado ao banco de dados, incorpore a consulta anterior no comando mongoexport especificando-a no argumento -q desta forma:

      • sudo mongoexport --db newdb -c restaurants -q "{"borough": "Bronx", "cuisine": "Chinese"}" --out Bronx_Chinese_retaurants.json

      Note que estamos adicionando o caractere de escape de barra invertida () nas aspas duplas da consulta. De maneira similar, é necessário adicionar o caractere de escape a qualquer outro caractere especial na consulta.

      Se a exportação tiver sido bem-sucedida, o resultado se parecerá com este:

      Output

      2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/ 2020-11-11T19:49:21.765+0000 exported 323 records

      O exemplo acima mostra que 323 registros foram exportados, e é possível encontrá-los no arquivo Bronx_Chinese_retaurants.json que especificamos.

      Use o cat e less para analisar os dados:

      • cat Bronx_Chinese_retaurants.json | less

      Use o SPACE para paginar os dados:

      Output

      • date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
      • . . .

      Pressione q para sair. Agora, é possível importar e exportar um banco de dados MongoDB.

      Conclusão

      Este artigo introduziu as informações essenciais sobre a importação e exportação de e para um banco de dados MongoDB. Continue a leitura com Como fazer backup, restaurar e migrar um banco de dados MongoDB no Ubuntu 20.04.

      Considere também o uso da replicação. A replicação permite continuar executando seu serviço MongoDB ininterruptamente a partir de um servidor MongoDB subordinado enquanto estiver restaurando o mestre depois de uma falha. Parte da replicação é o registro de operações (oplog), que registra todas as operações que modificam seus dados. É possível usar esse registro, assim como usaria o registro binário no MySQL, para restaurar seus dados depois que o último backup tiver sido realizado. Lembre-se que os backups geralmente são realizados durante a noite, e se quiser restaurar um backup durante a tarde, você estará perdendo todas as atualizações desde o último backup.



      Source link

      Como importar ativos existentes da DigitalOcean para o Terraform


      O autor selecionou o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.

      Introdução

      O Terraform é uma infraestrutura como ferramenta de código criada pela HashiCorp que ajuda os desenvolvedores a implantar, atualizar e remover diferentes ativos de sua infraestrutura de maneira eficiente e mais escalonável.

      Os desenvolvedores podem usar o Terraform para organizar diferentes ambientes, rastrear alterações através do controle de versão e automatizar trabalhos repetitivos para limitar o erro humano. Ele também fornece uma maneira das equipes colaborarem na melhoria da sua infraestrutura através de configurações compartilhadas.

      Neste tutorial, você importará a infraestrutura existente da DigitalOcean para o Terraform. Até o final deste tutorial, você será capaz de usar o Terraform para toda a sua infraestrutura existente, além de criar ativos.

      Pré-requisitos

      Passo 1 — Instalando o Terraform localmente

      Neste primeiro passo, você irá instalar o Terraform em sua máquina local. Esse passo detalha a instalação do binário do Linux. Caso esteja usando o Windows ou o Mac, verifique a página de download do Terraform no site do Terraform.

      Vá até a pasta de sua máquina local na qual deseja baixar o Terraform e, em seguida, utilize a ferramenta wget para baixar o binário 0.12.12 do Terraform:

      • cd /tmp
      • wget https://releases.hashicorp.com/terraform/0.12.12/terraform_0.12.12_linux_amd64.zip

      Para verificar se a soma de verificação de sha256 apresenta o mesmo valor fornecido no site do Terraform, você baixará o arquivo de soma de verificação com o seguinte comando:

      • wget -q https://releases.hashicorp.com/terraform/0.12.12/terraform_0.12.12_SHA256SUMS

      Em seguida, execute o comando a seguir para verificar as somas de verificação:

      • sha256sum -c --ignore-missing terraform_0.12.12_SHA256SUMS

      O arquivo SHA256SUMS que você baixou lista os nomes dos arquivos e seus hashes. Esse comando irá procurar pelo mesmo arquivo terraform_0.12.12_SHA256SUMS localmente e, então, verificar se as hashes correspondem usando o sinalizador -x. Como esse arquivo tem mais de um nome de arquivo e tem sua plataforma listada, use o sinalizador --ignore-missing para evitar erros no seu resultado, já que não tem uma cópia dos outros arquivos.

      Você verá um resultado como o seguinte:

      Output

      terraform_0.12.12_linux_amd64.zip: OK

      Use unzip para extrair o binário:

      • sudo unzip terraform_0.12.12_linux_amd64.zip -d /usr/local/bin/

      Agora, verifique se o Terraform foi instalado corretamente, verificando a versão:

      Você verá um resultado parecido com este:

      Output

      Terraform v0.12.12

      Você instalou o Terraform na sua máquina local e agora irá preparar os arquivos de configuração.

      Passo 2 — Preparando os arquivos de configuração do Terraform

      Neste passo, você importará ativos existentes para o Terraform, criando um diretório de projeto e gravando os arquivos de configuração. Como o Terraform não oferece suporte à geração de configurações do comando import neste momento, você precisa criar essas configurações manualmente.

      Execute o comando a seguir para criar seu diretório de projeto:

      • mkdir -p do_terraform_import

      Em seguida, vá até esse diretório com:

      Neste passo, você criará três arquivos adicionas que terão as configurações necessárias. Sua estrutura de diretório para esse projeto ficará parecida com a seguinte:

      ├── digitalocean_droplet.tf
      ├── digitalocean_firewall.tf
      └── provider.tf
      

      Para começar, você criará o arquivo provider.tf para definir seu token de acesso à DigitalOcean como uma variável de ambiente, em vez de embuti-lo em sua configuração.

      Aviso: seu token de acesso dá acesso irrestrito à sua infraestrutura completa, então trate-o como tal. Certifique-se de que você é a única pessoa que tem acesso à máquina onde o token está armazenado.

      Além do seu token de acesso, você também irá especificar qual provedor quer usar. Neste tutorial, será digitalocean. Para uma lista completa das fontes de dados e recursos disponíveis para a DigitalOcean com o Terraform, acesse a Página de provedores no seu site.

      Crie e edite o provider.tf com o seguinte comando:

      Adicione o seguinte conteúdo ao arquivo provider.tf:

      provider.tf

      variable "do_token" {}
      
      provider "digitalocean" {
          token   = "${var.do_token}"
          version = "1.9.1"
          }
      

      Neste arquivo, adicione seu token de acesso da DigitalOcean como uma variável, que o Terraform usará como identificação para a API da DigitalOcean. Especifique também a versão do plug-in do provedor DigitalOcean. O Terraform recomenda que você especifique qual versão do provedor está usando, de modo que as atualizações futuras não tenham a possibilidade de inutilizar sua configuração atual.

      Agora, você criará o arquivo digitalocean_droplet.tf. Aqui, você irá especificar o recurso que será usado; neste caso: droplet.

      Crie o arquivo com o seguinte comando:

      • nano digitalocean_droplet.tf

      Adicione a seguinte configuração:

      digitalocean_droplet.tf

      resource "digitalocean_droplet" "do_droplet" {
          name   = "testing-terraform"
          region = "fra1"
          tags   = ["terraform-testing"]
          count  = "1"
      }
      

      Aqui, você especifica quatro parâmetros:

      • name: o nome do Droplet.

      • region: a região onde o Droplet está localizado.

      • tags: uma lista de rótulos que são aplicados a esse Droplet.

      • count: o número de recursos necessários para essa configuração.

      Em seguida, você criará um arquivo de configuração para seu firewall. Crie o arquivo digitalocean_firewall.tf com o seguinte comando:

      • nano digitalocean_firewall.tf

      Adicione o conteúdo a seguir ao arquivo:

      digitalocean_firewall.tf

      resource "digitalocean_firewall" "do_firewall" {
        name  = "testing-terraform-firewall"
        tags  = ["terraform-testing"]
        count = "1"
      }
      

      Aqui, você especifica o nome do firewall que deseja importar e os rótulos dos Droplets aos quais as regras do firewall se aplicam. Por fim, o valor count de 1 define o número necessário do recurso específico.

      Nota: você também pode incluir recursos de firewall no arquivo digitalocean_droplet.tf. No entanto, caso tenha vários ambientes onde vários Droplets compartilhem o mesmo firewall, é boa ideia separá-lo caso você quiser remover somente um único Droplet. Depois de fazer isso, o firewall não será afetado.

      Agora, é hora de inicializar essas alterações, de modo que o Terraform possa baixar as dependências necessárias. Para tanto, você usará o comando terraform init, o qual permitirá que você inicialize um diretório de trabalho que contém os arquivos de configuração do Terraform.

      Execute este comando do seu diretório de projeto:

      Você verá o seguinte resultado:

      Output

      Terraform has been successfully initialized!

      O Terraform preparou o diretório de trabalho com sucesso, baixando plug-ins, procurando módulos e assim por diante. Em seguida, você começará a importar seus ativos para o Terraform.

      Passo 3 — Importando seus ativos para o Terraform

      Neste passo, você importará seus ativos da DigitalOcean para o Terraform. Você usará o doctl para encontrar os números de ID dos seus Droplets, antes de importar seus ativos. Então, você irá verificar a configuração da importação com os comandos terraform show e terraform plan.

      Para começar, você irá exportar seu token de acesso da DigitalOcean como uma variável de ambiente, a qual você irá, na sequência, injetar no Terraform durante o tempo de execução.

      Exporte-o como uma variável de ambiente para sua sessão atual do shell com o seguinte comando:

      • export DO_TOKEN="YOUR_TOKEN"

      Para importar seu Droplet e firewall existentes, precisará de seus números de ID. Você pode usar o doctl, a interface de linha de comando da API da DigitalOcean. Execute o comando a seguir para listar seus Droplets e acessar seus IDs:

      • doctl compute droplet list

      Você verá um resultado parecido com este:

      Output

      ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags Features Volumes DROPLET-ID DROPLET-NAME DROPLET-IPv4 1024 1 25 fra1 Ubuntu 18.04.3 (LTS) x64 active DROPLET-ID DROPLET-NAME DROPLET-IPv4 2048 1 50 fra1 Ubuntu 18.04.3 (LTS) x64 active DROPLET-ID DROPLET-NAME DROPLET-IPv4 1024 1 25 fra1 Ubuntu 18.04.3 (LTS) x64

      Agora, você importará seu Droplet e firewall existentes para o Terraform:

      • terraform import -var "do_token=${DO_TOKEN}" digitalocean_droplet.do_droplet DROPLET_ID

      Use o sinalizador -var para especificar o valor do seu token de acesso à DigitalOcean – que você exportou anteriormente para sua sessão do shell. Isso é necessário para que a API da DigitalOcean possa verificar quem é você e aplicar alterações na sua infraestrutura.

      Agora, execute o mesmo comando para o seu firewall:

      • terraform import -var "do_token=${DO_TOKEN}" digitalocean_firewall.do_firewall FIREWALL_ID

      Você irá verificar se a importação foi bem-sucedida, usando o comando terraform show. Esse comando possibilita que o resultado do estado de sua infraestrutura fique legível para humanos. Ele pode ser usado para inspecionar um plano, no intuito de garantir que as alterações desejadas serão executadas, ou inspecionar o estado atual – da maneira como o Terraform o vê.

      Nesse contexto, state se refere ao mapeamento de seus ativos da DigitalOcean para a configuração do Terraform que você gravou e ao rastreamento dos metadados. Isso permite que você confirme se não há diferenças entre os ativos existentes da DigitalOcean que você deseja importar e os ativos que o Terraform está controlando:

      Você verá um resultado parecido com este:

      Output

      . . . # digitalocean_droplet.do_droplet: resource "digitalocean_droplet" "do_droplet" { backups = false created_at = "2020-02-03T16:12:02Z" disk = 25 id = "DROPLET-ID" image = "DROPLET-IMAGE" ipv4_address = "DROPLET-IP" ipv6 = false locked = false memory = 1024 monitoring = false name = "testing-terraform-0" price_hourly = 0.00744 price_monthly = 5 private_networking = false region = "fra1" resize_disk = true size = "s-1vcpu-1gb" status = "active" tags = [ "terraform-testing", ] urn = "DROPLET-URN" vcpus = 1 volume_ids = [] . . . }

      Você verá dois recursos no resultado, junto com seus atributos.

      Após importar seu Droplet e firewall para o estado do Terraform, certifique-se de que as configurações representam o estado atual dos ativos importados. Para fazer isso, você irá especificar a image (imagem) do Droplet e seu size (tamanho). Esses dois valores podem ser encontrados no resultado do terraform show em relação ao recurso digitalocean_droplet.do_droplet.

      Abra o arquivo digitalocean_droplet.tf:

      • nano digitalocean_droplet.tf

      Neste tutorial:

      • A imagem do sistema operacional usada para nosso Droplet existente é ubuntu-16-04-x64.
      • A região onde o Droplet está localizado é fra1.
      • O rótulo do Droplet para seu Droplet existente é terraform-testing.

      O Droplet que você importou usando a configuração no digitalocean_droplet.tf ficará parecido com o seguinte:

      digitalocean_droplet.tf

      resource "digitalocean_droplet" "do_droplet" {
          image   = "ubuntu-16-04-x64"
          name    = "testing-terraform"
          region  = "fra1"
          size    = "s-1vcpu-1gb"
          tags    = ["terraform-testing"]
      }
      

      Em seguida, você adicionará as regras do firewall. No nosso exemplo, as portas abertas para o tráfego de entrada são: 22, 80 e 443. Todas as portas estão abertas para o tráfego de saída. Você pode ajustar essa configuração de acordo com suas portas abertas.

      Abra o digitalocean_firewall.tf:

      • nano digitalocean_firewall.tf

      Adicione a seguinte configuração:

      digitalocean_firewall.tf

      resource "digitalocean_firewall" "do_firewall" {
        name  = "testing-terraform-firewall"
        tags  = ["terraform-testing"]
        count = "1"
      
        inbound_rule {
            protocol                = "tcp"
            port_range              = "22"
            source_addresses        = ["0.0.0.0/0", "::/0"]
          }
        inbound_rule {
            protocol                = "tcp"
            port_range              = "80"
            source_addresses        = ["0.0.0.0/0", "::/0"]
          }
        inbound_rule {
            protocol                = "tcp"
            port_range              = "443"
            source_addresses        = ["0.0.0.0/0", "::/0"]
          }
      
        outbound_rule {
            protocol                = "tcp"
            port_range              = "all"
            destination_addresses   = ["0.0.0.0/0", "::/0"]
          }
        outbound_rule {
            protocol                = "udp"
            port_range              = "all"
            destination_addresses   = ["0.0.0.0/0", "::/0"]
          }
        outbound_rule {
            protocol                = "icmp"
            destination_addresses   = ["0.0.0.0/0", "::/0"]
          }
      }
      

      Essas regras replicam o estado do firewall exemplo existente. Se quiser limitar o tráfego a diferentes endereços IP, portas diferentes ou protocolos diferentes, você pode ajustar o arquivo para replicar seu firewall existente.

      Após atualizar seus arquivos do Terraform, você usará o comando plan para ver se as alterações que você fez replicam o estado dos ativos existentes na DigitalOcean.

      O comando terraform plan é usado como uma simulação. Com esse comando, você pode verificar se as alterações que o Terraform irá fazer são as alterações que deseja fazer. É uma boa ideia executar sempre esse comando para confirmação, antes de aplicar alterações.

      Execute o terraform plan com o seguinte:

      • terraform plan -var "do_token=$DO_TOKEN"

      Você verá um resultado parecido com o seguinte:

      Output

      No changes. Infrastructure is up-to-date.

      Você importou os ativos existentes da DigitalOcean com sucesso no Terraform. Agora, você pode fazer alterações na sua infraestrutura através do Terraform, sem o risco de excluir ou modificar acidentalmente ativos existentes.

      Passo 4 — Criando ativos via Terraform

      Neste passo, você adicionará dois Droplets adicionais à sua infraestrutura existente. Adicionar ativos dessa maneira à sua infraestrutura existente pode ser útil, por exemplo, se você tiver um site ativo e não quiser fazer quaisquer alterações com possibilidade de interromper as alterações naquele site enquanto você trabalha nele. Em vez disso, você pode adicionar mais um Droplet para usar como um ambiente de desenvolvimento e trabalhar em seu projeto no mesmo ambiente de produção do Droplet, sem qualquer risco em potencial.

      Agora, abra o digitalocean_droplet.tf para adicionar as regras aos seus novos Droplets:

      • nano digitalocean_droplet.tf

      Adicione as seguintes linhas ao seu arquivo:

      digitalocean_droplet.tf

      resource "digitalocean_droplet" "do_droplet" {
          image   = "ubuntu-16-04-x64"
          name    = "testing-terraform"
          region  = "fra1"
          size    = "s-1vcpu-1gb"
          tags    = ["terraform-testing"]
          count   = "1"
      }
      
      resource "digitalocean_droplet" "do_droplet_new" {
          image   = "ubuntu-18-04-x64"
          name    = "testing-terraform-${count.index}"
          region  = "fra1"
          size    = "s-1vcpu-1gb"
          tags    = ["terraform-testing"]
          count   = "2"
      }
      

      Use o meta-argumento count para informar ao Terraform quantos Droplets com as mesmas especificações você deseja. Esses novos Droplets também serão adicionados ao seu firewall existente, à medida que você especificará o mesmo rótulo, de acordo com o seu firewall.

      Aplique essas regras para verificar as alterações que está especificando no digitalocean_droplet.tf:

      • terraform plan -var "do_token=$DO_TOKEN"

      Verifique se as alterações que deseja fazer foram replicadas no resultado desse comando.

      Você verá um resultado parecido com este:

      Output

      . . . # digitalocean_droplet.do_droplet_new[1] will be created + resource "digitalocean_droplet" "do_droplet_new" { + backups = false + created_at = (known after apply) + disk = (known after apply) + id = (known after apply) + image = "ubuntu-18-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + ipv6_address_private = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "testing-terraform-1" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = true + region = "fra1" + resize_disk = true + size = "s-1vcpu-1gb" + status = (known after apply) + tags = [ + "terraform-testing", ] + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) } Plan: 2 to add, 1 to change, 0 to destroy.

      Assim que estiver satisfeito com o resultado, use o comando terraform apply para aplicar as alterações que você especificou ao estado da configuração:

      • terraform apply -var "do_token=$DO_TOKEN"

      Confirme as alterações, digitando yes na linha de comando. Após a execução bem-sucedida, você verá um resultado parecido com o seguinte:

      Output

      . . . digitalocean_droplet.do_droplet_new[1]: Creating... digitalocean_droplet.do_droplet_new[0]: Creating... digitalocean_firewall.do_firewall[0]: Modifying... [id=FIREWALL-ID] digitalocean_firewall.do_firewall[0]: Modifications complete after 1s [id=FIREWALL-ID] digitalocean_droplet.do_droplet_new[0]: Still creating... [10s elapsed] digitalocean_droplet.do_droplet_new[1]: Still creating... [10s elapsed] digitalocean_droplet.do_droplet_new[0]: Creation complete after 16s [id=DROPLET-ID] digitalocean_droplet.do_droplet_new[1]: Still creating... [20s elapsed] digitalocean_droplet.do_droplet_new[1]: Creation complete after 22s [id=DROPLET-ID] Apply complete! Resources: 2 added, 1 changed, 0 destroyed.

      Você verá dois novos Droplets no seu painel Web da DigitalOcean: New Droplets

      Você também os verá anexados ao seu firewall existente: Existing Firewall

      Você criou ativos com o Terraform usando seus ativos existentes. Para aprender como destruir esses ativos, você pode, de maneira opcional, completar o próximo passo.

      Passo 5 — Destruindo ativos importados e criados (Opcional)

      Neste passo, você irá destruir os ativos que você importou e criou, ajustando a configuração.

      Comece abrindo o digitalocean_droplet.tf:

      • nano digitalocean_droplet.tf

      No arquivo, defina count como 0, de acordo com o seguinte:

      digitalocean_droplet.tf

      resource "digitalocean_droplet" "do_droplet" {
          image   = "ubuntu-16-04-x64"
          name    = "testing-terraform"
          region  = "fra1"
          size    = "s-1vcpu-1gb"
          tags    = ["terraform-testing"]
          count   = "0"
      }
      
      resource "digitalocean_droplet" "do_droplet_new" {
          image   = "ubuntu-18-04-x64"
          name    = "testing-terraform-${count.index}"
          region  = "fra1"
          size    = "s-1vcpu-1gb"
          tags    = ["terraform-testing"]
          count   = "0"
      }
      

      Salve e saia do arquivo.

      Abra seu arquivo de configuração do firewall para alterar o count também:

      • nano digitalocean_firewall.tf

      Defina o count como 0, assim como na linha destacada a seguir:

      digitalocean_firewall.tf

      resource "digitalocean_firewall" "do_firewall" {
        name  = "testing-terraform-firewall"
        tags  = ["terraform-testing"]
        count = "0"
      
        inbound_rule {
            protocol                = "tcp"
            port_range              = "22"
            source_addresses        = ["0.0.0.0/0", "::/0"]
          }
        inbound_rule {
            protocol                = "tcp"
            port_range              = "80"
            source_addresses        = ["0.0.0.0/0", "::/0"]
          }
        inbound_rule {
            protocol                = "tcp"
            port_range              = "443"
            source_addresses        = ["0.0.0.0/0", "::/0"]
          }
      
        outbound_rule {
            protocol                = "tcp"
            port_range              = "all"
            destination_addresses   = ["0.0.0.0/0", "::/0"]
          }
        outbound_rule {
            protocol                = "udp"
            port_range              = "all"
            destination_addresses   = ["0.0.0.0/0", "::/0"]
          }
        outbound_rule {
            protocol                = "icmp"
            destination_addresses   = ["0.0.0.0/0", "::/0"]
          }
      }
      

      Salve e saia do arquivo.

      Agora, aplique essas alterações com o seguinte comando:

      • terraform apply -var "do_token=${DO_TOKEN}"

      O Terraform irá pedir a você para confirmar se deseja destruir os Droplets e o firewall. Isso irá destruir todos os ativos que você importou e criou através do Terraform. Assim, certifique-se de verificar se deseja prosseguir, antes de digitar yes.

      Você verá um resultado parecido com este:

      Output

      . . . digitalocean_droplet.do_droplet[0]: Destroying... [id=YOUR-DROPLET-ID]] digitalocean_droplet.do_droplet_new[0]: Destroying... [id=YOUR-DROPLET-ID] digitalocean_droplet.do_droplet_new[1]: Destroying... [id=YOUR-DROPLET-ID] digitalocean_firewall.do_firewall[0]: Destroying... [id=YOUR-FIREWALL-ID] digitalocean_firewall.do_firewall[0]: Destruction complete after 1s digitalocean_droplet.do_droplet_new[1]: Still destroying... [id=YOUR-DROPLET-ID, 10s elapsed] digitalocean_droplet.do_droplet[0]: Still destroying... [id=YOUR-DROPLET-ID, 10s elapsed] digitalocean_droplet.do_droplet_new[0]: Still destroying... [id=YOUR-DROPLET-ID, 10s elapsed] digitalocean_droplet.do_droplet_new[1]: Still destroying... [id=YOUR-DROPLET-ID, 20s elapsed] digitalocean_droplet.do_droplet_new[0]: Still destroying... [id=YOUR-DROPLET-ID, 20s elapsed] digitalocean_droplet.do_droplet[0]: Still destroying... [id=YOUR-DROPLET-ID, 20s elapsed] digitalocean_droplet.do_droplet_new[1]: Destruction complete after 22s digitalocean_droplet.do_droplet[0]: Destruction complete after 22s digitalocean_droplet.do_droplet_new[0]: Destruction complete after 22s Apply complete! Resources: 0 added, 0 changed, 4 destroyed.

      Você excluiu todos os ativos gerenciados pelo Terraform. Esse é um fluxo de trabalho útil se você não for mais precisar de um ativo ou se estiver fazendo uma redução.

      Conclusão

      Neste tutorial, você instalou o Terraform, importou ativos existentes, criou ativos e, de maneira opcional, destruiu esses ativos. Você pode dimensionar esse fluxo de trabalho para um projeto maior, como a implantação de um cluster do Kubernetes pronto para produção. Usando o Terraform, você poderia gerenciar todos os nós, entradas DNS, firewalls, armazenamento e outros ativos, além de usar o controle de versão para rastrear alterações e colaborar com uma equipe.

      Para explorar outras características do Terraform, leia sua documentação. Você também pode ler o conteúdo do Terraform da DigitalOcean para obter mais tutoriais e o arquivo de Perguntas e ReDigitalOcean



      Source link