Compartir vía


Copia de un blob desde una dirección URL de objeto de origen con Go

En este artículo se muestra cómo copiar un blob de una dirección URL de objeto de origen mediante el módulo cliente de Azure Storage para Go. Puede copiar un blob desde un origen dentro de la misma cuenta de almacenamiento, desde un origen en una cuenta de almacenamiento diferente o desde cualquier objeto accesible recuperado a través de una solicitud HTTP GET en una dirección URL determinada.

Los métodos de biblioteca cliente descritos en este artículo usan las operaciones de la API de REST Put Blob From URL y Put Block From URL. Estos métodos se prefieren para copiar escenarios en los que desee mover datos a una cuenta de almacenamiento y tener una dirección URL para el objeto de origen. Para las operaciones de copia en las que desee programar de forma asincrónica, consulte Copiar un blob con programación asincrónica mediante Go.

Requisitos previos

Configurar el entorno

Si no tiene un proyecto existente, esta sección muestra cómo configurar un proyecto para trabajar con el módulo cliente Azure Blob Storage para Go. Los pasos incluyen la instalación del módulo, la adición de rutas de acceso de import y la creación de un objeto de cliente autorizado. Para obtener información, consulte Introducción a Azure Blob Storage y Go.

Módulos de instalación

Instale el módulo azblob mediante el siguiente comando:

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

Para autenticarse con Microsoft Entra ID (recomendado), instale el módulo azidentity mediante el siguiente comando:

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

Agregar rutas de importación

En el archivo de código, agregue las rutas de importación siguientes:

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

Estas rutas de importación representan el mínimo necesario para empezar. Algunos ejemplos de código de este artículo pueden requerir rutas de importación adicionales. Para obtener detalles específicos y ejemplos de uso, consulte Ejemplos de código.

Creación de un objeto de cliente

Para conectar una aplicación a Blob Storage, cree un objeto de cliente mediante azblob.NewClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential para la autorización:

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
}

Authorization

El mecanismo de autorización debe tener los permisos necesarios para realizar una operación de copia. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para Poner blob desde una dirección URL o Poner un bloque desde una dirección URL.

Acerca de copiar blobs desde una dirección URL de objeto de origen

La operación Put Blob From URL crea un nuevo blob en bloques donde se lee el contenido del blob desde una dirección URL determinada. La operación se completa sincrónicamente.

El origen puede ser cualquier objeto recuperable a través de una solicitud HTTP GET estándar en la dirección URL especificada. Esto incluye blobs en bloques, blobs anexos, blobs en páginas, instantáneas de blobs, versiones de blobs o cualquier objeto accesible dentro o fuera de Azure.

Cuando el objeto de origen sea un blob en bloques, se copiará todo el contenido del blob confirmado. El contenido del blob de destino es idéntico al contenido del blob de origen, pero la lista de bloques comprometidos no se conserva y los bloques no comprometidos no se copian.

El destino siempre es un blob en bloques, ya sea un blob en bloques existente o un nuevo blob en bloques creado por la operación. El contenido de un blob existente se sobrescribe con el contenido del nuevo blob.

La operación Put Blob From URL siempre copia todo el blob de origen. No se admite la copia de un intervalo de bytes o un conjunto de bloques. Para realizar actualizaciones parciales en el contenido de un blob en bloques mediante una dirección URL de origen, use la API Put Block From URL junto con Put Block List.

Para obtener más información sobre la operación Put Blob From URL, incluyendo las limitaciones de tamaño de blob y las consideraciones de facturación, consulte Comentarios de Put Blob From URL.

Copiar un blob desde una dirección URL de objeto de origen

En esta sección se proporciona información general sobre los métodos proporcionados por la biblioteca cliente de Azure Storage para Go para realizar una operación de copia desde una dirección URL de objeto de origen.

El siguiente método envuelve la operación Put Blob From URL REST API, y crea un nuevo blob de bloque donde el contenido del blob es leído desde una URL determinada:

Este método será preferible para escenarios en los que desee mover datos a una cuenta de almacenamiento y tener una dirección URL para el objeto de origen.

En el caso de objetos grandes, puede optar por trabajar con bloques individuales. el método siguiente encapsula la operación de la API de REST Put Block From URL. Este método crea un nuevo bloque que se confirmará como parte de un blob donde el contenido se leerá desde una dirección URL de origen:

Copiar un blob desde un origen dentro de Azure

Si está copiando un blob desde un origen en Azure, el acceso al blob de origen se puede autorizar a través de Microsoft Entra ID (recomendado), una firma de acceso compartido (SAS) o una clave de cuenta.

En el siguiente ejemplo de código, se muestra un escenario para copiar un blob de origen dentro de Azure. En este ejemplo, también se establece el nivel de acceso del blob de destino en Cool mediante la estructura 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)
}

En el siguiente ejemplo se muestra un ejemplo de uso:

// 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 un blob desde un origen externo a Azure

Puede realizar una operación de copia en cualquier objeto de origen que se pueda recuperar a través de solicitudes HTTP GET en una dirección URL determinada, incluyendo los objetos accesibles de fuera de Azure. En el siguiente ejemplo de código se muestra un escenario para copiar un blob desde una dirección URL de objeto de origen accesible.

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)
}

En el siguiente ejemplo se muestra un ejemplo de uso:

externalURL := "<source-url>"

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

copyFromExternalSource(externalURL, destBlob)

Recursos

Para obtener más información sobre cómo descargar blobs usando la biblioteca cliente de Azure Blob Storage para Go, consulte los recursos siguientes.

Ejemplos de código

Operaciones de API REST

El SDK de Azure para Go contiene bibliotecas que se crean a partir de la API de REST de Azure, lo que le permite interactuar con las operaciones de API de REST a través de paradigmas conocidos de Go. Los métodos de biblioteca cliente descritos en este artículo usan las siguientes operaciones de la API de REST:

Recursos del módulo cliente

  • Este artículo forma parte de la guía para desarrolladores de Blob Storage para Go. Para obtener más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación Go.