azure-expert

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Microsoft Azure Expert

Microsoft Azure 专家级指南

Expert guidance for Microsoft Azure cloud platform, services, and cloud-native architecture.
为Microsoft Azure云平台、服务及云原生架构提供专家级指导。

Core Concepts

核心概念

  • Azure Resource Manager (ARM)
  • Virtual Machines and App Services
  • Azure Functions (serverless)
  • Azure Storage (Blob, Queue, Table)
  • Azure SQL Database
  • Cosmos DB
  • Azure Kubernetes Service (AKS)
  • Azure Active Directory
  • Azure Resource Manager (ARM)
  • Virtual Machines and App Services
  • Azure Functions (serverless)
  • Azure Storage (Blob, Queue, Table)
  • Azure SQL Database
  • Cosmos DB
  • Azure Kubernetes Service (AKS)
  • Azure Active Directory

Azure CLI

Azure CLI

bash
undefined
bash
undefined

Login

Login

az login
az login

Create resource group

Create resource group

az group create --name myResourceGroup --location eastus
az group create --name myResourceGroup --location eastus

Create VM

Create VM

az vm create
--resource-group myResourceGroup
--name myVM
--image UbuntuLTS
--admin-username azureuser
--generate-ssh-keys
az vm create
--resource-group myResourceGroup
--name myVM
--image UbuntuLTS
--admin-username azureuser
--generate-ssh-keys

Create App Service

Create App Service

az webapp create
--resource-group myResourceGroup
--plan myAppServicePlan
--name myWebApp
--runtime "NODE|14-lts"
az webapp create
--resource-group myResourceGroup
--plan myAppServicePlan
--name myWebApp
--runtime "NODE|14-lts"

Create storage account

Create storage account

az storage account create
--name mystorageaccount
--resource-group myResourceGroup
--location eastus
--sku Standard_LRS
undefined
az storage account create
--name mystorageaccount
--resource-group myResourceGroup
--location eastus
--sku Standard_LRS
undefined

Azure Functions

Azure Functions

python
import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="HttpTrigger")
@app.route(route="hello")
def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
            name = req_body.get('name')
        except ValueError:
            pass

    if name:
        return func.HttpResponse(f"Hello, {name}!")
    else:
        return func.HttpResponse(
            "Please pass a name",
            status_code=400
        )

@app.function_name(name="QueueTrigger")
@app.queue_trigger(arg_name="msg", queue_name="myqueue",
                   connection="AzureWebJobsStorage")
def queue_trigger(msg: func.QueueMessage):
    logging.info(f'Python queue trigger function processed: {msg.get_body().decode("utf-8")}')
python
import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="HttpTrigger")
@app.route(route="hello")
def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
            name = req_body.get('name')
        except ValueError:
            pass

    if name:
        return func.HttpResponse(f"Hello, {name}!")
    else:
        return func.HttpResponse(
            "Please pass a name",
            status_code=400
        )

@app.function_name(name="QueueTrigger")
@app.queue_trigger(arg_name="msg", queue_name="myqueue",
                   connection="AzureWebJobsStorage")
def queue_trigger(msg: func.QueueMessage):
    logging.info(f'Python queue trigger function processed: {msg.get_body().decode("utf-8")}')

Cosmos DB

Cosmos DB

python
from azure.cosmos import CosmosClient, PartitionKey

endpoint = "https://myaccount.documents.azure.com:443/"
key = "YOUR_KEY"

client = CosmosClient(endpoint, key)
database = client.create_database_if_not_exists(id="myDatabase")
container = database.create_container_if_not_exists(
    id="myContainer",
    partition_key=PartitionKey(path="/userId")
)
python
from azure.cosmos import CosmosClient, PartitionKey

endpoint = "https://myaccount.documents.azure.com:443/"
key = "YOUR_KEY"

client = CosmosClient(endpoint, key)
database = client.create_database_if_not_exists(id="myDatabase")
container = database.create_container_if_not_exists(
    id="myContainer",
    partition_key=PartitionKey(path="/userId")
)

Create item

Create item

item = { "id": "1", "userId": "user123", "name": "John Doe" } container.create_item(body=item)
item = { "id": "1", "userId": "user123", "name": "John Doe" } container.create_item(body=item)

Query items

Query items

query = "SELECT * FROM c WHERE c.userId = @userId" items = container.query_items( query=query, parameters=[{"name": "@userId", "value": "user123"}], enable_cross_partition_query=True )
for item in items: print(item)
undefined
query = "SELECT * FROM c WHERE c.userId = @userId" items = container.query_items( query=query, parameters=[{"name": "@userId", "value": "user123"}], enable_cross_partition_query=True )
for item in items: print(item)
undefined

ARM Templates

ARM Templates

json
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-02-01",
      "name": "[parameters('webAppName')]",
      "location": "[parameters('location')]",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      }
    }
  ]
}
json
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-02-01",
      "name": "[parameters('webAppName')]",
      "location": "[parameters('location')]",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      }
    }
  ]
}

Best Practices

最佳实践

  • Use managed identities
  • Implement Azure Key Vault
  • Tag resources properly
  • Use ARM templates or Bicep
  • Monitor with Azure Monitor
  • Implement auto-scaling
  • Use availability zones
  • 使用托管标识
  • 部署Azure Key Vault
  • 合理标记资源
  • 使用ARM模板或Bicep
  • 通过Azure Monitor进行监控
  • 实现自动缩放
  • 使用可用性区域

Anti-Patterns

反模式

❌ Hardcoded credentials ❌ No resource tagging ❌ Single region deployment ❌ No backup strategy ❌ Ignoring cost optimization ❌ Not using managed services
❌ 硬编码凭据 ❌ 未标记资源 ❌ 单区域部署 ❌ 无备份策略 ❌ 忽视成本优化 ❌ 不使用托管服务

Resources

资源