Compartilhar via


Copiar um blob de uma URL de objeto de origem com o Go

Este artigo mostra como copiar um blob de um URL de objeto de origem usando o módulo cliente do Armazenamento do Azure para Go. Você pode copiar um blob de uma origem dentro da mesma conta de armazenamento, de uma origem em uma conta de armazenamento diferente ou de qualquer objeto acessível recuperado por meio de uma solicitação HTTP GET em um URL específico.

Os métodos da biblioteca de clientes abordados neste artigo usam as operações de API REST Colocar um Blob do URL e Colocar um Bloco do URL. Esses métodos são os preferidos para cenários de cópia sempre que você desejar transferir dados para uma conta de armazenamento e tiver um URL para o objeto de origem. Para operações de cópia sempre que você desejar um agendamento assíncrono, confira Copiar um blob com agendamento assíncrono usando o Go.

Pré-requisitos

Configure seu ambiente

Se você não tiver um projeto existente, esta seção mostrará como configurar um projeto para trabalhar com o módulo de cliente do Armazenamento de Blobs do Azure para Go. As etapas incluem a instalação do módulo, a adição de caminhos import e a criação de um objeto cliente autorizado. Para obter detalhes, consulte Introdução ao Armazenamento de Blobs do Azure e Go.

Instalar módulos

Instale o módulo azblob usando o seguinte comando:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Para autenticar com o Microsoft Entra ID (recomendado), instale o módulo azidentity usando o comando a seguir:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Adicionar caminhos de importação

No arquivo de código, adicione os seguintes caminhos de importação:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

Esses caminhos de importação representam o mínimo necessário para começar. Alguns exemplos de código neste artigo podem exigir caminhos de importação adicionais. Para obter detalhes específicos e uso de exemplo, consulte Exemplos de código.

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blobs, crie um objeto cliente usando azblob.NewClient. O exemplo a seguir mostra como criar um objeto cliente usando DefaultAzureCredential para autorização:

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

Autorização

O mecanismo de autorização deve ter as permissões necessárias para executar uma operação de cópia. Para autorização com o Microsoft Entra ID (recomendado), você precisa da função interna de Colaborador de Dados de Blob de Armazenamento ou superior do RBAC do Azure. Para saber mais, consulte as diretrizes de autorização para Colocar blob do URL ou Colocar bloco do URL.

Sobre a cópia de blobs de um URL de objeto de origem

A operação Put Blob From URL cria um novo blob de blocos em que o conteúdo do blob é lido de um URL específico. A operação é executada de forma síncrona.

A origem pode ser qualquer objeto recuperável por meio de uma solicitação HTTP GET padrão no URL específico. Isso inclui blobs de blocos, blobs de acréscimo, blobs de páginas, instantâneos de blob, versões de blob ou qualquer objeto acessível dentro ou fora do Azure.

Quando o objeto de origem é um blob de blocos, todo o conteúdo do blob confirmado é copiado. O conteúdo do blob de destino é idêntico ao conteúdo da origem, mas a lista de blocos confirmados não é preservada e os blocos não confirmados não são copiados.

O blob de destino é sempre um blob de blocos, podendo ser um blob de blocos existente ou um novo blob de blocos criado pela operação. O conteúdo de um blob existente é substituído pelo conteúdo do novo blob.

A operação Put Blob From URL sempre copia o blob de origem inteiro. Não há suporte para a cópia de um intervalo de bytes ou um conjunto de blocos. Para executar atualizações parciais no conteúdo de um blob de blocos usando um URL de origem, use a API Colocar um Bloco do URL junto com Put Block List.

Para saber mais sobre a operação Put Blob From URL, incluindo limitações de tamanho e considerações de cobrança do blob, confira Comentários sobre Colocar um Blob do URL.

Copiar um blob de um URL de objeto de origem

Esta seção fornece uma visão geral dos métodos fornecidos pela biblioteca de clientes do Armazenamento do Azure para Go para executar uma operação de cópia de um URL de objeto de origem.

Os métodos a seguir encapsulam a operação de API REST Colocar um Blob do URL e criam um novo blob de blocos em que o conteúdo do blob é lido de um URL específico:

Este método é preferível para cenários em que você deseja mover dados para uma conta de armazenamento e tem uma URL para o objeto de origem.

Para objetos grandes, você poderá optar por trabalhar com blocos individuais. Os métodos a seguir encapsulam a operação de API REST Colocar um Bloco da URL. Esses métodos criam um novo bloco a ser confirmado como parte de um blob sempre que o conteúdo for lido de uma URL de origem:

Copiar um blob de uma origem no Azure

Se você estiver copiando um blob de uma origem no Azure, o acesso ao blob de origem poderá ser autorizado através do Microsoft Entra ID (recomendado), de uma assinatura de acesso compartilhado (SAS) ou de uma chave de conta.

O exemplo de código a seguir mostra um cenário para a cópia de um blob de origem no Azure. Neste exemplo, também definimos a camada de acesso do blob de destino paraCool usando a estrutura UploadBlobFromURLOptions.

func copyFromSourceURL(srcBlob *blockblob.Client, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcBlob.URL(), &copyOptions)
    handleError(err)
}

O exemplo a seguir mostra o uso de exemplo:

// TODO: replace <storage-account-name> placeholders with actual storage account names
srcURL := "https://<src-storage-account-name>.blob.core.windows.net/"
destURL := "https://<dest-storage-account-name>.blob.core.windows.net/"

credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)

srcClient, err := azblob.NewClient(srcURL, credential, nil)
handleError(err)
destClient, err := azblob.NewClient(destURL, credential, nil)
handleError(err)

srcBlob := srcClient.ServiceClient().NewContainerClient("source-container").NewBlockBlobClient("source-blob")
destBlob := destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-1")

copyFromSourceURL(srcBlob, destBlob)

Copiar um blob de uma origem fora do Azure

Você pode executar uma operação de cópia em qualquer objeto de origem que possa ser recuperado por meio da solicitação HTTP GET em um URL específico, incluindo objetos acessíveis fora do Azure. O exemplo de código a seguir mostra um cenário para copiar um blob de uma URL de objeto de origem acessível.

func copyFromExternalSource(srcURL string, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcURL, &copyOptions)
    handleError(err)
}

O exemplo a seguir mostra o uso de exemplo:

externalURL := "<source-url>"

destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")

copyFromExternalSource(externalURL, destBlob)

Recursos

Para saber mais sobre como copiar blobs usando a biblioteca de clientes do Armazenamento de Blobs do Azure para Go, consulte os recursos a seguir.

Exemplos de código

Operações da API REST

O SDK do Azure para linguagem Go contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do Go. Os métodos de biblioteca de clientes abordados neste artigo usam as seguintes operações de API REST:

Recursos do módulo cliente

  • Este artigo faz parte do guia para desenvolvedores do Armazenamento de Blobs para Go. Para saber mais, veja a lista completa de artigos do guia do desenvolvedor em Criar seu aplicativo Go.