使用 Azure CLI 快速建立 Azure Web App 測試網站、資料庫與儲存體帳戶 | The Will Will Web

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 Azure CLI 快速建立 Azure Web App 測試網站、資料庫與儲存體帳戶

架設一個測試網站,最常見的需求就是一個網站(Azure Web App)外加一個資料庫(Azure SQL Database),如果有檔案儲存需求,頂多就再加一個儲存體帳戶(Azure Storage Account)就可以搞定。這篇文章我將分享如何透過 Azure CLI 快速建立網站、資料庫與儲存體帳戶,你完全可以不透過 Azure Portal 建立這些服務,使用 無互動 (non-Interactive) 的方式就可以建立所有必要的 Azure 資源。

以下所有 Azure CLI 命令都是在 WSL 2 環境下執行。

登入 Azure CLI 並取得授權

  1. 登入 Azure CLI

    az login --use-device-code
    
  2. 切換到正確的 Azure 訂用帳戶

    az account set -s "Microsoft Azure Sponsorship"
    

建立資源群組

  1. 建立資源群組

    az group create -l 'eastasia' -n 'myapp'
    
  2. 建立資源群組標籤

    az group update -g 'myapp' \
        --set tags.申請人員='張OO' \
        --set tags.客戶名稱='台灣微軟' \
        --set tags.環境名稱='Testing' \
        --set tags.專案名稱='台灣微軟 - 神奇的系統'
    

建立 Azure Service 服務

  1. 建立 Azure Service Plan 方案

    找出你想使用的價格等級 (pricing tier) ( --sku)

    az appservice plan create -h
    

    依據你想建立的 --sku 建立 Web App

    az appservice plan create -g 'myapp' -n 'myapp-plan' -l 'eastasia' --sku 'B1'
    

    az appservice plan

  2. 建立 Azure Web App 站台

    查出目前 Azure Web App 支援的 Runtimes 清單:

    az webapp list-runtimes
    
    aspnet|V4.8
    aspnet|V3.5
    DOTNETCORE|2.1
    DOTNETCORE|3.1
    DOTNET|5.0
    DOTNET|6.0
    node|10.6
    node|10.10
    node|10.14
    node|12-lts
    node|14-lts
    php|7.3
    php|7.4
    python|3.6
    java|1.8|Tomcat|7.0
    java|1.8|Tomcat|8.5
    java|1.8|Tomcat|9.0
    java|1.8|Java SE|8
    java|7|Tomcat|7.0
    java|7|Tomcat|8.5
    java|7|Tomcat|9.0
    java|7|Java SE|8
    java|11|Tomcat|7.0
    java|11|Tomcat|8.5
    java|11|Tomcat|9.0
    java|11|Java SE|8
    

    依據不同的 Runtime 建立 Web App

    az webapp create -g 'myapp' -p 'myapp-plan' -n 'myapp' --runtime "DOTNET|5.0"
    

    取得 Azure Web App 站台完整屬性清單

    az webapp show -g 'myapp' -n 'myapp' -o json
    

    az webapp

  3. 設定 Azure Web App 啟用 Always On 特性 (僅 B1 等級以上才支援 Always On 特性)

    az webapp config set -g 'myapp' -n 'myapp' --always-on true
    

    az webapp config

    取得 Azure Web App 預設域名

    az webapp show -g myapp -n myapp -o json | jq '.defaultHostName' -r
    
  4. 設定 Azure Web App 應用程式參數

    列出目前有多少應用程式設定

    az webapp config appsettings list -g 'myapp' -n 'myapp'
    

    設定應用程式參數值

    az webapp config appsettings set -g 'myapp' -n 'myapp' --settings 'APPINSIGHTS_INSTRUMENTATIONKEY=2e938371-xxxx-xxxx-xxxx-cf43f85f91ac'
    az webapp config appsettings set -g 'myapp' -n 'myapp' --settings 'APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=2e938371-xxxx-xxxx-xxxx-cf43f85f91ac;IngestionEndpoint=https://eastasia-0.in.applicationinsights.azure.com/'
    az webapp config appsettings set -g 'myapp' -n 'myapp' --settings 'WEBSITE_NODE_DEFAULT_VERSION=6.9.1'
    

    刪除應用程式參數

    az webapp config appsettings delete -g 'myapp' -n 'myapp' --setting-names 'WEBSITE_NODE_DEFAULT_VERSION' 'aaa'
    

    az webapp config appsettings

  5. 設定 Azure Web App 資料庫連接字串

    列出目前有多少資料庫連接字串

    az webapp config connection-string list -g 'myapp' -n 'myapp'
    

    設定資料庫連接字串

    az webapp config connection-string set -g 'myapp' -n 'myapp' -t 'SQLServer' --settings DefaultConnection='Server=ip.add.re.ss;Database=myDataBase;User Id=myUsername;Password=myPassword;MultipleActiveResultSets=true'
    

    刪除資料庫連接字串

    az webapp config connection-string delete -g 'myapp' -n 'myapp' --setting-names 'DefaultConnection'
    

    az webapp config connection-string

  6. 取得 Azure Web App 發行設定檔

    az webapp deployment list-publishing-profiles -g 'myapp' -n 'myapp' --xml > /mnt/g/myapp.pubxml
    

    az webapp deployment

建立 Azure SQL Database 測試資料庫

  1. 建立 Azure SQL Server 資料庫伺服器

    az sql server create -l 'eastasia' -g 'myapp' -n 'myapp-dbs' -u 'myapp' -p '9gZ8TCzsYzVf'
    

    取得 Azure SQL Server 完整屬性清單

    az sql server show -g 'myapp' -n 'myapp-dbs' -o json
    az sql server show -g 'myapp' -n 'myapp-dbs' -o json | jq '.fullyQualifiedDomainName' -r
    

    重新設定預設管理員密碼

    az sql server update -g 'myapp' -n 'myapp-dbs' -p '9gZ8TCzsYzVf'
    

    az sql server

  2. 列出 Azure SQL Database 所有資料庫等級 (Service Objective)

    az sql db list-editions --location eastasia --output table -a -d
    az sql db list-editions --location eastasia --output table --edition Basic
    az sql db list-editions --location eastasia --output table --edition Standard
    az sql db list-editions --location eastasia --output table --edition Premium
    az sql db list-editions --location eastasia --output table --edition GeneralPurpose
    

    az sql db list-editions

  3. 建立 Azure SQL Database 資料庫

    az sql db create -g 'myapp' -s 'myapp-dbs' -n 'myappDiscountDev' \
        --service-objective 'Basic' \
        --backup-storage-redundancy 'Local'
    

    az sql db

  4. 建立新的管理者登入帳號

    USE [myapp]
    GO
    CREATE LOGIN [myapp_admin] WITH PASSWORD=N'68SKYPPBGrws'
    GO
    
    USE [myapp]
    GO
    CREATE USER [myapp_admin] FOR LOGIN [myapp_admin]
    GO
    ALTER ROLE [db_owner] ADD MEMBER [myapp_admin]
    GO
    
  5. 建立新的網站使用者登入帳號

    USE [master]
    GO
    CREATE LOGIN [myapp_user] WITH PASSWORD=N'Thw2DEahZPc9'
    GO
    
    USE [myapp]
    GO
    CREATE USER [myapp_user] FOR LOGIN [myapp_user]
    GO
    ALTER ROLE [db_owner] ADD MEMBER [myapp_user]
    GO
    
    CREATE USER [myapp_user] FOR LOGIN [myapp_user]
    ALTER ROLE [db_datareader] ADD MEMBER [myapp_user]
    ALTER ROLE [db_datawriter] ADD MEMBER [myapp_user]
    
    CREATE ROLE db_executor
    GRANT EXECUTE TO db_executor
    ALTER ROLE [db_executor] ADD MEMBER [myapp_user]
    

建立 Azure Storage 服務

  1. 建立 Azure Storage 儲存體帳戶

    az storage account create -g 'myapp' -n 'myappstorage' -l 'eastasia' --sku Standard_LRS
    

    取得 Azure Storage Account 完整屬性清單

    az storage account show -g 'myapp' -n 'myappstorage' -o json
    

    az storage account

  2. 建立 Blob 容器

    az storage container create -n 'files' --account-name 'myappstorage' --public-access 'off'
    az storage container create -n 'files' --account-name 'myappstorage' --public-access 'blob'
    az storage container create -n 'files' --account-name 'myappstorage' --public-access 'conainer'
    

    az storage container

  3. 取得 Azure Storage 儲存體帳戶金鑰 (Account Key)

    az storage account keys list -g 'myapp' --account-name 'myappstorage' -o json
    

    az storage account keys

  4. 建立 Azure Storage 特定容器的 SAS Token

    az storage blob generate-sas \
      --account-name 'myappstorage' \
      --account-key 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX+LSBqQtRk7Rhrd46RpidW25IbwSrg6D1AP9oL+/2W2gOht6XVBnBgb5bg==' \
      --container-name 'files' \
      --name '' \
      --permissions r \
      --expiry 2021-09-15 --https-only
    

    az storage account keys

  5. 建立 Azure Storage 特定容器與特定檔案的 SAS Token

    az storage blob generate-sas \
      --account-name 'myappstorage' \
      --account-key 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX+LSBqQtRk7Rhrd46RpidW25IbwSrg6D1AP9oL+/2W2gOht6XVBnBgb5bg==' \
      --container-name 'files' \
      --name 'folder1/abc.txt' \
      --permissions r \
      --expiry 2021-09-15 --https-only
    

    az storage account keys

相關連結