Copier un blob depuis une URL d’objet source avec Go
Cet article explique comment copier un blob d’une URL d’objet source à l’aide de la Bibliothèque de module Stockage Azure pour Go. Vous pouvez copier un objet blob à partir d’une source du même compte de stockage, d’une source dans un autre compte de stockage ou de tout objet accessible récupéré via une requête HTTP GET sur une URL donnée.
Les méthodes de bibliothèque de client décrites dans cet article utilisent les opérations d’API REST Placer un blob à partir d’une URL et Placer un bloc à partir d’une URL. Ces méthodes sont recommandées pour les scénarios de copie dans lesquels vous souhaitez déplacer des données dans un compte de stockage et avoir une URL pour l’objet source. Pour les opérations de copie dans lesquelles vous souhaitez une planification asynchrone, consultez Copier un objet blob avec planification asynchrone à l’aide de Go.
Prérequis
- Abonnement Azure : créez-en un gratuitement
- Compte de stockage Azure : créez un compte de stockage
- Go 1.18+
Paramétrer votre environnement
Si vous n’avez aucun projet existant, cette section montre comment configurer un projet pour qu’il fonctionne avec le module client du Stockage Blob Azure pour Go. Les étapes incluent l’installation du module, l’ajout de chemins d’accès import
et la création d’un objet client autorisé. Pour plus d’informations, consultez Prise en main de Stockage Blob Azure et de Go.
Installer des modules
Installez le module azblob à l’aide de la commande suivante :
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Pour vous authentifier auprès de Microsoft Entra ID (recommandé), installez le module azidentity
à l’aide de la commande suivante :
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Ajouter des chemins d’importation
Dans votre fichier de code, ajoutez les chemins d’importation suivants :
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
Ces chemins d’importation représentent le minimum nécessaire pour démarrer. Certains exemples de code de cet article peuvent nécessiter des chemins d’importation supplémentaires. Pour plus d’informations et des exemples d’utilisation spécifiques, consultez Exemples de code.
Créer un objet client
Pour connecter une application à Stockage Blob, créez un objet client à l’aide de azblob.NewClient. L’exemple suivant montre comment créer un objet client à l’aide de DefaultAzureCredential
pour l’autorisation :
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
}
Autorisation
Le mécanisme d’autorisation doit disposer des autorisations nécessaires pour effectuer une opération de copie. Pour l’autorisation avec Microsoft Entra ID (recommandé), vous devez disposer au minimum du rôle RBAC Azure intégré Contributeur aux données Blob du stockage. Pour en savoir plus, consultez les conseils d’autorisation pour les opérations Put Blob From URL et Put Block From URL.
À propos de la copie de blob à partir d’une URL d’objet source
L’opération Put Blob From URL
crée un objet blob de blocs où le contenu du blob est lu à partir d’une URL donnée. L’opération se termine de manière synchrone.
La source peut être n’importe quel objet récupérable via une requête HTTP GET standard sur l’URL donnée. Cela inclut les objets blob de blocs, les objets blob d’ajout, les objets blob de pages, les instantanés d’objets blob, les versions d’objets blob ou tout objet accessible à l’intérieur ou à l’extérieur d’Azure.
Lorsque l’objet source est un objet blob de blocs, tout le contenu de l’objet blob validé est copié. Le contenu de l’objet blob de destination est identique au contenu de la source, mais la liste de blocs validés n’est pas conservée et les blocs non validés ne sont pas copiés.
La destination est toujours un objet blob de blocs, existant ou nouveau créé par l’opération. Le contenu d’un blob existant est remplacé par le contenu du nouveau blob.
L’opération Put Blob From URL
copie toujours l’intégralité du blob source. La copie d’une plage d’octets ou d’un ensemble de blocs n’est pas prise en charge. Pour effectuer des mises à jour partielles du contenu d’un objet blob de blocs à l’aide d’une URL source, utilisez l’API Placer un bloc à partir d’une URL avec Put Block List
.
Pour en savoir plus sur l’opération Put Blob From URL
, y compris les limitations de taille d’objet blob et les considérations relatives à la facturation, consultez Remarques sur la mise en place d’un objet blob à partir d’une URL.
Copier un blob à partir d’une URL d’objet source
Cette section donne une vue d’ensemble des méthodes fournies par la bibliothèque de client Stockage Azure pour Go afin d’effectuer une opération de copie à partir d’une URL d’objet source.
La méthode suivante encapsule l’opération d’API REST Put Blob From URL et crée un objet blob de blocs où le contenu de l’objet blob est lu à partir d’une URL donnée :
Cette méthode est préférable pour les scénarios dans lesquels vous souhaitez déplacer des données vers un compte de stockage et disposer d'une URL pour l'objet source.
Pour les objets volumineux, vous pouvez choisir d’utiliser des blocs individuels. La méthode suivante encapsule l’opération d’API REST Put Block From URL. Cette méthode crée un bloc à commiter dans le cadre d’un objet blob où le contenu est lu à partir d’une URL source :
Copier un objet blob à partir d’une source dans Azure
Si vous copiez un objet blob depuis une source dans Azure, l’accès à l’objet blob source peut être autorisé au travers de Microsoft Entra ID (recommandé), une signature d’accès partagé (SAS) ou une clé de compte.
L’exemple de code suivant illustre un scénario de copie d’un objet blob source dans Azure. Dans cet exemple, nous définissons également le niveau d’accès pour l’objet blob de destination sur Cool
en utilisant le struct 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(), ©Options)
handleError(err)
}
L’exemple suivant montre un exemple d’utilisation :
// 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)
Copier un blob à partir d’une source en dehors d’Azure
Vous pouvez effectuer une opération de copie sur n’importe quel objet source qui peut être récupéré via une requête HTTP GET sur une URL donnée, y compris les objets accessibles extérieurs à Azure. L’exemple de code suivant illustre un scénario de copie d’un objet blob depuis une URL d’objet source accessible.
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, ©Options)
handleError(err)
}
L’exemple suivant montre un exemple d’utilisation :
externalURL := "<source-url>"
destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")
copyFromExternalSource(externalURL, destBlob)
Ressources
Pour en savoir plus sur la copie d’objets blob à l’aide de la bibliothèque de client Stockage Blob Azure pour Go, consultez les ressources suivantes.
Exemples de code
- Afficher des exemples de code de cet article (GitHub)
Opérations de l'API REST
Le kit de développement logiciel (SDK) Azure pour Go contient des bibliothèques qui s’appuient sur l’API REST Azure et vous permettant d’interagir avec des opérations de l’API REST par le biais de paradigmes Go familiers. Les méthodes de bibliothèque de client décrites dans cet article utilisent les opérations d’API REST suivantes :
- Put Blob From URL (API REST)
- Placer un bloc à partir d’une URL (API REST)
Ressources du module client
- Documentation de référence sur les modules clients
- Code source du module client
- Package (pkg.go.dev)
Contenu connexe
- Cet article fait partie du guide du développeur Stockage Blob pour Go. Pour en savoir plus, consultez la liste complète des articles du guide du développeur dans Générer votre application Go.