設定儲存體和資料庫

已完成

部署程序通常會要求您連線至資料庫或儲存體服務。 此連線對於套用資料庫結構描述、將一些參考資料新增至資料庫資料表,或上傳某些 Blob 而言可能是必要的。 在本單元中,您會了解如何延伸管線來使用資料和儲存體服務。

從管線設定資料庫

許多資料庫都有「結構描述」,其代表資料庫所含資料的結構。 通常最好從部署管線將結構描述套用至資料庫。 此做法有助於確保同時部署解決方案所需的一切。 此做法也能在套用結構描述時發生問題的情況下,確保工作流程會顯示錯誤。 該錯誤可讓您修正問題並重新部署。

使用 Azure SQL 時,您必須連線至資料庫伺服器,並使用 SQL 指令碼執行命令,以套用資料庫結構描述。 這些命令是資料平面作業。 管線需要向資料庫伺服器驗證,然後執行指令碼。 Azure Pipelines 提供 SqlAzureDacpacDeployment 工作,可連線至 Azure SQL 資料庫伺服器並執行命令。

有些其他資料和儲存體服務不需要由資料平面 API 來設定。 例如,使用 Azure Cosmos DB 時,您會將資料儲存在「容器」中。 您可以直接從 Bicep 檔案內,使用控制平面來設定容器。 同樣地,您也可以在 Bicep 內部署和管理 Azure 儲存體 Blob 容器的多數層面。 在下一個練習中,將會示範如何從 Bicep 建立 Blob 容器。

新增資料

對於許多解決方案來說,在其能夠運作之前,必須先將參考資料新增至其資料庫或儲存體帳戶。 管線中很適合新增此資料。 管線執行之後,環境便完整設定,且立即可用。

在資料庫中放一些樣本資料也會很有幫助,特別是在非生產環境中。 範例資料可協助測試人員和其他使用那些環境的人,可以立即測試您的解決方案。 此資料可能包括範例產品,以及虛構的使用者帳戶之類的內容。 通常不建議將此資料新增至生產環境。

新增資料的方法取決於您使用的服務。 例如:

  • 若要將資料新增至 Azure SQL 資料庫,您需要執行指令碼,這和設定結構描述很相似。
  • 若要將資料插入 Azure Cosmos DB 中,您必須存取其資料平面 API,這可能需要您撰寫一些自訂指令碼程式碼。
  • 若要將 Blob 上傳至 Azure 儲存體 Blob 容器,您可以從管線指令碼使用多種不同的工具,包括 AzCopy 命令列應用程式、Azure PowerShell 或 Azure CLI。 這些工具都知道如何代表您向 Azure 儲存體進行驗證,以及如何連線至資料平面 API 來上傳 Blob。

等冪性

部署管線和基礎結構即程式碼的特性之一是能夠反覆重新部署,而不會有任何不良副作用。 例如,當您重新部署先前已部署的 Bicep 檔案時,Azure Resource Manager 會比較您提交的檔案與 Azure 資源的現有狀態。 如果沒有變更,Resource Manager 不會執行任何動作。 能夠反覆重新執行作業的能力,稱為「等冪性」。 最好確定指令碼和其他管線步驟是等冪。

與資料服務互動時,因為會維持狀態,等冪性特別重要。 假設您從管線將範例使用者插入資料庫資料表。 如果不注意,則每次執行管線就會建立新的範例使用者。 此結果可能非您所願。

將結構描述套用至 Azure SQL 資料庫時,您可以使用資料封裝 (又稱為 DACPAC 檔案) 來部署結構描述。 管線會從原始程式碼組建 DACPAC 檔案,並建立管線成品,就像使用應用程式一樣。 然後,管線中的部署階段會將 DACPAC 檔案發佈至資料庫:

Diagram that shows a pipeline publishing and then referring to an artifact named database.

部署 DACPAC 檔案時,它會以等冪方式運作。 它會比較資料庫的目標狀態與封裝中定義的狀態。 在許多情況下,這表示您不需要撰寫遵循等冪原則的指令碼,因為工具會替您處理。 Azure Cosmos DB 和 Azure 儲存體的某些工具也正確運作。

但是,當您在 Azure SQL 資料庫中建立範例資料,或未以等冪方式自動運作的另一個儲存體服務時。 撰寫指令碼是很好的作法,因此只有在資料不存在時,才會建立資料。

也請務必考量是否可能需要復原部署,例如重新執行舊版的部署管線。 復原對資料的變更可能變得很複雜,因此如果您需要復原,請仔細考量解決方案的運作方式。

網路安全性

有時候,您可能會將網路限制套用至某些 Azure 資源。 這些限制可以強制執行對資源的資料平面所提出之要求的相關規則,例如:

  • 只能從指定的 IP 位址清單存取此資料庫伺服器。
  • 只能從部署在特定虛擬網路內的資源存取此儲存體帳戶。

網路限制對資料庫來說很常見,因為網際網路上似乎沒有任何項目需要連線至資料庫伺服器。

不過,網路限制也可能讓部署管線難以使用資源的資料平面。 使用 Microsoft 代管的管線代理程式時,可能是從大型 IP 位址集區指派其 IP 位址,不易事先得知。 此外,Microsoft 代管的管線代理程式無法連線至您自己的虛擬網路。

協助您執行資料平面作業的一些 Azure Pipelines 工作可以解決這些問題。 例如,SqlAzureDacpacDeployment 工作:

Diagram that shows the firewall update process.

透過 SqlAzureDacpacDeployment 工作來處理 Azure SQL 邏輯伺服器或資料庫時,將會使用管線的服務主體,以連線至 Azure SQL 邏輯伺服器的控制平面。 還會更新防火牆,以允許管線代理程式從其 IP 位址存取伺服器。 然後,其就可以成功提交 DACPAC 檔案或指令碼來執行。 工作完成時會自動移除防火牆規則。

在其他情況下無法建立這些類型的例外狀況。 在這些情況下,請考慮使用「自我裝載管線代理程式」,這在您控制的虛擬機器或其他計算資源上執行。 然後,您可以依需求來設定此代理程式。 其可以使用已知的 IP 位址,也可以連線至您自己的虛擬網路。 本課程模組不討論自我裝載代理程式,但在課程模組結尾的「摘要」頁面上會提供詳細資訊的連結。

您的部署管線

在下一個練習中,您將更新部署管線來新增作業,以建立網站的資料庫元件、部署資料庫及新增種子資料:

Diagram showing the revised pipeline. Including, a new database build step, a database deployment step, and data seeding steps in the test environment.