แบบฝึกหัด - เพิ่มไฟล์พารามิเตอร์และพารามิเตอร์ที่ปลอดภัย

เสร็จสมบูรณ์เมื่อ

Note

แบบฝึกหัดนี้เป็นแบบทางเลือก หากคุณต้องการทําแบบฝึกหัดนี้ให้เสร็จสมบูรณ์ คุณจะต้องสร้างการสมัครใช้งาน Azure ก่อนที่คุณจะเริ่มต้น หากคุณไม่มีบัญชี Azure หรือไม่ต้องการสร้างบัญชีในขณะนี้ คุณสามารถอ่านคําแนะนําเพื่อให้คุณเข้าใจข้อมูลที่นําเสนอ

ในแบบฝึกหัดนี้ คุณจะสร้างไฟล์พารามิเตอร์ที่มีค่าสําหรับไฟล์ Bicep ที่คุณสร้างไว้ก่อนหน้านี้ ในไฟล์พารามิเตอร์เดียวกัน คุณจะเพิ่มการอ้างอิงชุดเก็บคีย์ของ Azure เพื่อให้ข้อมูลที่ละเอียดอ่อนได้อย่างปลอดภัย

ในระหว่างกระบวนการ คุณจะทํางานต่อไปนี้:

  • เพิ่มพารามิเตอร์ความปลอดภัยบางอย่าง
  • สร้างไฟล์พารามิเตอร์
  • ทดสอบการปรับใช้เพื่อให้แน่ใจว่าไฟล์พารามิเตอร์ถูกต้อง
  • สร้างชุดเก็บคีย์และความลับ
  • อัปเดตไฟล์พารามิเตอร์เพื่ออ้างอิงถึงข้อมูลลับชุดเก็บคีย์
  • ทดสอบการปรับใช้อีกครั้งเพื่อให้แน่ใจว่าไฟล์พารามิเตอร์ยังคงถูกต้อง

ลบค่าเริ่มต้นสําหรับ App Service Plan SKU

เพื่อให้เทมเพลตของคุณทํางานข้ามสภาพแวดล้อม รายละเอียด SKU ของแผนบริการแอป Azure จะระบุในไฟล์พารามิเตอร์แทนที่จะเป็นค่าเริ่มต้น

ในแฟ้ม main.bicep ใน Visual Studio Code ให้ปรับปรุงพารามิเตอร์ appServicePlanSku เพื่อเอาค่าเริ่มต้นออก

@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object

เพิ่มพารามิเตอร์ใหม่

ในตอนนี้ คุณจําเป็นต้องเพิ่ม SQL Server และฐานข้อมูล ก่อนอื่น คุณจะเพิ่มพารามิเตอร์สําหรับการเข้าสู่ระบบและรหัสผ่านของผู้ดูแลระบบ และ SKU ของฐานข้อมูล คุณจะตั้งค่าในภายหลัง

ในไฟล์ main.bicep ใน Visual Studio Code ให้เพิ่มพารามิเตอร์ sqlServerAdministratorLogin, และ sqlServerAdministratorPasswordพารามิเตอร์ sqlDatabaseSku ใต้การประกาศพารามิเตอร์ปัจจุบัน เมื่อคุณทําเสร็จแล้ว การประกาศพารามิเตอร์ของคุณควรมีลักษณะดังตัวอย่างนี้:

@description('The name of the environment. This must be dev, test, or prod.')
@allowed([
  'dev'
  'test'
  'prod'
])
param environmentName string = 'dev'

@description('The unique name of the solution. This is used to ensure that resource names are unique.')
@minLength(5)
@maxLength(30)
param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'

@description('The number of App Service plan instances.')
@minValue(1)
@maxValue(10)
param appServicePlanInstanceCount int = 1

@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object

@description('The Azure region into which the resources should be deployed.')
param location string = 'eastus'

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object

โปรดสังเกตว่าคุณไม่ได้ระบุค่าเริ่มต้นสําหรับพารามิเตอร์ sqlServerAdministratorLogin และ sqlServerAdministratorPassword การเพิ่มค่าเริ่มต้นสําหรับพารามิเตอร์ที่ปลอดภัยเป็นแนวทางปฏิบัติที่ไม่ดี นอกจากนี้ คุณไม่ได้ระบุค่าเริ่มต้นสําหรับ sqlDatabaseSku คุณจะต้องระบุค่าในไฟล์พารามิเตอร์

เพิ่มตัวแปรใหม่

ในไฟล์ main.bicep ใน Visual Studio Code เพิ่ม sqlServerName ตัวแปร และ ใต้ sqlDatabaseName ตัวแปรที่มีอยู่ เมื่อคุณทําเสร็จแล้ว การประกาศตัวแปรของคุณควรมีลักษณะดังตัวอย่างนี้:

var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'

เพิ่มทรัพยากรเซิร์ฟเวอร์ SQL และฐานข้อมูล

  1. ในไฟล์ main.bicep ใน Visual Studio Code เพิ่มรหัสต่อไปนี้ที่ด้านล่างของไฟล์:

    resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdministratorLogin
        administratorLoginPassword: sqlServerAdministratorPassword
      }
    }
    
    resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: {
        name: sqlDatabaseSku.name
        tier: sqlDatabaseSku.tier
      }
    }
    
  2. บันทึกการเปลี่ยนแปลงไปยังไฟล์

ตรวจสอบไฟล์ Bicep ของคุณ

หลังจากที่คุณทําการเปลี่ยนแปลงก่อนหน้านี้ทั้งหมดเสร็จสิ้นแล้ว ไฟล์ Bicep ของคุณควรมีลักษณะดังนี้:

@description('The name of the environment. This must be dev, test, or prod.')
@allowed([
  'dev'
  'test'
  'prod'
])
param environmentName string = 'dev'

@description('The unique name of the solution. This is used to ensure that resource names are unique.')
@minLength(5)
@maxLength(30)
param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'

@description('The number of App Service plan instances.')
@minValue(1)
@maxValue(10)
param appServicePlanInstanceCount int = 1

@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object

@description('The Azure region into which the resources should be deployed.')
param location string = 'eastus'

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object

var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'

resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSku.name
    tier: appServicePlanSku.tier
    capacity: appServicePlanInstanceCount
  }
}

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: {
    name: sqlDatabaseSku.name
    tier: sqlDatabaseSku.tier
  }
}

ถ้าไม่เป็นเช่นนั้น ให้คัดลอกตัวอย่างหรือปรับเทมเพลตของคุณให้ตรงกับตัวอย่าง

สร้างไฟล์พารามิเตอร์

  1. เปิด Visual Studio Code และเปิดโฟลเดอร์ที่มีไฟล์ main.bicep อยู่ ในโฟลเดอร์เดียวกัน ให้สร้างไฟล์ใหม่ชื่อ main.parameters.dev.json.

  2. ในไฟล์ main.parameters.dev.json ให้เพิ่มรหัสต่อไปนี้:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "appServicePlanSku": {
          "value": {
            "name": "F1",
            "tier": "Free"
          }
        },
        "sqlDatabaseSku": {
          "value": {
            "name": "Standard",
            "tier": "Standard"
          }
        }
      }
    }
    
  3. บันทึกการเปลี่ยนแปลงไปยังไฟล์

ปรับใช้เทมเพลต Bicep ด้วยไฟล์พารามิเตอร์

เรียกใช้คําสั่ง Azure CLI ต่อไปนี้ในเทอร์มินัล โปรดสังเกตว่าคุณกําลังให้ไฟล์พารามิเตอร์สําหรับการปรับใช้

az deployment group create \
  --name main \
  --template-file main.bicep \
  --parameters main.parameters.dev.json

เรียกใช้คําสั่ง Azure PowerShell ต่อไปนี้ในเทอร์มินัล โปรดสังเกตว่าคุณกําลังให้ไฟล์พารามิเตอร์สําหรับการปรับใช้

New-AzResourceGroupDeployment `
  -Name main `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.dev.json

คุณจะได้รับแจ้งให้ป้อนค่าสําหรับพารามิเตอร์ sqlServerAdministratorLogin และ sqlServerAdministratorPassword เมื่อคุณดําเนินการปรับใช้ คุณไม่จําเป็นต้องระบุ solutionName เนื่องจากมีค่าเริ่มต้นที่ระบุไว้ในเทมเพลต คุณไม่จําเป็นต้องระบุค่าพารามิเตอร์อื่น ๆ เนื่องจากมีการระบุค่าพารามิเตอร์ไว้ในไฟล์พารามิเตอร์

Tip

เมื่อคุณป้อนพารามิเตอร์ความปลอดภัย ค่าที่คุณเลือกต้องเป็นไปตามกฎบางอย่าง:

  • sqlServerAdministratorLogin จะต้องไม่เป็นชื่อเข้าสู่ระบบที่คาดเดาได้ง่าย เช่น admin หรือ root ซึ่งสามารถประกอบด้วยอักขระพยัญชนะผสมตัวเลขเท่านั้น และต้องเริ่มต้นด้วยตัวอักษร
  • sqlServerAdministratorPassword ต้องมีความยาวอย่างน้อย 8 อักขระ และประกอบด้วยตัวอักษรพิมพ์เล็ก อักษรตัวพิมพ์ใหญ่ ตัวเลข และสัญลักษณ์ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับความซับซ้อนของรหัสผ่าน ให้ดูนโยบายรหัสผ่าน SQL Azure

ถ้าค่าพารามิเตอร์ไม่ตรงตามข้อกําหนด Azure SQL จะไม่ปรับใช้เซิร์ฟเวอร์ของคุณ

นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณเก็บบันทึกของการเข้าสู่ระบบและรหัสผ่านที่คุณป้อน คุณจะใช้ฟังก์ชันเหล่านี้ในส่วนถัดไป

การปรับใช้อาจใช้เวลาสองถึงสามนาทีจึงจะเสร็จสิ้นได้

สร้างชุดเก็บคีย์และข้อมูลลับ

บริษัทของเล่นของคุณมีชุดเก็บคีย์พร้อมข้อมูลลับที่จําเป็นสําหรับการปรับใช้อยู่แล้ว เพื่อจําลองสถานการณ์นี้ คุณจะสร้างชุดเก็บคีย์ใหม่และเพิ่มข้อมูลลับที่จะใช้

ในเทอร์มินัล ให้ดําเนินการคําสั่งต่อไปนี้เพื่อสร้างชุดเก็บคีย์และข้อมูลลับ อัปเดตค่าตัวแปรก่อนที่คุณจะดําเนินการคําสั่งเหล่านี้ ชื่อชุดเก็บคีย์ต้องเป็นสตริงที่ไม่ซ้ํากันทั่วโลกที่มีอักขระ 3 ถึง 24 ตัวที่สามารถมีได้เฉพาะอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก เครื่องหมายยัติภังค์ (-) และตัวเลขเท่านั้น ตัวอย่างเช่น demo-kv-1234567abcdefg

Caution

ตรวจสอบให้แน่ใจว่าคุณใช้การเข้าสู่ระบบและรหัสผ่านเดียวกันกับที่คุณใช้ในขั้นตอนก่อนหน้า หากคุณไม่ดําเนินการดังกล่าว การปรับใช้ถัดไปจะไม่เสร็จสมบูรณ์

สําหรับ keyVaultName แทนที่ YOUR-KEY-VAULT-NAME ด้วยชื่อสําหรับชุดเก็บคีย์ของคุณ คําสั่ง read สําหรับตัวแปร login และ password จะพร้อมท์ให้คุณใส่ค่า ขณะที่คุณพิมพ์ ค่าจะไม่แสดงในเทอร์มินัล และจะไม่ถูกบันทึกในประวัติคําสั่งของคุณ

เพื่อปกป้องค่าตัวแปรในเซสชันเทอร์มินัล Bash ของคุณ โปรดระวังรายการต่อไปนี้:

  • ค่าตัวแปรจะไม่ถูกจัดเก็บเป็นสตริงที่ปลอดภัย และสามารถแสดงโดยการป้อนคําสั่งเช่น $yourVariableName บนบรรทัดคําสั่ง หรือด้วยคําสั่ง echo ในแบบฝึกหัดนี้ หลังจากสร้างข้อมูลลับชุดเก็บข้อมูลของคุณคุณสามารถลบค่าที่มีอยู่ของตัวแปรแต่ละตัวโดยการเรียกใช้คําสั่ง read โดยไม่ต้องป้อนค่า
  • az keyvault secret set ใช้พารามิเตอร์ --value เพื่อสร้างค่าของข้อมูลลับ ผลลัพธ์ของคําสั่งแสดงคุณสมบัติที่ชื่อ value ที่ประกอบด้วยค่าของข้อมูลลับ คุณสามารถระงับผลลัพธ์ทั้งหมดของคําสั่งด้วยพารามิเตอร์ --output none ดังที่แสดงในตัวอย่าง

หากต้องการสร้างตัวแปร keyVaultName, loginและ password ให้เรียกใช้แต่ละคําสั่งแยกต่างหาก จากนั้นคุณสามารถเรียกใช้บล็อกของคําสั่งเพื่อสร้างชุดเก็บคีย์และข้อมูลลับ

keyVaultName='YOUR-KEY-VAULT-NAME'
read -s -p "Enter the login name: " login
read -s -p "Enter the password: " password

az keyvault create --name $keyVaultName --location eastus --enabled-for-template-deployment true
az keyvault secret set --vault-name $keyVaultName --name "sqlServerAdministratorLogin" --value $login --output none
az keyvault secret set --vault-name $keyVaultName --name "sqlServerAdministratorPassword" --value $password --output none

Note

คุณกําลังตั้งค่า --enabled-for-template-deployment บนชุดเก็บข้อมูลประจําตัวเพื่อให้ Azure สามารถใช้ข้อมูลลับจากชุดเก็บข้อมูลของคุณระหว่างการปรับใช้ หากคุณไม่ได้ตั้งค่านี้ตามค่าเริ่มต้น การปรับใช้ของคุณจะไม่สามารถเข้าถึงข้อมูลลับในชุดเก็บข้อมูลส่วนบุคคลของคุณได้

นอกจากนี้ผู้ใดก็ตามที่ดําเนินการปรับใช้จะต้องมีสิทธิ์ในการเข้าถึงชุดเก็บ เนื่องจากคุณได้สร้าง Key Vault คุณเป็นเจ้าของ ดังนั้นคุณจึงไม่จําเป็นต้องให้สิทธิ์ในแบบฝึกหัดนี้อย่างชัดเจน สําหรับห้องนิรภัยของคุณเอง คุณต้องให้สิทธิ์การเข้าถึงข้อมูลลับ

สําหรับ keyVaultName แทนที่ YOUR-KEY-VAULT-NAME ด้วยชื่อสําหรับชุดเก็บคีย์ของคุณ คําสั่ง Read-Host สําหรับตัวแปร login และ password จะพร้อมท์ให้คุณใส่ค่า ขณะที่คุณพิมพ์ ค่าจะไม่แสดงในเทอร์มินัล และจะไม่ถูกบันทึกในประวัติคําสั่งของคุณ ค่าต่าง ๆ จะถูกจัดเก็บเป็นสตริงที่ปลอดภัย

หากต้องการสร้างตัวแปร keyVaultName, loginและ password ให้เรียกใช้แต่ละคําสั่งแยกต่างหาก จากนั้นคุณสามารถเรียกใช้บล็อกของคําสั่งเพื่อสร้างชุดเก็บคีย์และข้อมูลลับ

$keyVaultName = 'YOUR-KEY-VAULT-NAME'
$login = Read-Host "Enter the login name" -AsSecureString
$password = Read-Host "Enter the password" -AsSecureString

New-AzKeyVault -VaultName $keyVaultName -Location eastus -EnabledForTemplateDeployment
Set-AzKeyVaultSecret -VaultName $keyVaultName -Name 'sqlServerAdministratorLogin' -SecretValue $login
Set-AzKeyVaultSecret -VaultName $keyVaultName -Name 'sqlServerAdministratorPassword' -SecretValue $password

Note

คุณกําลังตั้งค่า -EnabledForTemplateDeployment บนชุดเก็บข้อมูลประจําตัวเพื่อให้ Azure สามารถใช้ข้อมูลลับจากชุดเก็บข้อมูลของคุณระหว่างการปรับใช้ หากคุณไม่ได้ตั้งค่านี้ตามค่าเริ่มต้น การปรับใช้ของคุณจะไม่สามารถเข้าถึงข้อมูลลับในชุดเก็บข้อมูลส่วนบุคคลของคุณได้

นอกจากนี้ผู้ใดก็ตามที่ดําเนินการปรับใช้จะต้องมีสิทธิ์ในการเข้าถึงชุดเก็บ เนื่องจากคุณได้สร้าง Key Vault คุณเป็นเจ้าของ ดังนั้นคุณจึงไม่จําเป็นต้องให้สิทธิ์ในแบบฝึกหัดนี้อย่างชัดเจน สําหรับห้องนิรภัยของคุณเอง คุณต้องให้สิทธิ์การเข้าถึงข้อมูลลับ

รับ ID ทรัพยากรของชุดเก็บคีย์

หากต้องการใช้ข้อมูลลับของชุดเก็บคีย์ในการปรับใช้ของคุณ คุณจําเป็นต้องมี ID ทรัพยากรของชุดเก็บ เรียกใช้คําสั่งต่อไปนี้เพื่อเรียกใช้รหัสทรัพยากรของชุดเก็บคีย์:

az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId

ID ทรัพยากรจะมีลักษณะบางอย่างเหมือนกับตัวอย่างนี้:

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets

คัดลอก ID ทรัพยากร คุณจะใช้ในขั้นตอนถัดไป

เพิ่มการอ้างอิงชุดเก็บคีย์ไปยังไฟล์พารามิเตอร์

  1. ในไฟล์ main.parameters.dev.json ให้ผนวกรหัสต่อไปนี้หลัง sqlDatabaseSku วงเล็บปีกกาปิดของพารามิเตอร์ ตรวจสอบให้แน่ใจว่าคุณแทนที่ YOUR-KEY-VAULT-RESOURCE-ID ด้วยค่าของ ID ทรัพยากรชุดเก็บคีย์ที่คุณคัดลอกในขั้นตอนก่อนหน้า หลังจากที่คุณดําเนินการเสร็จแล้ว ไฟล์พารามิเตอร์ของคุณควรมีลักษณะดังตัวอย่างนี้:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "appServicePlanSku": {
          "value": {
            "name": "F1",
            "tier": "Free"
          }
        },
        "sqlDatabaseSku": {
          "value": {
            "name": "Standard",
            "tier": "Standard"
          }
        },
        "sqlServerAdministratorLogin": {
          "reference": {
            "keyVault": {
              "id": "YOUR-KEY-VAULT-RESOURCE-ID"
            },
            "secretName": "sqlServerAdministratorLogin"
          }
        },
        "sqlServerAdministratorPassword": {
          "reference": {
            "keyVault": {
              "id": "YOUR-KEY-VAULT-RESOURCE-ID"
            },
            "secretName": "sqlServerAdministratorPassword"
          }
        }
      }
    }
    
  2. บันทึกการเปลี่ยนแปลงไปยังไฟล์

ปรับใช้เทมเพลต Bicep ด้วยไฟล์พารามิเตอร์และการอ้างอิงชุดเก็บคีย์ของ Azure

เรียกใช้คําสั่ง Azure CLI ต่อไปนี้ในเทอร์มินัล คุณกําลังให้ไฟล์พารามิเตอร์พร้อมกับไฟล์ Bicep

az deployment group create \
  --name main \
  --template-file main.bicep \
  --parameters main.parameters.dev.json

เรียกใช้คําสั่ง Azure PowerShell ต่อไปนี้ในเทอร์มินัล คุณกําลังให้ไฟล์พารามิเตอร์พร้อมกับไฟล์ Bicep

New-AzResourceGroupDeployment `
  -Name main `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.dev.json

คุณไม่ได้รับพร้อมท์ให้ป้อนค่าสําหรับพารามิเตอร์ sqlServerAdministratorLogin และ sqlServerAdministratorPassword เมื่อคุณดําเนินการปรับใช้ในขณะนี้ Azure จะดึงค่าจาก Key Vault ของคุณแทน

การปรับใช้จะเสร็จสมบูรณ์อย่างรวดเร็วยิ่งขึ้นในขณะนี้เนื่องจากทรัพยากร Azure มีอยู่แล้ว

ตรวจสอบการปรับใช้ของคุณ

  1. ในเบราว์เซอร์ของคุณ ย้อนกลับไปยังพอร์ทัล Azure ไปยังกลุ่มทรัพยากรของคุณ คุณจะยังคงเห็นการปรับใช้ที่สําเร็จหนึ่งรายการเนื่องจากการปรับใช้ชื่อเดียวกันกับการปรับใช้ครั้งแรก

  2. เลือกลิงก์ 1 สําเร็จ

  3. เลือกการปรับใช้ที่เรียกว่า main

  4. ในเมนูด้านซ้าย ให้เลือกอินพุต

  5. โปรดสังเกตว่าทั้ง appServicePlanSku และค่าพารามิเตอร์ sqlDatabaseSku ได้รับการตั้งค่าเป็นค่าในไฟล์พารามิเตอร์ นอกจากนี้ โปรดสังเกตว่าค่าพารามิเตอร์ของ sqlServerAdministratorLogin และ sqlServerAdministratorPassword จะไม่แสดงขึ้น เนื่องจากคุณใช้ตัวตกแต่ง @secure() กับพวกเขา

    สกรีนช็อตของอินเทอร์เฟซพอร์ทัล Azure สําหรับการปรับใช้เฉพาะที่แสดงค่าพารามิเตอร์