Szybki start: tworzenie i wdrażanie zasobów Azure Functions przy użyciu Bicep

W tym artykule użyjesz Azure Functions z aplikacją Bicep, aby utworzyć aplikację funkcji i powiązane zasoby na platformie Azure. Aplikacja funkcji udostępnia kontekst wykonywania dla wykonywania kodu funkcji.

Ukończenie tego przewodnika Szybki start wiąże się z niewielkimi kosztami w wysokości kilku centów lub mniej na koncie platformy Azure.

Bicep to język specyficzny dla domeny (DSL), który używa składni deklaratywnej do wdrażania zasobów platformy Azure. Zapewnia zwięzłą składnię, niezawodne bezpieczeństwo typów i obsługę ponownego użycia kodu. Bicep oferuje najlepsze środowisko tworzenia dla rozwiązań infrastruktury jako kodu na platformie Azure.

Po utworzeniu aplikacji funkcji można wdrożyć Azure Functions kod projektu w tej aplikacji.

Wymagania wstępne

Konto platformy Azure

Przed rozpoczęciem musisz mieć konto platformy Azure z aktywną subskrypcją. Utwórz bezpłatne konto.

Przejrzyj plik Bicep

Plik Bicep używany w tym przewodniku Szybki start pochodzi z szablonów szybkiego startu platformy Azure.

@description('The name of the function app that you wish to create.')
param appName string = 'fnapp${uniqueString(resourceGroup().id)}'

@description('Storage Account type')
@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
])
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

@description('Location for Application Insights')
param appInsightsLocation string

@description('The language worker runtime to load in the function app.')
@allowed([
  'node'
  'dotnet'
  'java'
])
param runtime string = 'node'

var functionAppName = appName
var hostingPlanName = appName
var applicationInsightsName = appName
var storageAccountName = '${uniqueString(resourceGroup().id)}azfunctions'
var functionWorkerRuntime = runtime

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'Storage'
  properties: {
    supportsHttpsTrafficOnly: true
    defaultToOAuthAuthentication: true
  }
}

resource hostingPlan 'Microsoft.Web/serverfarms@2021-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'Y1'
    tier: 'Dynamic'
  }
  properties: {}
}

resource functionApp 'Microsoft.Web/sites@2021-03-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    serverFarmId: hostingPlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'AzureWebJobsStorage'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
          value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'WEBSITE_CONTENTSHARE'
          value: toLower(functionAppName)
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: functionWorkerRuntime
        }
      ]
      ftpsState: 'FtpsOnly'
      minTlsVersion: '1.2'
    }
    httpsOnly: true
  }
}

resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: applicationInsightsName
  location: appInsightsLocation
  kind: 'web'
  properties: {
    Application_Type: 'web'
    Request_Source: 'rest'
  }
}

Następujące cztery zasoby platformy Azure są tworzone przez ten plik Bicep:

Ważne

Konto magazynu służy do przechowywania ważnych danych aplikacji, czasami w tym samego kodu aplikacji. Należy ograniczyć dostęp z innych aplikacji i użytkowników do konta magazynu.

Wdrażanie pliku Bicep

  1. Zapisz plik Bicep jako main.bicep na komputerze lokalnym.

  2. Wdróż plik Bicep przy użyciu interfejsu wiersza polecenia platformy Azure lub Azure PowerShell.

    az group create --name exampleRG --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep --parameters appInsightsLocation=<app-location>
    

    Uwaga

    Zastąp <lokalizację> aplikacji regionem usługi Application Insights, który jest zwykle taki sam jak grupa zasobów.

    Po zakończeniu wdrażania powinien zostać wyświetlony komunikat informujący o pomyślnym wdrożeniu.

Weryfikowanie wdrożenia

Użyj interfejsu wiersza polecenia platformy Azure lub Azure PowerShell, aby zweryfikować wdrożenie.

az resource list --resource-group exampleRG

Odwiedź stronę powitalną aplikacji funkcji

  1. Użyj danych wyjściowych z poprzedniego kroku weryfikacji, aby pobrać unikatową nazwę utworzoną dla aplikacji funkcji.

  2. Otwórz przeglądarkę i wprowadź następujący adres URL: <https://< appName.azurewebsites.net>. Pamiętaj, aby zastąpić <ciąg \appName> unikatową nazwą utworzoną dla aplikacji funkcji.

    Po wyświetleniu adresu URL powinna zostać wyświetlona strona podobna do następującej:

    Strona powitalna aplikacji funkcji

Czyszczenie zasobów

Jeśli przejdziesz do następnego kroku i dodasz powiązanie wyjściowe kolejki usługi Azure Storage, zachowaj wszystkie zasoby na swoim miejscu, ponieważ będziesz opierać się na tym, co zostało już zrobione.

W przeciwnym razie, jeśli nie potrzebujesz już zasobów, użyj interfejsu wiersza polecenia platformy Azure, programu PowerShell lub Azure Portal, aby usunąć grupę zasobów i jej zasoby.

az group delete --name exampleRG

Następne kroki

Po utworzeniu zasobów aplikacji funkcji na platformie Azure możesz wdrożyć kod w istniejącej aplikacji przy użyciu jednego z następujących narzędzi: