> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Arquivos de zona

> Importar um arquivo mestre do BIND e exportar um antes de uma alteração em massa.

<a id="importing-a-zone-file" />

## Importar um arquivo de zona

`POST /v1/zones/{zone_id}/import` pega um arquivo mestre RFC 1035 — o formato BIND que todos os provedores exportam.

<Tip>
  Se você estiver movendo um domínio ativo e seu provedor não tiver exportação, você pode não precisar de um arquivo: `import_existing_records` no momento da criação lê os registros diretamente deles. Consulte [Mover um domínio ativo](/pt/dns/ownership#moving-a-live-domain).
</Tip>

<Tabs>
  <Tab title="Console">
    Abra a zona de **DNS** e escolha **Import zone file**. Cole o arquivo na caixa, ou carregue um do disco com **Choose a file**, depois escolha **Import**.

    A caixa de diálogo então relata quantos conjuntos de registros foram adicionados e quantos foram substituídos, e lista qualquer coisa que foi ignorada com o motivo.
  </Tab>

  <Tab title="API">
    Envie-o como JSON em `zone_file`, ou como o corpo bruto em qualquer outro tipo de conteúdo, então isso funciona diretamente:

    ```bash theme={null}
    curl --data-binary @db.example.com \
      -H 'Content-Type: text/plain' \
      https://dns.basaltic.sh/v1/zones/{zone_id}/import
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic dns zone import <zone-id> --zone-file "$(cat db.example.com)"
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    body, err := os.ReadFile("db.example.com")
    if err != nil {
        log.Fatal(err)
    }

    result, err := dns.New(cfg).ImportZoneFile(ctx, zoneID, &dns.ZoneImportRequest{
        ZoneFile: string(body),
    })
    ```
  </Tab>
</Tabs>

<AccordionGroup>
  <Accordion title="Ela se funde, ela nunca substitui" icon="git-merge">
    Um RRset no arquivo substitui o RRset com o mesmo nome e tipo por completo; um RRset que o arquivo não menciona é deixado exatamente como está.

    Então, uma importação **não pode excluir um registro**, e importar o mesmo arquivo duas vezes é um não-operação ao invés de um erro — que é o que torna seguro tentar novamente.
  </Accordion>

  <Accordion title="É tudo ou nada" icon="shield">
    Todo o arquivo é validado antes de um único registro ser gravado: cada registro enfrenta o mesmo tipo, nome, TTL e verificações de rdata que a criação de um, a mesma regra CNAME e a mesma cota de registro. Um registro ruim recusa o arquivo e a zona fica intocada.
  </Accordion>

  <Accordion title="Alguns registros são ignorados por design" icon="filter">
    O conjunto SOA e apex NS são da plataforma — a zona é servida por nossos servidores de nomes, e o apex NS é o que o pai delega. Os registros DNSSEC (`RRSIG`, `DNSKEY`, `DS`, `NSEC`, `NSEC3`, `NSEC3PARAM`, `CDS`, `CDNSKEY`) são gerados pelo nosso signatário a partir de chaves que o seu arquivo não pode conhecer. Os registros colocados fora da zona também são ignorados.

    Cada um volta em `skipped` com uma razão. Um arquivo exportado de uma zona assinada carrega todos eles, então recusar o arquivo sobre eles tornaria a exportação/importação inutilizável.
  </Accordion>
</AccordionGroup>

O arquivo tem um limite de **1 MiB**. Em caso de sucesso, o serial SOA avança uma vez para toda a importação.

<a id="exporting-a-zone-file" />

## Exportar um arquivo de zona

`GET /v1/zones/{zone_id}/export` retorna a zona como um arquivo mestre RFC 1035 — o mesmo formato que `/import` toma.

<Tabs>
  <Tab title="Console">
    Abra a zona de **DNS** e escolha **Export zone file**. Ele é baixado como `db.<zone name>`.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    curl -H "$AUTH" https://dns.basaltic.sh/v1/zones/$ZONE_ID/export \
      -o db.example.com
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic dns zone export <zone-id> > db.example.com
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    r, err := dns.New(cfg).ExportZoneFile(ctx, zoneID)
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    f, err := os.Create("db.example.com")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()
    _, err = io.Copy(f, r)
    ```

    Os fluxos de exportação, então copie-o em vez de ler tudo na memória.
  </Tab>
</Tabs>

<Tip>
  **Faça uma antes de uma alteração em massa.** A importação mescla e nunca exclui, portanto, sem um arquivo capturado anteriormente, não há como voltar ao estado anterior.
</Tip>

<Warning>
  **O arquivo não pode descrever toda a zona**, e diz isso em seu próprio cabeçalho. Um arquivo de zona carrega registros e nada mais, então estes não estão nele:

  * Associações de VPC de zona privada

  A reimportação restaura os registros. Qualquer coisa acima tem que ser configurada novamente.
</Warning>

Os registros DNSSEC são omitidos — eles assinam chaves mantidas por esta plataforma e não significam nada em nenhum outro lugar; uma zona importada em outro lugar é assinada por quem a serve. O SOA e o NS de vértice são incluídos, como em qualquer arquivo de zona, e um importador os substitui por seus próprios.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.