[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEENCMRE4WSP8MA7Z0MZWM":3,"skill-same:01M6EEENCMRE4WSP8MA7Z0MZWM":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6EEENCMRE4WSP8MA7Z0MZWM","azure-blob-storage",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fazure-blob-storage\u002FSKILL.md",[],[18,19,20],"storage","azure","azure blob storage","2026-11-10 10:12:30",false,"# Azure Blob Storage\n\nAzure Blob Storage is Microsoft's object storage solution for the cloud. It stores massive amounts of unstructured data — documents, images, videos, backups, and data lakes. Three access tiers (Hot, Cool, Archive) let you optimize costs based on access patterns.\n\n## Core Concepts\n\n- **Storage Account** — top-level namespace for all Azure Storage services\n- **Container** — groups blobs, similar to a directory or S3 bucket\n- **Blob** — a file (Block, Append, or Page blob types)\n- **Access Tier** — Hot (frequent), Cool (infrequent, 30d min), Archive (rare, 180d min)\n- **SAS Token** — Shared Access Signature for time-limited, scoped access\n- **Lifecycle Policy** — automatic tier transitions and deletion rules\n\n## Storage Account Setup\n\n```bash\n# Create a storage account\naz storage account create \\\n  --name myappstorageprod \\\n  --resource-group my-app-rg \\\n  --location eastus \\\n  --sku Standard_LRS \\\n  --kind StorageV2 \\\n  --access-tier Hot \\\n  --min-tls-version TLS1_2 \\\n  --allow-blob-public-access false\n```\n\n```bash\n# Get connection string\naz storage account show-connection-string \\\n  --name myappstorageprod \\\n  --resource-group my-app-rg \\\n  --query connectionString --output tsv\n```\n\n## Container Operations\n\n```bash\n# Create a container\naz storage container create \\\n  --name uploads \\\n  --account-name myappstorageprod \\\n  --auth-mode login\n```\n\n```bash\n# List containers\naz storage container list \\\n  --account-name myappstorageprod \\\n  --auth-mode login \\\n  --query '[].name' --output tsv\n```\n\n## Blob Operations\n\n```bash\n# Upload a file\naz storage blob upload \\\n  --account-name myappstorageprod \\\n  --container-name uploads \\\n  --name releases\u002Fv1.2.0\u002Fapp.zip \\\n  --file .\u002Fbuild\u002Fapp.zip \\\n  --tier Hot \\\n  --auth-mode login\n```\n\n```bash\n# Upload a directory\naz storage blob upload-batch \\\n  --account-name myappstorageprod \\\n  --destination static \\\n  --source .\u002Fdist \\\n  --auth-mode login \\\n  --overwrite\n```\n\n```bash\n# Download a blob\naz storage blob download \\\n  --account-name myappstorageprod \\\n  --container-name uploads \\\n  --name releases\u002Fv1.2.0\u002Fapp.zip \\\n  --file .\u002Fapp.zip \\\n  --auth-mode login\n```\n\n```bash\n# List blobs\naz storage blob list \\\n  --account-name myappstorageprod \\\n  --container-name uploads \\\n  --prefix releases\u002F \\\n  --auth-mode login \\\n  --query '[].name' --output tsv\n```\n\n```bash\n# Set blob access tier\naz storage blob set-tier \\\n  --account-name myappstorageprod \\\n  --container-name backups \\\n  --name old-backup.tar.gz \\\n  --tier Archive \\\n  --auth-mode login\n```\n\n## SAS Tokens\n\n```bash\n# Generate a SAS token for a single blob (read access, 1 hour)\naz storage blob generate-sas \\\n  --account-name myappstorageprod \\\n  --container-name uploads \\\n  --name reports\u002Fq4.pdf \\\n  --permissions r \\\n  --expiry $(date -u -d '+1 hour' +%Y-%m-%dT%H:%MZ) \\\n  --auth-mode login \\\n  --as-user \\\n  --output tsv\n```\n\n```bash\n# Generate a container-level SAS (list + read, 24 hours)\naz storage container generate-sas \\\n  --account-name myappstorageprod \\\n  --name uploads \\\n  --permissions lr \\\n  --expiry $(date -u -d '+24 hours' +%Y-%m-%dT%H:%MZ) \\\n  --auth-mode login \\\n  --as-user \\\n  --output tsv\n```\n\n```python\n# Generate SAS token with Python SDK\nfrom azure.storage.blob import BlobServiceClient, generate_blob_sas, BlobSasPermissions\nfrom datetime import datetime, timedelta, timezone\n\naccount_name = \"myappstorageprod\"\naccount_key = \"your-account-key\"\n\nsas_token = generate_blob_sas(\n    account_name=account_name,\n    container_name=\"uploads\",\n    blob_name=\"reports\u002Fq4.pdf\",\n    account_key=account_key,\n    permission=BlobSasPermissions(read=True),\n    expiry=datetime.now(timezone.utc) + timedelta(hours=1)\n)\nurl = f\"https:\u002F\u002F{account_name}.blob.core.windows.net\u002Fuploads\u002Freports\u002Fq4.pdf?{sas_token}\"\nprint(f\"SAS URL: {url}\")\n```\n\n```python\n# Generate SAS for upload (write permission)\nupload_sas = generate_blob_sas(\n    account_name=account_name,\n    container_name=\"uploads\",\n    blob_name=\"user-uploads\u002Favatar.jpg\",\n    account_key=account_key,\n    permission=BlobSasPermissions(write=True, create=True),\n    expiry=datetime.now(timezone.utc) + timedelta(minutes=15)\n)\n```\n\n## Lifecycle Management\n\n```json\n\u002F\u002F lifecycle-policy.json — auto-tier and expire blobs\n{\n  \"rules\": [\n    {\n      \"name\": \"archiveLogs\",\n      \"enabled\": true,\n      \"type\": \"Lifecycle\",\n      \"definition\": {\n        \"filters\": {\n          \"blobTypes\": [\"blockBlob\"],\n          \"prefixMatch\": [\"logs\u002F\"]\n        },\n        \"actions\": {\n          \"baseBlob\": {\n            \"tierToCool\": {\"daysAfterModificationGreaterThan\": 30},\n            \"tierToArchive\": {\"daysAfterModificationGreaterThan\": 90},\n            \"delete\": {\"daysAfterModificationGreaterThan\": 365}\n          }\n        }\n      }\n    },\n    {\n      \"name\": \"cleanupSnapshots\",\n      \"enabled\": true,\n      \"type\": \"Lifecycle\",\n      \"definition\": {\n        \"filters\": {\"blobTypes\": [\"blockBlob\"]},\n        \"actions\": {\n          \"snapshot\": {\n            \"delete\": {\"daysAfterCreationGreaterThan\": 90}\n          }\n        }\n      }\n    }\n  ]\n}\n```\n\n```bash\n# Apply lifecycle policy\naz storage account management-policy create \\\n  --account-name myappstorageprod \\\n  --resource-group my-app-rg \\\n  --policy @lifecycle-policy.json\n```\n\n## Python SDK Usage\n\n```python\n# Upload and download with Python SDK\nfrom azure.storage.blob import BlobServiceClient\n\nblob_service = BlobServiceClient.from_connection_string(\"your-connection-string\")\ncontainer = blob_service.get_container_client(\"uploads\")\n\n# Upload\nwith open(\"report.pdf\", \"rb\") as f:\n    container.upload_blob(name=\"reports\u002F2024\u002Fq4.pdf\", data=f, overwrite=True)\n\n# Download\nblob = container.get_blob_client(\"reports\u002F2024\u002Fq4.pdf\")\nwith open(\"downloaded.pdf\", \"wb\") as f:\n    stream = blob.download_blob()\n    f.write(stream.readall())\n\n# List blobs\nfor blob in container.list_blobs(name_starts_with=\"reports\u002F\"):\n    print(f\"{blob.name} ({blob.size} bytes, tier: {blob.blob_tier})\")\n```\n\n## AzCopy for Bulk Transfers\n\n```bash\n# Sync a local directory to blob storage\nazcopy sync '.\u002Fdist' 'https:\u002F\u002Fmyappstorageprod.blob.core.windows.net\u002Fstatic?SAS_TOKEN' \\\n  --delete-destination true\n```\n\n```bash\n# Copy between storage accounts\nazcopy copy \\\n  'https:\u002F\u002Fsource.blob.core.windows.net\u002Fdata\u002F*?SAS' \\\n  'https:\u002F\u002Fdest.blob.core.windows.net\u002Fdata\u002F?SAS' \\\n  --recursive\n```\n\n## Best Practices\n\n- Disable public blob access by default; use SAS tokens for temporary sharing\n- Use lifecycle management to automatically move cold data to cheaper tiers\n- Use AzCopy for large-scale data transfers (parallel, resumable)\n- Enable soft delete for accidental deletion recovery (set retention period)\n- Use managed identities and RBAC instead of account keys when possible\n- Set minimum TLS version to 1.2\n- Use Cool tier for data accessed less than once per month\n- Enable blob versioning for critical data protection\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fazure-blob-storage",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill azure-blob-storage",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill azure-blob-storage",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill azure-blob-storage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fazure-blob-storage\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]