[AZ-204] Develop solutions that use Blob storage

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 blobs
    • BlobClientOptions -
    • 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)
  • 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.