Artículo
· 27 ago, 2024 Lectura de 4 min

Acceso a Azure Blob Storage

Acceder a un almacenamiento en la nube de Azure para cargar/descargar blobs es bastante fácil usando los métodos API designados de la clase %Net.Cloud.Storage.Client, o usando los adaptadores de entrada/salida EnsLib.CloudStorage.*

Tened en cuenta que necesitaréis tener el Servidor de Lenguaje Externo %JavaServer en funcionamiento para usar tanto la API de almacenamiento en la nube como los adaptadores, ya que ambos usan el marco PEX usando el Servidor Java.

He aquí un breve resumen:

El acceso a Azure Blob Storage se realiza mediante una cadena de conexión similar a esta:

DefaultEndpointsProtocol=https;AccountName=abcdefscleanisr;AccountKey=n3mWskdjgfhklsghdfjaskhgkjdfizqMWJ5X2L4JpqeEJk/FuEnw0rPI6E/rULPn0V5BWgFw+AStRJZlYQ==;EndpointSuffix=core.windows.net

Divididlo en líneas con «;» como delimitador y guardadlo como archivo de texto:

DefaultEndpointsProtocol=https;
AccountName=abcdefscleanisr;
AccountKey=n3mWskdjgfhklsghdfjaskhgkjdfizqMWJ5X2L4JpqeEJk/FuEnw0rPI6E/rULPn0V5BWgFw+AStRJZlYQ==;
EndpointSuffix=core.windows.net

Para este ejemplo llamaré a este archivo «MyAzureStorage.txt».

Ahora vamos a activar la API:

set file="C:\Storage\MyAzureStorage.txt"
set endpoint="abcdefscleanisr.privatelink.blob.core.windows.net"
set tStatus=""

En el método API CreateClient, el segundo parámetro es el proveedor de la nube:

  • 0 - Amazon S3
  • 1 - Azure Blob
  • 2 - Google Cloud Storage
SET myClient = ##CLASS(%Net.Cloud.Storage.Client).CreateClient(,1,file,0,.tStatus,endpoint)

Una vez establecido el cliente (tStatus=1), podéis ejecutar cualquiera de los métodos del cliente:

 

En Azure Blob Storage, un Bucket es un Contenedor.

Así, por ejemplo, para obtener la lista de contenedores de Azure, ejecutad el método ListBuckets:

set list=myClient.ListBuckets()

for i=1:1:list.Count() {write list.GetAt(i).name,!}

clean
dirty

Una vez que tengáis un nombre de contenedor (tomemos como ejemplo el contenedor "clean"), podéis obtener la lista de blobs que contiene:

set list=myClient.ListBlobs("clean")

for i=1:1:list.Count() {write list.GetAt(i).name,!}

4caa6f29-e9e6-4cde-9112-65ec28d4eded.jpeg
2374233-e9e6-4cde-9112-65ec28d4eded.jpeg
3klfd3lld-e9e6-4cde-9112-65ec28d4eded.jpeg
4caa6f29-e9e6-87ry-9112-65ec28d4eded.jpeg

El adaptador de salida CloudStorage tiene menos opciones - sus métodos incluyen sólo los siguientes:

  • UploadBlobFromString(bucketName,blobName,content)
  • UploadBlobFromStream(bucketName,blobName,content)
  • UploadBlobFromFile(bucketName,blobName,filePath)
  • DeleteBlob(bucketName,blobName)

Estos son los parámetros para configurar una operación de negocio utilizando el EnsLib.CloudStorage.OutboundAdapter con Azure Blob Storage. El parámetro Storage Region no es relevante para Azure Blob Storage.

Todos los demás parámetros son relevantes igual que cuando usábamos el método CreateClient:

El parámetro ContainerName no es parte de los parámetros del adaptador - no es necesario para crear el cliente (el método CreateClient no lo utiliza).

Sin embargo, todos los demás métodos del adaptador enumerados anteriormente sí necesitan especificar a qué cubo/contenedor debe cargarse el blob, por lo que tiene sentido añadirlo como parámetro como parte de la configuración:

Class Sasa.BO.Storage Extends Ens.BusinessOperation
{ 
Parameter ADAPTER = "EnsLib.CloudStorage.OutboundAdapter"; 
Property Adapter As EnsLib.CloudStorage.OutboundAdapter; 
Parameter INVOCATION = "Queue"; 
/// Bucket name(Amazon) = Container name(Azure)
Property ContainerName As %String(MAXLEN = 1000); 
Parameter SETTINGS = "ContainerName:Cloud Storage"; 
Method CreateFile(pRequest As Cloud.RES.REST, Output pResponse As Cloud.RES.REST) As %Status
{
    #dim tException As %Exception.SystemException
    Set tStatus = $$$OK
    set pResponse=##class(Cloud.RES.REST).%New() 
    Try {
        Set tStatus = ..Adapter.DeleteBlob(..ContainerName, pRequest.FileName)
        Set tStatus = ..Adapter.UploadBlobFromStream(..ContainerName, pRequest.FileName, pRequest.FileData)   
        if $$$ISERR(tStatus) {
            set pResponse.Success = 0
            set pResponse.ErrorMessage = $system.Status.GetErrorText(tStatus)
        }
    } 
    Catch tException {
        Set tStatus = tException.AsStatus()
        set pResponse.Success=0
        set pResponse.ErrorMessage=$system.Status.GetErrorText(tStatus)
    }
    Quit $$$OK
}

Espero que os ayude a empezar a utilizar el adaptador de nube con Azure.

Comentarios (0)1
Inicie sesión o regístrese para continuar