建立基礎結構即程式碼

已完成

Azure Developer CLI (azd) 可以使用基礎結構即程式碼 (IaC) 以 Bicep 或 Terraform 撰寫的檔案,在 Azure 中佈建資源。 基礎結構即程式碼可讓您在宣告式定義檔案中定義基礎結構資源和設定,以在每次部署時可靠地產生相同的環境。 azd 會執行這些檔案,以建立裝載應用程式所需的 Azure 資源。 您可以在 [什麼是基礎結構即程式碼?] 檔案中深入瞭解基礎結構即程式碼。

在本單元中,您會將 Bicep 程式碼新增至範本,以布建應用程式所需的資源。 先前對 Bicep 的知識不需要完成此課程模組。 不過,如果您打算廣泛使用 azd 個範本,最好至少熟悉 Bicep 或 Terraform 的基本概念。 在 [Bicep 基本概念] 訓練路徑深入瞭解 Bicep。

範本的 Bicep 或 Terraform 檔案位於 infra 資料夾中。 您選取的 Bicep 入門範本會產生三個檔案作為起點:

  • main.bicep - 做為 Bicep 執行的主要進入點,用來定義將在 Azure 中佈建的資源。 main.bicep 檔案也可以參考其他 Bicep 模組 (檔案),讓您將資源定義擷取到更細微且可重複使用的檔案。
  • abbreviations.json - JSON 檔案,提供許多實用的命名縮寫。 此檔案會在執行期間載入 main.bicep 檔案,並提供一組不同 Azure 資源的一致邏輯命名前置詞。
  • main.parameters.json - JSON 檔案,定義重要範本參數的預設值,例如預設 Azure 位置或環境名稱。

您可以藉由更新 main.bicep 檔案並建立更多 Bicep 檔案,來定義和佈建應用程式所需的 Azure 資源。 Main.bicep 一般而言,藉由在兩者之間傳遞參數,協調其他 Bicep 模組的執行。 在此範例中,您將建立額外的 Bicep 模組,以定義將裝載應用程式的 Azure App Service。

  1. 在範本的 infra 資料夾內,建立名為 app.bicep 的新檔案。

  2. 開啟 app.bicep 檔案,並貼上以下程式碼片段。 程式碼註解描述每個程式碼區段的用途。

    // Define parameters that can be passed into the module
    // Parameters allow a module to be reusable
    @description('The location of where to deploy resources')
    param location string
    
    @description('The name of the App Service Plan')
    param appServicePlanName string
    
    @description('The name of the App Service')
    param appServiceName string
    
    // Define the App Service Plan to manage compute resources
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      properties: {
        reserved: true
      }
      sku: {
        name: 'F1'
      }
      kind: 'linux'
    }
    
    // Define the App Service to host the application
    resource appService 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          linuxFxVersion: 'DOTNETCORE|6.0'
        }
      }
        // Tag used to reference the service in the Azure.yaml file
        tags: { 'azd-service-name': 'web' }
    }
    

    程式碼片段會完成下列工作:

    • 定義一組參數,這些參數可以傳遞至模組,使其可重複使用且可設定。 您可以選擇將資源定義中的更多值參數化,讓模組更具彈性。
    • 定義 App Service 方案來管理 App Service 執行個體的計算資源。
    • 定義 App Service 以託管部署的應用程式。

    注意

    App Service Bicep 定義中會包含 azd-service-name 標記,之後 Azure.yaml 設定檔案將用來將您的應用程式原始程式碼的資料夾與 App Service 產生關聯。

  3. 新的 Bicep 模組會為您的範本建立 App Service,但您仍然需要更新 main.bicep 以使用它。 在編輯器內找出 infra 資料夾,然後開啟 main.bicep 檔案。

    入門範本所產生的 main.bicep 檔案包含實用的設定組態。 例如,檔案會定義基本參數,例如 environmentNamelocation。 根據預設,如果這些參數包含在該檔案中,則會從 main.parameters.json 填入這些參數,但您也可以覆寫這些參數。 入門程式碼也會載入在 abbreviations.json 檔案中,使之可供使用、建立一些實用的標記和權杖來命名服務,並包含有用的註解,以協助您開始使用。

  4. main.bicep 檔案底部,找出類似下列的註解:

    // Add resources to be provisioned below.
    // A full example that leverages azd bicep modules can be seen in the todo-python-mongo template:
    // https://github.com/Azure-Samples/todo-python-mongo/tree/main/infra
    

    此預留位置註解會醒目提示要包含您想要佈建的任何其他資源的位置。 我們想要包含您為 App Service 建立的 Bicep 模組,因此請在註解後面直接貼上下列程式碼片段:

    module web 'app.bicep' = {
      name: '${deployment().name}-app'
      scope: rg
      params: {
        location: location
        appServiceName: '${abbrs.webSitesAppService}${resourceToken}'
        appServicePlanName: '${abbrs.webServerFarms}${resourceToken}'
      }
    }
    

    程式碼片段會完成下列工作:

    • 定義 Bicep 模組,指向您在上一個步驟中建立的檔案。
    • 將名稱指派給 Azure 部署集,並將它的範圍設定為在 main.bicep 中建立的資源群組。
    • 使用 abbreviations.json 值協助命名,將參數傳遞至模組。

應用程式原始程式碼的基礎結構檔案現在是範本的一部分。 在下一個單元中,您將新增設定,以描述 azd 部署流程的這兩個片段之間的關聯性。