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

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

Os métodos de biblioteca de cliente abordados neste artigo usam as operações Put Blob From URL e Put Block From URL REST API. Esses métodos são preferidos para cenários de cópia em que você deseja mover dados para uma conta de armazenamento e ter uma URL para o objeto de origem. Para operações de cópia em que você deseja agendamento assíncrono, consulte Copiar um blob com agendamento assíncrono usando Go.

Pré-requisitos

Configurar o ambiente

Se você não tiver um projeto existente, esta seção mostra como configurar um projeto para trabalhar com o módulo de cliente de Armazenamento de Blob do Azure para Go. As etapas incluem a instalação do módulo, a adição de import caminhos e a criação de um objeto de 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 azidentity módulo usando o seguinte comando:

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 exemplos de uso, consulte Exemplos de código.

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blob, 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 do RBAC do Azure RBAC Storage Blob Data Contributor ou superior. Para saber mais, consulte as diretrizes de autorização para Colocar Blob de URL ou Colocar Bloquear de URL.

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

A Put Blob From URL operação cria um novo blob de bloco onde o conteúdo do blob é lido de uma determinada URL. A operação é concluída de forma síncrona.

A fonte pode ser qualquer objeto recuperável através de uma solicitação HTTP GET padrão na URL fornecida. Isso inclui blobs de bloco, blobs de acréscimo, blobs de página, 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 bloco, todo o conteúdo de 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 destino é sempre um blob de bloco, um blob de bloco existente ou um novo blob de bloco criado pela operação. O conteúdo de um blob existente é substituído pelo conteúdo do novo blob.

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

Para saber mais sobre a operação, incluindo limitações de tamanho de Put Blob From URL blob e considerações de cobrança, consulte Colocar Blob a partir de observações de URL.

Copiar um blob de uma URL de objeto de origem

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

O método a seguir encapsula a operação Put Blob From URL REST API e cria um novo blob de bloco onde o conteúdo do blob é lido de uma determinada URL:

Esse método é preferido para cenários em que você deseja mover dados para uma conta de armazenamento e ter uma URL para o objeto de origem.

Para objetos grandes, você pode optar por trabalhar com blocos individuais. O método a seguir encapsula a operação Put Block From URL REST API. Esse método cria um novo bloco a ser confirmado como parte de um blob onde o conteúdo é lido de uma URL de origem:

Copiar um blob de uma fonte no Azure

Se estiver a copiar um blob de uma origem no Azure, o acesso ao blob de origem pode ser autorizado através do Microsoft Entra ID (recomendado), de uma assinatura de acesso partilhado (SAS) ou de uma chave de conta.

O exemplo de código a seguir mostra um cenário para copiar um blob de origem no Azure. Neste exemplo, também definimos a camada de acesso para o blob de destino para Cool usar 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 fonte 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 uma determinada URL, 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 cliente do Armazenamento de Blobs do Azure para Go, consulte os recursos a seguir.

Amostras de código

  • Exibir exemplos de código deste artigo (GitHub)

Operações da API REST

O SDK do Azure para Go contém bibliotecas que se baseiam na API REST do Azure, permitindo que você interaja com operações da API REST por meio de paradigmas Go familiares. Os métodos de biblioteca de cliente abordados neste artigo usam as seguintes operações de API REST:

Recursos do módulo cliente

  • Este artigo faz parte do guia do desenvolvedor do Blob Storage para Go. Para saber mais, consulte a lista completa de artigos do guia do desenvolvedor em Crie seu aplicativo Go.