將現有系統發佈到Azure marketplace

上架商業市集

 

請參考下面資訊和模板範本將現有系統發佈到Azure marketplace

可以通過部署 Solution template 到 Azure Marketplace 實現將 IAAS 發佈至 Azure

請參考:

Plan a solution template for an Azure application offer | Microsoft Docs

此種部署方式最重要的部分是客制下面兩個json 檔

mainTemplate.json】 實際就是ARM template

參考:

Publish service catalog managed app – Azure Managed Applications | Microsoft Docs

 

 

createUiDefinition.json】用於客制化用戶部署時看到的頁面用於提供用戶輸入ARM Template 的必要參數,

portal 有提供可視化 UI 協助設計這個 json 檔,相對簡單

參考:

CreateUiDefinition.json file for portal pane – Azure Managed Applications | Microsoft Docs

 

最重要的是 【mainTemplate.json

主要參考下面幾個鏈接來製作

參考:

azure-quickstart-templates/quickstarts/microsoft.web/web-app-vm-dsc at master · Azure/azure-quickstart-templates (github.com)

 

azure-quickstart-templates/quickstarts/microsoft.sqlvirtualmachine/sql-vm-new-storage at master · Azure/azure-quickstart-templates (github.com)

 

Create SQL Server VM using an ARM template – SQL Server on Azure VMs | Microsoft Docs

Desired State Configuration extension with Azure Resource Manager templates – Azure Virtual Machines | Microsoft Docs

 

基本原理:

基於官方鏡像部署標磚SQL Server,然後基於VM 的DSC 擴展通過PowerShell 執行sqlcmd 運行SQL 初始化資料庫,並下載部署Web site package

同時部署NSG rule 開啓3389(爲了測試,實際部署可以刪除此隊則),80,443 端口的公網訪問

 

相關範例

l

ARM template 參數,可以結合mainTemplate.json.json 進行測試

下載地址

https://ericshare.blob.core.windows.net/dsc/azuredeploy.parameters.json

l

ARM template ,用於部署VM+SQL+DSC+NSG 開啓ports

下載地址

https://ericshare.blob.core.windows.net/dsc/mainTemplate.json.json

l

範例UI 定義文件

下載地址

https://ericshare.blob.core.windows.net/dsc/createUiDefinition.json

l

DSC 脚本,請將powershell package zip獲得,然後上傳到自己的位置, 對應的就是createUiDefinition.json/azuredeploy.parameters.json 中的這個參數modulesUrl

將執行初始化資料庫,下載安裝web deploy package,請根據實際修改powershell

下載地址

https://ericshare.blob.core.windows.net/dsc/ConfigureWebServer.zip

 

請特別注意如下高亮部分DSC 包含的設定

1. WebDeploy 改爲較官方範例更改為直接通過 MSI 安裝,通過 WPI  安裝 WebDeploy 實測2019 上會發生報錯

2. SQL 最後加上 EXIT 避免部署 DSC 長時間卡住

Package WebDeploy_Installation

        {

            Ensure = “Present”

            Name = “Microsoft Web Deploy 3.6”

            Path = https://download.microsoft.com/download/0/1/D/01DC28EA-638C-4A22-A57B-4CEF97755C6C/WebDeploy_amd64_en-US.msi

            ProductId = ‘6773A61D-755B-4F74-95CC-97920E45E696’

            Arguments = “LicenseAccepted=’0′ ADDLOCAL=ALL”

        }

Script DeployWebPackage

       {

              GetScript = {

            @{

                Result = “”

            }

        }

        TestScript = {

$false

        }

        SetScript ={

#初始化資料庫

$initSQL = ”

        CREATE DATABASE [$using:DbName]

        GO

        USE [$using:DbName]

        GO

        CREATE TABLE [dbo].[demo_table](

           ID   INT              NOT NULL,

           NAME VARCHAR (20)     NOT NULL,

           AGE  INT              NOT NULL,

           ADDRESS  CHAR (25) ,

           SALARY   DECIMAL (18, 2),      

           PRIMARY KEY (ID)

        )

        GO

EXIT

        ”

$initSQL | Out-File -filepath C:\WindowsAzure\initSQL.txt -append -width 200

sqlcmd -S “$using:DbServerName” -U “$using:DbUserName” -P “$using:DbPassword” -q $initSQL

#下載部署WEB Site

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

$WebClient = New-Object -TypeName System.Net.WebClient

$Destination= “C:\WindowsAzure\WebApplication.zip”

$WebClient.DownloadFile($using:WebDeployPackagePath,$destination)

$ConnectionStringName = “DefaultConnection-Web.config Connection String”

$ConnectionString = “Server=tcp:”+ “$using:DbServerName” + “,1433;Database=” + “$using:DbName” + “;User ID=” + “$using:DbUserName”+”;Password=” + “$using:DbPassword”+ “;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;”

$ConnectionString | Out-File -filepath C:\WindowsAzure\outfile.txt -append -width 200

$Argument = ‘-source:package=”C:\WindowsAzure\WebApplication.zip”‘ + ‘ -dest:auto,ComputerName=”localhost”,’+”username=$using:UserName” +”,password=$using:Password” + ‘ -setParam:name=”‘ + “$ConnectionStringName” + ‘”‘+’,value=”‘ + “$ConnectionString” + ‘” -verb:sync -allowUntrusted’

$MSDeployPath = (Get-ChildItem “HKLM:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy” | Select -Last 1).GetValue(“InstallPath”)

Start-Process “$MSDeployPath\msdeploy.exe” $Argument -Verb runas

        }

       }

 

參考:

Provisioning WebDeploy in VSTS/TFS release via DSC script – Mummy’s blog (majcica.com)

Deploying Web Packages | Microsoft Docs

l 需要部署的web deploy package ,可以替換成自己的zip ,對應的就是createUiDefinition.json/azuredeploy.parameters.json 中的這個參數webdeploypkg

下載地址

https://ericshare.blob.core.windows.net/dsc/WebApplication3.zip

 

參照azuredeploy.parameters.json& mainTemplate.json.json 這兩個範例

測試ARM template

 

如何部署ARM Template請參考:

Deploy resources with Azure portal – Azure Resource Manager | Microsoft Docs

我側測試截圖

clip_image002

部署完成后,RDP 登入VM, 發現資料庫和站點也初始化成功,并且數據庫鏈接也有正確設定

clip_image004

clip_image006

 

確認Template 可以正常運作后,和createUiDefinition.json package 成zip

然後參考下面兩個鏈接逐步創建並上載並發佈Solution template zip 即可

參考:

在 Azure Marketplace 中建立 Azure 應用程式供應專案 | Microsoft Docs

設定解決方案範本方案 | Microsoft Docs

測試及發佈 Azure 應用程式供應項目 | Microsoft Docs

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *