Explore Azure Blob storage
- Types of storage accounts
- Standard ใช้ Azure Storage ได้หมด
- Premium แยกย่อยตาม Blob / Page / Files
- Access tiers for block blob data
- Hot - default ตอนสร้าง / เร็ว แพง
- Cool - เก็บ data 30 วัน มีอาจจะเข้าถึงน้อย ค่าเก็บถูกว่า Hot แต่ค่า Access แพงกว่า hot
- Archive - เก็บ data 180 วัน แต่ค่า Access แพงที่สุด ถ้าจะใช้งานต้อง Rehydrates
- Discover Azure Blob storage resource types
- Storage accounts - เป็นที่เก็บ Containers
- Containers - เหมือน directory/drive ต้องเป็น lowercasename เป็นที่เก็บ blob
- Blobs
- Block blobs - store text and binary data, up to about 4.7 TB
- Append blobs - สำหรับงาน Stream เช่น Logging
- Page blobs - up to 8TB / VHD ของ VM
- Explore Azure Storage security features
- Default Encrypt เอาออกไม่ได้
- Storage Service Encryption (SSE)- ข้อมูล + Metadata (256-bit AES encryption/FIPS 140-2) คล้าย bit locker
- ทำงานร่วมกับ RBAC ของ Azure AD ได้
- VHD ใช้ Azure Disk Encryption.
- ตอน transfer Client-Side Encryption, HTTPS, or SMB 3.0
- Encryption key management
- Microsoft-managed Microsoft key store
- customer-managed - Azure Key Vault หรือ 3rd Party
- Evaluate Azure Storage redundancy options
- LRS
- ZRS
- GRS
- GZRS
- Create a block blob
az group create --name az204-blob-rg --location az storage account create --resource-group az204-blob-rg --name \ --location \ --kind BlockBlobStorage --sku Premium_LRS
knowledge check: Explore Azure Blob storage (Knowledge check)
Manage the Azure Blob storage lifecycle
- Manage the data lifecycle
- Transition blobs to a cooler storage tier (hot to cool, hot to archive, or cool to archive) to optimize for performance and cost
- Delete blobs at the end of their lifecycles
- Define rules to be run once per day at the storage account level
- Apply rules to containers or a subset of blobs (using prefixes as filters)
- Discover Blob storage lifecycle policies - JSON Format แกะค่าที่ set ได้ตามตัวอย่างดีกว่า
{ "rules": [ { "name": "ruleFoo", "enabled": true, "type": "Lifecycle", "definition": { "filters": { "blobTypes": [ "blockBlob" ], "prefixMatch": [ "container1/foo" ] }, "actions": { "baseBlob": { "tierToCool": { "daysAfterModificationGreaterThan": 30 }, "tierToArchive": { "daysAfterModificationGreaterThan": 90 }, "delete": { "daysAfterModificationGreaterThan": 2555 } }, "snapshot": { "delete": { "daysAfterCreationGreaterThan": 90 } } } } } ] }
- Rehydrate blob - ใช้เวลานาน ต้องคิดถึงความคุ้มค่าด้วย
- Copy an archived blob to an online tier (Recommend) ด้วยการ Copy Blob หรือCopy Blob from URL
- Change a blob's access tier to an online tier ด้วยการ Set Blob Tier
- Note อยากเร็วต้องเสียเงินเพิ่มได้
knowledge check: Manage the Azure Blob storage lifecycle (Knowledge check)
Work with Azure Blob storage
- Azure Blob storage .NET client library
BlobClient
- จัดการ Azure Storage blobsBlobClientOptions
-BlobContainerClient
- จัดการ Azure Storage containers + their blobs. โดยจัดการได้- System properties ส่วนใหญ่ read-only
- User-defined metadata
BlobServiceClient
- จัดการ Azure Storage service resources + blob containers เอาไว้ Get Container ได้BlobUriBuilder
-
- Example
private static async Task ProcessAsync() { // Copy the connection string from the portal in the variable below. string storageConnectionString = "CONNECTION STRING"; //เอามาจาก Azure Portal // Create a client that can authenticate with a connection string BlobServiceClient blobServiceClient = new BlobServiceClient(storageConnectionString); //Create a unique name for the container string containerName = "wtblob" + Guid.NewGuid().ToString(); // Create the container and return a container client object BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName); // ... // Write text to the file string fileName = 'AAA.txt'; string localFilePath = Path.Combine("./data/", fileName); await File.WriteAllTextAsync(localFilePath, "Hello, World!"); // Get a reference to the blob BlobClient blobClient = containerClient.GetBlobClient(fileName); // Open the file and upload its data using FileStream uploadFileStream = File.OpenRead(localFilePath); await blobClient.UploadAsync(uploadFileStream, true); uploadFileStream.Close(); // List blobs in the container Console.WriteLine("Listing blobs..."); await foreach (BlobItem blobItem in containerClient.GetBlobsAsync()) { Console.WriteLine("\t" + blobItem.Name); } // ... // Download the blob's contents and save it to a file BlobDownloadInfo download = await blobClient.DownloadAsync(); using (FileStream downloadFileStream = File.OpenWrite(downloadFilePath)) { await download.Content.CopyToAsync(downloadFileStream); downloadFileStream.Close(); } // ... // Delete the container and clean up local files created await containerClient.DeleteAsync(); }
- Manage container properties and metadata
- .NET
- Retrieve ใช้ Method GetProperties() / GetPropertiesAsync()
- Set and retrieve metadata ใช้ Method SetMetadata() / SetMetadataAsync()
- REST (Property ที่ใช้ได้ทั้ง Container / Blob คือ ETag กับ Last-Modified
- Retrieve (GET)
- Set (PUT)
- .NET
- API : Operations on blobs (REST API) เช่น
- Lease Blob (Write & Delete) comp=lease
- Snapshot comp=snapshot
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=snapshot
knowledge check: Work with Azure Blob storage (Knowledge check)
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.