Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Functions bietet integrierte Unterstützung für die Entwicklung, Bereitstellung und Verwaltung von containerisierten Funktions-Apps in Azure-Container-Apps. Verwenden Sie Azure Container-Apps für Ihre Funktionen-Apps, wenn Sie in derselben Umgebung wie andere Microservices, APIs, Websites, Workflows oder in container gehosteten Programmen ausgeführt werden müssen. Erfahren Sie mehr über das Ausführen von Azure-Funktionen in Container-Apps.
Hinweis
Während Durable Functions mehrere Speicheranbieter oder Back-Ends unterstützt, ist die automatische Skalierung von Apps, die in Azure Container Apps gehostet werden, nur mit dem Microsoft SQL (MSSQL)-Back-End verfügbar. Wenn ein anderes Back-End verwendet wird, müssen Sie die Mindestreplikatanzahl auf größer als 0 festlegen.
In diesem Artikel erfahren Sie, wie Sie:
- Erstellen Sie ein Docker-Image aus einem lokalen Projekt für dauerhafte Funktionen.
- Erstellen Sie eine Azure-Container-App und zugehörige Ressourcen.
- Stellen Sie das Image in der Azure-Container-App bereit, und richten Sie die Authentifizierung ein.
Voraussetzungen
- Installation von Visual Studio Code.
- .NET 8.0 SDK.
- Docker - und Docker-ID
- Azure CLI, Version 2.47 oder höher.
- Azure Functions Core Tools
- Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
- Ein HTTP-Testtool, das Ihre Daten schützt. Weitere Informationen finden Sie unter HTTP-Testtools.
Lokales Projekt für Durable Functions erstellen
Erstellen Sie in Visual Studio Code ein .NET-Projekt für isolierte dauerhafte Funktionen, das für die Verwendung des MSSQL-Back-End konfiguriert ist.
Testen Sie die App lokal , und kehren Sie zu diesem Artikel zurück.
Hinzufügen von Docker-bezogenen Dateien
Erstellen Sie eine Dockerfile-Datei im Projektstamm, die die mindest erforderliche Umgebung zum Ausführen der Funktions-App in einem Container beschreibt.
Erstellen Sie im Projektstammverzeichnis eine neue Datei mit dem Namen Dockerfile.
Kopieren/einfügen Sie den folgenden Inhalt in die Dockerfile-Datei.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env COPY . /src/dotnet-function-app RUN cd /src/dotnet-function-app && \ mkdir -p /home/site/wwwroot && \ dotnet publish *.csproj --output /home/site/wwwroot # To enable ssh & remote debugging on app service change the base image to the one below # FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]Speichern Sie die Datei.
Fügen Sie eine Dockerignore-Datei mit dem folgenden Inhalt hinzu:
local.settings.jsonSpeichern Sie die Dockerignore-Datei .
Erstellen des Containerimages
Erstellen Sie das Docker-Image. Finden Sie die vollständige Liste der unterstützten Basisimages für Azure Functions in der Azure Functions Base von Microsoft | Docker Hub
Starten Sie den Docker-Daemon.
Melden Sie sich mit dem
docker loginBefehl bei Docker an.Wenn Sie dazu aufgefordert werden, melden Sie sich mit Ihrem Benutzernamen und Kennwort an. Eine Meldung "Anmeldung erfolgreich" bestätigt, dass Sie angemeldet sind.
Navigieren Sie zu Ihrem Projektstammverzeichnis.
Führen Sie den folgenden Befehl aus, um das Image zu erstellen und durch Ihre Docker Hub-Konto-ID zu ersetzen
<DOCKER_ID>:dockerId=<DOCKER_ID> imageName=IMAGE_NAME> imageVersion=v1.0.0 docker build --tag $dockerId/$imageName:$imageVersion .Hinweis
Wenn Sie einen Mac der M-Serie verwenden, verwenden Sie stattdessen
--platform linux/amd64.Übertragen Sie das Image an Docker:
docker push $dockerId/$imageName:$imageVersionJe nach Netzwerkgeschwindigkeit kann der anfängliche Bild-Push einige Minuten dauern. Während Sie warten, fahren Sie mit dem nächsten Abschnitt fort.
Erstellen von Azure-Ressourcen
Erstellen Sie die Azure-Ressourcen, die zum Ausführen dauerhafter Funktionen in einer Container-App erforderlich sind.
- Azure-Ressourcengruppe: Ressourcengruppe mit allen erstellten Ressourcen.
- Azure Container App-Umgebung: Umgebung, in der die Container-App gehostet wird.
- Azure-Container-App: Image, das die App „Durable Functions“ enthält, wird in dieser App bereitgestellt.
- Azure Storage-Konto: Erforderlich von der Funktions-App zum Speichern von App-bezogenen Daten, z. B. Anwendungscode.
Anfängliche Einrichtung
Melden Sie sich in einem neuen Terminal bei Ihrem Azure-Abonnement an:
az login az account set -s <subscription_name>Führen Sie die erforderlichen Befehle aus, um die Azure Container Apps CLI-Erweiterung einzurichten:
az upgrade az extension add --name containerapp --upgrade az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Erstellen einer Container-App und zugehöriger Ressourcen
Ein Workloadprofil bestimmt die Menge an Compute- und Arbeitsspeicherressourcen, die für die in einer Umgebung bereitgestellten Container-Apps verfügbar sind. Erstellen Sie ein Verbrauchsworkloadprofil für Unterstützung der Skalierung auf Null und nutzungsbasierte Bezahlung.
Festlegen der Umgebungsvariablen.
location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> containerAppEnv=<CONTAINER_APP_ENVIRONMNET_NAME> functionApp=<APP_NAME> vnet=<VNET_NAME>Erstellen Sie eine Ressourcengruppe.
az group create --name $resourceGroup --location $locationErstellen Sie die Container-App-Umgebung.
az containerapp env create \ --enable-workload-profiles \ --resource-group $resourceGroup \ --name $containerAppEnv \ --location $location \Erstellen Sie eine Container-App basierend auf dem Image "Dauerhafte Funktionen".
az containerapp create --resource-group $resourceGroup \ --name $functionApp \ --environment $containerAppEnv \ --image $dockerId/$imageName:$imageVersion \ --ingress external \ --kind functionapp \ --query properties.outputs.fqdnNotieren Sie sich die App-URL, die ähnlich aussehen soll.
https://<APP_NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io
Erstellen von Datenbanken
Erstellen Sie ein Azure Storage-Konto, das von der Funktions-App benötigt wird.
az storage account create --name $storage --location $location --resource-group $resourceGroup --sku Standard_LRSErstellen Sie im Azure-Portal eine Azure SQL-Datenbank , um Statusinformationen beizubehalten. Während der Erstellung:
- Aktivieren von Azure-Diensten und -Ressourcen für den Zugriff auf diesen Server (unter Netzwerk)
- Legen Sie den Wert für die Datenbanksortierung (unter zusätzlichen Einstellungen) auf
Latin1_General_100_BIN2_UTF8.
Hinweis
Verzichten Sie darauf, die Einstellung Zulassen, dass Azure-Dienste und -Ressourcen auf diesen Server zugreifen für produktive Szenarien zu aktivieren. Produktionsanwendungen sollten sicherere Ansätze implementieren, z. B. stärkere Firewalleinschränkungen oder konfigurationen virtueller Netzwerke.
Konfigurieren der identitätsbasierten Authentifizierung
Verwaltete Identitäten machen Ihre App sicherer, indem geheime Schlüssel aus Ihrer App entfernt werden, z. B. Anmeldeinformationen in den Verbindungszeichenfolgen. Sie können zwar zwischen der vom System zugewiesenen und der vom Benutzer zugewiesenen verwalteten Identität wählen, die vom Benutzer zugewiesene verwaltete Identität wird jedoch empfohlen, da sie nicht an den App-Lebenszyklus gebunden ist.
In diesem Abschnitt richten Sie die vom Benutzer zugewiesene verwaltete Identität für Azure Storage ein.
Festlegen der Umgebungsvariablen.
subscription=<SUBSCRIPTION_ID> identity=<IDENTITY_NAME>Erstellen Sie eine verwaltete Identitätsressource.
echo "Creating $identity" az identity create -g $resourceGroup -n $identity --location "$location"Weisen Sie der Container-App die Benutzeridentität zu.
echo "Assigning $identity to app" az containerapp identity assign --resource-group $resourceGroup --name $functionApp --user-assigned $identityLegen Sie den Bereich der rollenbasierten Zugriffssteuerungsberechtigungen (RBAC) fest.
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"Rufen Sie
clientIdder Benutzeridentität ab.# Get the identity's ClientId clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)Weisen Sie die Rolle " Storage Blob Data Owner " für den Zugriff auf das Speicherkonto zu.
echo "Assign Storage Blob Data Owner role to identity" az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
Einrichten von App-Einstellungen
Hinweis
Die Authentifizierung bei der MSSQL-Datenbank mit verwalteter Identität wird beim Hosten einer App für dauerhafte Funktionen in Azure Container-Apps nicht unterstützt. Derzeit erfolgt die Authentifizierung in dieser Anleitung mithilfe von Verbindungszeichenfolgen.
Navigieren Sie von der SQL-Datenbankressource im Azure-Portal zu Einstellungen>Verbindungszeichenfolgen, um die Verbindungszeichenfolge zu finden.
Die Verbindungszeichenfolge sollte ein ähnliches Format aufweisen wie:
dbserver=<SQL_SERVER_NAME> sqlDB=<SQL_DB_NAME> username=<DB_USER_LOGIN> password=<DB_USER_PASSWORD> connStr="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$sqlDB;Persist Security Info=False;User ID=$username;Password=$password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"Wenn Sie das Kennwort aus dem vorherigen Datenbankerstellungsschritt vergessen haben, können Sie es auf der SQL Server-Ressource zurücksetzen.
Speichern Sie die Verbindungszeichenfolge der SQL-Datenbank als geheimer Schlüssel namens "sqldbconnection " in der Container-App.
az containerapp secret set \ --resource-group $resourceGroup \ --name $functionApp \ --secrets sqldbconnection=$connStrFügen Sie der App die folgenden Einstellungen hinzu:
az containerapp update \ -n $functionApp \ -g $resourceGroup \ --set-env-vars SQLDB_Connection=secretref:sqldbconnection \ AzureWebJobsStorage__accountName=$storage \ AzureWebJobsStorage__clientId=$clientId \ AzureWebJobsStorage__credential=managedidentity \ FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
Lokales Testen
Verwenden Sie ein HTTP-Testtool, um eine
POSTAnforderung an den HTTP-Triggerendpunkt zu senden, was ähnlich sein sollte:https://<APP NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io/api/DurableFunctionsOrchestrationCSharp1_HttpStartDie Antwort ist das anfängliche Ergebnis der HTTP-Funktion, das Sie darüber informiert, dass die Permanent Functions-Orchestrierung erfolgreich gestartet wurde. Während die Antwort einige nützliche URLs enthält, wird das Endergebnis der Orchestrierung noch nicht angezeigt.
Kopieren Sie den URL-Wert für
statusQueryGetUriund fügen Sie ihn in die Adressleiste Ihres Browsers ein und drücken Sie die Eingabetaste. Alternativ können Sie weiterhin das HTTP-Testtool verwenden, um dieGETAnforderung ausstellen zu können.Die Anforderung fragt die Orchestrierungsinstanz der Status ab. Ihnen sollten die Information, dass die Instanz fertiggestellt wurde, sowie die Ausgaben oder Ergebnisse der Durable Functions-App angezeigt werden.
{ "name":"HelloCities", "instanceId":"7f99f9474a6641438e5c7169b7ecb3f2", "runtimeStatus":"Completed", "input":null, "customStatus":null, "output":"Hello, Tokyo! Hello, London! Hello, Seattle!", "createdTime":"2023-01-31T18:48:49Z", "lastUpdatedTime":"2023-01-31T18:48:56Z" }
Nächste Schritte
Weitere Informationen zu:
- Azure Container Apps-Hosting von Azure Functions.
- MSSQL-Speicheranbieterarchitektur , Konfiguration und Workloadverhalten.
- Das von Azure verwaltete Speicher-Back-End, durable Task Scheduler.