Desenvolvimento de aplicações para a Cloud Blob
O serviço Blob } O serviço Blob é desenhado para armazenar um conjunto largo de objectos binários, como documentos, imagens, vídeos e músicas. Esquema URL http://[storageaccount].blob.core. windows.net/[containername]/[blobname] Tamanho Máximo 200GB(block blob)/1tb (page blob) Referência API http://msdn.microsoft.com/ en-us/library/dd135733.aspx 2 Cátia Vaz 2012
Blob Account 3 Cátia Vaz 2011/2012
Arquitectura do Serviço Storage 4 Cátia Vaz 2011/2012
Limitações e restrições do Blob } As limitações de armazenamento do serviço Blob são as seguintes: } O tamanho máximo de cada block blob é 200GB e cada página } blob é 1TB. Para blobs com tamanho menor ou igual 64MB, o upload necessita apenas de uma operação PUT. O upload de blobs maiores terá de ser realizado como um conjunto de blocos, em que cada bloco não pode ser maior do que 4MB. } O serviço Blob de desenvolvimento suporta apenas blobs com um tamanho máximo de 2GB. 5 Cátia Vaz 2011/2012
Arquitectura Blob 6 Cátia Vaz 2011/2012
Contentores Blob } É um agrupamento lógico de um conjunto de Blobs } Podem ser públicos ou privados } Restrições nos nomes dos Blobs: } O nome tem de ser único no contexto da conta } Tem de iniciar com uma letra ou número e apenas letras minúsculas, com dimensão entre 3 e 63. } Não pode conter caracteres especiais excepto (-), o qual tem de ser seguido por um caracter ou número. 7 Cátia Vaz 2011/2012
Tipos de Blobs } Existem 2 tipos de blobs: } page } block Account Container Blob Block pictures IMG01.jpg IMG02.jpg myaccount V1Block1.wmv videos Video1.wmv V1Block2.wmv 8 Cátia Vaz 2011/2012
API REST } A API REST do serviço Blob suporta os serguintes verbos HTTP: } GET, } PUT, } DELETE. } Um request ao serviço inclui: } } verbo HTTP } URI pretendido } Parâmetros de URI } Request headers API REST 9 Cátia Vaz 2011/2012
Exemplo Request: GET http://proazurestorage.blob.core.windows.net/?comp=list Response: <?xml version="1.0" encoding="utf-8"?> <EnumerationResults AccountName="http://proazurestorage.blob.core.windows.net/"> <MaxResults>3</MaxResults> <Containers> <Container> <Name>000000004c00f241-staging</Name> <Url>http://proazurestorage.blob.core.windows.net/000000004c00f241-staging</Url> <LastModified>Sun, 26 Apr 2009 15:05:44 GMT</LastModified> <Etag>0x8CB94979BAAA0F0</Etag> </Container> <Container> <Name>05022009-staging</Name> <Url>http://proazurestorage.blob.core.windows.net/05022009-staging</Url> <LastModified>Sun, 03 May 2009 04:50:07 GMT</LastModified> <Etag>0x8CB99C1C3ECE538</Etag> </Container> <Container> <Name>050320090743-staging</Name> <Url>http://proazurestorage.blob.core.windows.net/050320090743-staging</Url> <LastModified>Sun, 03 May 2009 14:44:28 GMT</LastModified> <Etag>0x8CB9A14CC091F60</Etag> </Container> </Containers> <NextMarker>/proazurestorage/050320091143-staging</NextMarker> </EnumerationResults> 10 Cátia Vaz 2011/2012
Storage Client API } Microsoft.WindowsAzure.StorageClient abstrai a interface REST ao fornecer um client no topo da API REST Classes Descrição CloudStorageAccount Uma classe utilitária que retorna a informação de um account através de um ficheiro de configuração ou cria uma instância de um storage account a partir dos parâmetros da account. CloudBlobClient CloudBlobContainer CloudBlob Uma classe wrapper para obter as referências dos objectos blob principais. Exemplo de métodos: GetContainerReference() e GetBlobReference(). A classe consiste de operações de contentor, tais como: Create(), Delete(), ListBlobs(), e GetBlobReference(). A class consiste de operações tais como: Create(), Copy(), UploadFromFile(), UploadByteArray(), UploadStream() 11 Cátia Vaz 2011/2012
Operações Comuns de um contentor } ListContainers } Create } CreateIfNotExist } Delete } SetMetadata Ver mais: CloudBlobContainer
Listar contentores
Criar um contentor
Criar um contentor static void CreateContainerAsync(Uri blobendpoint, string accountname, string accountkey) { CloudBlobClient blobclient = new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountkey)); CloudBlobContainer container = blobclient.getcontainerreference("newcontainer"); container.begincreate(createcontainercallback, container); } static void CreateContainerCallback(IAsyncResult result) { CloudBlobContainer container = (CloudBlobContainer)result.AsyncState; try { container.endcreate(result); Console.WriteLine("Container " + container.name + " created successfully."); } catch (StorageClientException e) { if (e.errorcode == StorageErrorCode.ContainerAlreadyExists) { Console.WriteLine("Cannot create the container because it already exists."); } else { Console.WriteLine(e.ErrorCode); } } } 15 Cátia Vaz 2011/2012
Eliminar um contentor
Uploading de um BLOB
Estabelecer as permissões de um container
Shared Access Signatures } Permite definir um nível de segurança mais granular para cada utilizador registado numa determinada aplicação } São uma série de parâmetros do URL especificados no URI do recurso para controlar privilégios de acesso aos recursos } As políticas de acesso consistem em: } StartTime } EndTime } Permissions } As políticas de acesso pode ser: } Incluidas nas queries como parâmetros } Aplicadas ao nível do contentor.
Exemplo