設定儲存體和資料庫

已完成

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

從工作流程設定資料庫

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

使用 Azure SQL 時,您必須連線至資料庫伺服器,並使用 SQL 指令碼執行命令,以套用資料庫結構描述。 這些命令是資料平面作業。 工作流程需要向資料庫伺服器驗證,然後執行指令碼。 GitHub Actions 提供 azure/sql-action 動作,可連線至 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 showing a workflow uploading and then referring to an artifact named 'database'.

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

但在 Azure SQL 資料庫中,或在另一個不自動以等冪方式運作的儲存體服務中,建立樣本資料時,最好將指令碼撰寫成只在資料不存在時才建立資料。

也請務必考慮是否可能需要復原部署,例如重新執行舊版的部署工作流程。 復原對資料的變更可能變得很複雜,因此如果您需要允許復原,請仔細考慮解決方案會如何運作。

網路安全性

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

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

網路限制對資料庫來說很常見,因為乍看之下,似乎網際網路上不需要任何項目就能連線至資料庫伺服器。

不過,網路限制也可能會讓部署工作流程難以搭配資源的資料平面使用。 使用 GitHub 裝載的執行器時,並無法輕易得知其 IP 位址,且該 IP 可能是指派自大型的 IP 位址集區。 此外,GitHub 裝載的執行器並無法連線到您自己的虛擬網路。

協助您執行資料平面作業的一些動作可以解決這些問題。 例如,azure/sql-action 動作:

Diagram illustrating the firewall update process.

透過 azure/sql-action 動作來處理 Azure SQL 邏輯伺服器或資料庫時,其會使用您的工作負載身分識別 來連線至 Azure SQL 邏輯伺服器的控制平面。 其還會更新防火牆,以允許執行器從其 IP 位址存取伺服器。 然後,其就可以成功提交 DACPAC 檔案或指令碼來執行。 該動作會在完成時自動移除防火牆規則。

在其他情況下,不可能創造像這樣的例外情況。 在這些情況下,請考慮使用「自我裝載式執行器」,其會在您控制的虛擬機器或其他計算資源上執行。 然後,您可以依需求來設定此執行器。 其可以使用已知的 IP 位址,也可以連線至您自己的虛擬網路。 我們並不會在此課程模組中討論自我裝載式執行器,但我們已在課程模組結尾的<摘要>頁面上提供詳細資訊的連結。

您的部署工作流程

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

Diagram showing the revised workflow, including a new database build job, a database deployment job, and data seeding jobs in the test environment.