Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule użyjesz lokalnych narzędzi wiersza polecenia, aby utworzyć funkcję, która odpowiada na żądania HTTP. Po zweryfikowaniu kodu lokalnie należy wdrożyć go w bezserwerowym planie hostingu Flex Consumption w usłudze Azure Functions.
Ukończenie tego szybkiego startu wiąże się z naliczeniem niewielkiej opłaty wynoszącej kilka centów USD lub mniej na koncie Azure.
Pamiętaj, aby wybrać preferowany język programowania w górnej części artykułu.
Important
Obsługa języka Go w usłudze Azure Functions jest obecnie w fazie publicznej wersji zapoznawczej. W wersji zapoznawczej aplikacje funkcji języka Go są obsługiwane tylko w planie Flex Consumption.
Prerequisites
- Konto Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
-
Java 17 Developer Kit
- Jeśli używasz innej obsługiwanej wersji języka Java, musisz zaktualizować plik pom.xml projektu.
- Zmienna
JAVA_HOMEśrodowiskowa musi być ustawiona na lokalizację instalacji poprawnej wersji zestawu Java Development Kit (JDK).
- Apache Maven 3.8.x
Przejdź do wersji 1.24 lub nowszej.
Azure Functions Core Tools w wersji
4.12lub nowszej. Uruchom poleceniefunc --version, aby sprawdzić zainstalowaną wersję.Azure CLI wersja
2.87.0lub nowsza. Uruchom polecenieaz version, aby sprawdzić zainstalowaną wersję.
- Zestaw narzędzi Rust z użyciem rustup. Użyj polecenia
rustc --version, aby sprawdzić swoją wersję.
-
jqProcesor JSON wiersza poleceń, który służy do analizowania wyników JSON, jest również dostępny w usłudze Azure Cloud Shell.
Instalowanie podstawowych narzędzi usługi Azure Functions
Zalecany sposób instalowania narzędzi Core Tools zależy od systemu operacyjnego lokalnego komputera programistycznego.
Poniższe kroki umożliwiają zainstalowanie narzędzi Core Tools w wersji 4.x za pomocą Instalatora Windows (MSI). Aby uzyskać więcej informacji na temat innych instalatorów opartych na pakietach, zobacz plik readme narzędzi Core Tools.
Pobierz i uruchom instalatora narzędzi Core Tools na podstawie używanej wersji systemu Windows:
- Wersja 4.x — windows 64-bitowy (zalecane. Debugowanie programu Visual Studio Code wymaga 64-bitowej wersji).
- v4.x - 32-bitowy Windows
Jeśli poprzednio użyto instalatora Windows (MSI) do zainstalowania narzędzi Core Tools w systemie Windows, przed zainstalowaniem najnowszej wersji należy odinstalować starą wersję z sekcji Dodaj usuń programy.
Wskazówka
Aby zainstalować narzędzia Core Tools w podsystemie Windows dla systemu Linux (WSL), postępuj zgodnie z instrukcjami na karcie Linux.
Tworzenie i aktywowanie środowiska wirtualnego
W odpowiednim folderze uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv. Upewnij się, że używasz jednej z wersji języka Python obsługiwanych przez usługę Azure Functions.
python -m venv .venv
source .venv/bin/activate
Jeśli język Python nie zainstalował pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:
sudo apt-get install python3-venv
Wszystkie kolejne polecenia są uruchamiane w tym aktywowanym środowisku wirtualnym.
Tworzenie lokalnego projektu kodu i funkcji
W usłudze Azure Functions projekt kodu to aplikacja zawierająca co najmniej jedną pojedynczą funkcję, która odpowiada na określony wyzwalacz. Wszystkie funkcje w projekcie współużytkują te same konfiguracje i są wdrażane jako jednostka na platformie Azure. W tej sekcji utworzysz projekt kodu zawierający jedną funkcję.
Uruchom polecenie ,
func initaby utworzyć projekt funkcji języka Go:func init MyGoFunctionApp --worker-runtime goTo polecenie tworzy folder projektu o nazwie
MyGoFunctionAppzawierający następujące pliki:File Description host.jsonKonfiguracja hosta dla aplikacji funkcji. local.settings.jsonUstawienia używane podczas uruchamiania lokalnego. main.goPunkt wejścia z przykładową funkcją wyzwalaną przez protokół HTTP. go.modPlik modułu Go na potrzeby zarządzania zależnościami. go.sumPlik sum kontrolnych modułu Go. Przejdź do folderu projektu:
cd MyGoFunctionAppOtwórz plik ,
main.goaby przejrzeć wygenerowany kod. Zawiera przykładową funkcję wyzwalaną przez protokół HTTP:package main import ( "log" "net/http" "github.com/azure/azure-functions-golang-worker/sdk" "github.com/azure/azure-functions-golang-worker/worker" ) // HTTPTriggerHandler handles standard HTTP requests func HTTPTriggerHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Processing HTTP Trigger for %s", r.URL.Path) w.WriteHeader(http.StatusOK) w.Write([]byte("Hello from Go Worker!")) } func main() { app := sdk.FunctionApp() app.HTTP("hello", HTTPTriggerHandler, sdk.WithMethods("GET", "POST"), sdk.WithAuth("anonymous"), ) worker.Start(app) }Funkcje języka Go używają standardowych
net/httptypów (http.ResponseWriteri*http.Request) dla wyzwalaczy HTTP. Funkcje są rejestrowane w elemenciemain()za pomocą SDK procesu roboczego Go oraz opcji funkcjonalnych, a żadne plikifunction.jsonnie są potrzebne.
W terminalu lub wierszu polecenia uruchom to
func initpolecenie, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:func init --worker-runtime dotnet-isolated
W terminalu lub wierszu polecenia uruchom to
func initpolecenie, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:func init --worker-runtime node --language javascript
W terminalu lub wierszu polecenia uruchom to
func initpolecenie, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:func init --worker-runtime powershell
W terminalu lub wierszu polecenia uruchom to
func initpolecenie, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:func init --worker-runtime python
W terminalu lub wierszu polecenia uruchom to
func initpolecenie, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:func init --worker-runtime node --language typescript
W terminalu lub wierszu polecenia uruchom to
func initpolecenie, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:func init --worker-runtime custom
W pustym folderze uruchom to
mvnpolecenie, aby wygenerować projekt kodu na podstawie archetypu narzędzia Maven usługi Azure Functions:mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17Important
- Użyj polecenia
-DjavaVersion=11, jeśli chcesz, aby funkcje działały w języku Java 11. Aby dowiedzieć się więcej, zobacz Wersje języka Java. - Ustaw zmienną
JAVA_HOMEśrodowiskową na lokalizację instalacji poprawnej wersji zestawu JDK, aby ukończyć ten artykuł.
- Użyj polecenia
Narzędzie Maven prosi o podanie wartości potrzebnych do zakończenia generowania projektu we wdrożeniu.
Po wyświetleniu monitu podaj następujące wartości:Prompt Value Description groupId com.fabrikamWartość, która jednoznacznie identyfikuje projekt we wszystkich projektach, zgodnie z regułami nazewnictwa pakietów dla języka Java. artifactId fabrikam-functionsWartość, która jest nazwą pliku jar bez numeru wersji. version 1.0-SNAPSHOTWybierz wartość domyślną. package com.fabrikamWartość, która jest pakietem Java dla wygenerowanego kodu funkcji. Użyj wartości domyślnej. Wpisz
Ylub naciśnij Enter, aby potwierdzić.Narzędzie Maven tworzy pliki projektu w nowym folderze o nazwie artifactId, która w tym przykładzie to
fabrikam-functions.Przejdź do folderu projektu:
cd fabrikam-functionsMożesz przejrzeć kod wygenerowany przez szablon dla nowej funkcji wyzwalacza HTTP w Function.java w katalogu projektu \src\main\java\com\fabrikam .
Użyj tego
func newpolecenia, aby dodać funkcję do projektu:func new --name HttpExample --template "HTTP trigger" --authlevel "function"Nowy plik kodu jest dodawany do projektu. W tym przypadku
--nameargument jest unikatową nazwą funkcji (HttpExample), a--templateargument określa wyzwalacz HTTP.
Folder główny projektu zawiera różne pliki dla projektu, w tym pliki konfiguracji o nazwie local.settings.json i host.json. Ponieważ local.settings.json może zawierać wpisy tajne pobrane z platformy Azure, plik jest domyślnie wykluczony z kontroli źródła w pliku gitignore .
Utwórz i skompiluj funkcję
Plik function.json w folderze HttpExample deklaruje funkcję wyzwalacza HTTP. Wykonasz tę funkcję, dodając procedurę obsługi i kompilując ją do pliku wykonywalnego.
Naciśnij Ctrl + Shift + ' lub wybierz pozycję Nowy terminal z menu Terminal , aby otworzyć nowy zintegrowany terminal w programie VS Code.
W katalogu głównym aplikacji funkcji (tym samym folderze co host.json) zainicjuj projekt Rust o nazwie
handler.cargo init --name handlerW pliku Cargo.toml dodaj następujące zależności niezbędne do ukończenia tego krótkiego przewodnika. W tym przykładzie użyto struktury serwera internetowego warp .
[dependencies] warp = "0.3" tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }W pliku src/main.rs dodaj następujący kod i zapisz plik. To jest Twój niestandardowy program obsługi Rust.
use std::collections::HashMap; use std::env; use std::net::Ipv4Addr; use warp::{http::Response, Filter}; #[tokio::main] async fn main() { let example1 = warp::get() .and(warp::path("api")) .and(warp::path("HttpExample")) .and(warp::query::<HashMap<String, String>>()) .map(|p: HashMap<String, String>| match p.get("name") { Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)), None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")), }); let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT"; let port: u16 = match env::var(port_key) { Ok(val) => val.parse().expect("Custom Handler port is not a number!"), Err(_) => 3000, }; warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await }Skompiluj plik wykonywalny dla niestandardowego programu obsługi. Plik wykonywalny o nazwie
handler(handler.exew systemie Windows) jest generowany w folderze głównym aplikacji funkcji.cargo build --release cp target/release/handler .
Skonfiguruj aplikację funkcji
Host funkcji musi być skonfigurowany tak, aby przy uruchamianiu uruchamiał niestandardowy plik binarny modułu obsługi.
Otwórz host.json.
customHandler.descriptionW sekcji ustaw wartośćdefaultExecutablePathnahandler(w systemie Windows ustaw ją na wartośćhandler.exe).customHandlerW sekcji dodaj właściwość o nazwieenableForwardingHttpRequesti ustaw jej wartość natrue. W przypadku funkcji składających się tylko z wyzwalacza HTTP to ustawienie upraszcza programowanie, umożliwiając pracę z typowym żądaniem HTTP zamiast ładunku żądania niestandardowego programu obsługi.Upewnij się, że sekcja
customHandlerwygląda tak jak w tym przykładzie. Zapisz plik."customHandler": { "description": { "defaultExecutablePath": "handler", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest": true }
Aplikacja funkcji jest skonfigurowana tak, aby uruchamiała plik wykonywalny niestandardowego programu obsługi.
Lokalne uruchamianie funkcji
Zweryfikuj nową funkcję, uruchamiając projekt lokalnie i wywołując punkt końcowy funkcji.
Użyj tego polecenia, aby uruchomić lokalnego hosta środowiska uruchomieniowego usługi Azure Functions w katalogu głównym folderu projektu:
func startnpm install npm startmvn clean package mvn azure-functions:runNa końcu danych wyjściowych są wyświetlane następujące wiersze:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...Na końcu danych wyjściowych zostanie wyświetlony punkt końcowy HTTP dla funkcji:
Functions: hello: [GET,POST] http://localhost:7071/api/helloWywołaj punkt końcowy funkcji, aby sprawdzić, czy działa:
Skopiuj adres URL swojej funkcji
HttpExamplez tych danych wyjściowych do przeglądarki i przejdź do adresu URL funkcji. Powinna pojawić się odpowiedź na powodzenie z komunikatem "hello world".Note
Ponieważ autoryzacja klucza dostępu nie jest wymuszana podczas uruchamiania lokalnego, zwrócony adres URL funkcji nie zawiera wartości klucza dostępu i nie jest potrzebny do wywołania funkcji.
Po uruchomieniu funkcji lokalnie otwórz przeglądarkę i przejdź do następującego adresu URL:
http://localhost:7071/api/helloPowinna zostać wyświetlona następująca odpowiedź:
Hello from Go Worker!Gdy skończysz, użyj Ctrl+C i wybierz,
yaby zatrzymać hosta funkcji.
Utwórz zasoby pomocnicze platformy Azure dla swojej funkcji
Przed wdrożeniem kodu funkcji na platformie Azure należy utworzyć następujące zasoby:
- Grupa zasobów, która jest kontenerem logicznym dla powiązanych zasobów.
- Domyślne konto magazynu, które jest używane przez hosta usługi Functions do obsługi stanu i innych informacji o funkcjach.
- Tożsamość zarządzana przypisana przez użytkownika, której host usługi Functions używa do nawiązywania połączenia z domyślnym kontem magazynu.
- Aplikacja funkcji, która udostępnia środowisko do wykonywania kodu funkcji. Aplikacja funkcji odpowiada lokalnemu projektowi funkcji i umożliwia grupowanie funkcji jako jednostki logicznej w celu łatwiejszego zarządzania, wdrażania i udostępniania zasobów.
Użyj poleceń interfejsu wiersza polecenia platformy Azure w tych krokach, aby utworzyć wymagane zasoby.
Jeśli jeszcze tego nie zrobiono, zaloguj się do platformy Azure:
az loginPolecenie
az loginpowoduje zalogowanie cię do konta platformy Azure. Pomiń ten krok, jeśli korzystasz z Azure Cloud Shell.Jeśli jeszcze tego nie zrobiono, użyj tego
az extension addpolecenia, aby zainstalować rozszerzenie usługi Application Insights:az extension add --name application-insightsUżyj tego polecenia az group create , aby utworzyć grupę zasobów o nazwie
AzureFunctionsQuickstart-rgw wybranym regionie:az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"W tym przykładzie zastąp
<REGION>regionem w pobliżu, który obsługuje plan Flex Consumption. Użyj polecenia az functionapp list-flexconsumption-locations , aby wyświetlić listę aktualnie obsługiwanych regionów.Użyj polecenia az storage account create aby utworzyć ogólne konto magazynu w swojej grupie zasobów i regionie.
az storage account create --name <STORAGE_NAME> --location "<REGION>" --resource-group "AzureFunctionsQuickstart-rg" \ --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access falseW tym przykładzie zastąp
<STORAGE_NAME>nazwą, która jest odpowiednia dla ciebie i unikatowa w Azure Storage. Nazwy muszą zawierać od trzech do 24 znaków i tylko małe litery.Standard_LRSokreśla konto ogólnego przeznaczenia, które jest obsługiwane przez funkcje. Do tego nowego konta można uzyskać dostęp tylko przy użyciu tożsamości uwierzytelnionych przez firmę Microsoft, którym udzielono uprawnień do określonych zasobów.Użyj tego skryptu, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika, przeanalizować zwrócone właściwości JSON obiektu przy użyciu polecenia
jqi udzielićStorage Blob Data Owneruprawnień na domyślnym koncie magazynu:output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --location <REGION> \ --query "{userId:id, principalId: principalId, clientId: clientId}" -o json) userId=$(echo $output | jq -r '.userId') principalId=$(echo $output | jq -r '.principalId') clientId=$(echo $output | jq -r '.clientId') storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \ --role "Storage Blob Data Owner" --scope $storageIdJeśli nie masz narzędzia
jqw lokalnej powłoce Bash, jest dostępne w Azure Cloud Shell. W tym przykładzie zamień<STORAGE_NAME>na nazwę domyślnego konta magazynu, a<REGION>na region.Polecenie az identity create tworzy tożsamość o nazwie
func-host-storage-user. ZwróconyprincipalIdelement służy do przypisywania uprawnień do tej nowej tożsamości na domyślnym koncie magazynu przy użyciu poleceniaaz role assignment create. Polecenieaz storage account showsłuży do uzyskania identyfikatora konta magazynu.Użyj tego polecenia az functionapp create , aby utworzyć aplikację funkcji na platformie Azure:
az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime other --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"W tym przykładzie zastąp te symbole zastępcze odpowiednimi wartościami:
-
<APP_NAME>: globalnie unikatowa nazwa odpowiednia dla Ciebie.<APP_NAME>jest również domyślną domeną DNS aplikacji funkcji. -
<STORAGE_NAME>: nazwa konta użytego w poprzednim kroku. -
<REGION>: bieżący region. -
<LANGUAGE_VERSION>: użyj tej samej obsługiwanej wersji stosu języka, którą zweryfikowano lokalnie, o ile to możliwe.
To polecenie tworzy aplikację funkcji działającą w określonym środowisku uruchomieniowym języka w systemie Linux w ramach planu Flex Consumption Plan, która jest bezpłatna dla naliczanej ilości użycia w tym miejscu. Polecenie tworzy również skojarzone wystąpienie usługi aplikacja systemu Azure Insights w tej samej grupie zasobów, które można używać do monitorowania wykonania aplikacji funkcji i przeglądania dzienników. Aby uzyskać więcej informacji, zobacz Monitorowanie usługi Azure Functions. Wystąpienie nie wiąże się z żadnymi kosztami do momentu jego aktywowania.
-
Użyj tego skryptu, aby dodać zarządzaną tożsamość przypisaną przez użytkownika do roli Wydawca metryk monitorowania w instancji Application Insights.
appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \ --app <APP_NAME> --query "id" --output tsv) principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \ --query principalId -o tsv) az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsightsW tym przykładzie zastąp element
<APP_NAME>nazwą swojej aplikacji funkcji. Polecenie az role assignment create dodaje użytkownika do roli. Identyfikator zasobu wystąpienia usługi Application Insights i identyfikator podmiotu zabezpieczeń użytkownika są uzyskiwane przy użyciu odpowiednio polecenia az monitor app-insights component show iaz identity show.
Aktualizowanie ustawień aplikacji
Aby umożliwić hostowi usługi Functions nawiązywanie połączenia z domyślnym kontem magazynu przy użyciu udostępnionych sekretów, zastąp ustawienie parametrów połączenia AzureWebJobsStorage kilkoma ustawieniami, które mają prefiks AzureWebJobsStorage__. Te ustawienia określają zaawansowaną konfigurację używaną przez aplikację do łączenia się z magazynem i usługą Application Insights, korzystając z zarządzanej tożsamości przypisanej przez użytkownika.
Użyj tego skryptu, aby uzyskać identyfikator klienta dla tożsamości zarządzanej przypisanej przez użytkownika i na jego podstawie zdefiniować połączenia tożsamości zarządzanej zarówno z przechowywaniem danych, jak i usługą Application Insights.
clientId=$(az identity show --name func-host-storage-user \ --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \ AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \ APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"W tym skrypcie zastąp
<APP_NAME>i<STORAGE_NAME>nazwami aplikacji funkcji oraz konta magazynowego odpowiednio.Uruchom polecenie az functionapp config appsettings delete , aby usunąć istniejące
AzureWebJobsStorageustawienie parametrów połączenia, które zawiera wspólny klucz tajny:az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorageW tym przykładzie zastąp
<APP_NAME>nazwami twojej aplikacji funkcji.
Na tym etapie host usługi Functions może bezpiecznie nawiązać połączenie z kontem magazynu przy użyciu zarządzanych tożsamości zamiast wspólnych sekretów. Teraz możesz wdrożyć kod projektu w zasobach platformy Azure.
Utwórz zasoby pomocnicze platformy Azure dla swojej funkcji
Zanim będzie można wdrożyć kod funkcji na platformie Azure, należy utworzyć grupę zasobów, konto magazynu i aplikację funkcji. Użyj poleceń interfejsu wiersza polecenia platformy Azure w tych krokach, aby utworzyć wymagane zasoby.
Jeśli jeszcze tego nie zrobiono, zaloguj się do platformy Azure:
az loginPolecenie
az loginpowoduje zalogowanie cię do konta platformy Azure. Pomiń ten krok, jeśli korzystasz z Azure Cloud Shell.Użyj polecenia ,
az group createaby utworzyć grupę zasobów o nazwieAzureFunctionsQuickstart-rgw wybranym regionie:az group create --name AzureFunctionsQuickstart-rg --location <REGION>W tym przykładzie zastąp
<REGION>regionem w pobliżu, który obsługuje plan Flex Consumption. Użyj polecenia ,az functionapp list-flexconsumption-locationsaby wyświetlić listę aktualnie obsługiwanych regionów.Użyj polecenia
az storage account create, aby utworzyć konto magazynowe ogólnego przeznaczenia w swojej grupie zasobów i swoim regionie:az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRSW tym przykładzie zastąp element
<STORAGE_NAME>globalnie unikatową nazwą. Nazwy muszą zawierać od trzech do 24 znaków i tylko małe litery i cyfry.Utwórz aplikację funkcji na platformie Azure:
az functionapp create --resource-group AzureFunctionsQuickstart-rg --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4Zastąp
<APP_NAME>globalnie unikatową nazwą, a<STORAGE_NAME>nazwą konta użytego w poprzednim kroku. To polecenie tworzy również skojarzone wystąpienie usługi aplikacja systemu Azure Insights w tej samej grupie zasobów, za pomocą której można monitorować aplikację funkcji i wyświetlać dzienniki. Aby uzyskać więcej informacji, zobacz Monitorowanie usługi Azure Functions.Wyłącz protokół HTTP/2 w aplikacji funkcji, która jest wymagana w publicznej wersji zapoznawczej języka Go:
az resource update --resource-group AzureFunctionsQuickstart-rg --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
Wdrażanie projektu funkcji na platformie Azure
Po pomyślnym utworzeniu aplikacji funkcji na platformie Azure możesz przystąpić do wdrażania projektu funkcji lokalnych przy użyciu func azure functionapp publish polecenia .
W folderze głównym projektu uruchom następujące
func azure functionapp publishpolecenie:func azure functionapp publish <APP_NAME>W tym przykładzie zastąp
<APP_NAME>nazwą twojej aplikacji. Pomyślne wdrożenie pokazuje wyniki podobne do następujących danych wyjściowych (obcięte dla uproszczenia):... Getting site publishing info... Creating archive for current directory... Performing remote build for functions project. ... Deployment successful. Remote build succeeded! Syncing triggers... Functions in msdocs-azurefunctions-qs: HttpExample - [httpTrigger] Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexampleW lokalnym terminalu lub wierszu polecenia uruchom to polecenie, aby uzyskać wartość punktu końcowego adresu URL, w tym klucz dostępu:
func azure functionapp list-functions <APP_NAME> --show-keysW tym przykładzie ponownie zastąp
<APP_NAME>nazwą Twojej aplikacji.Skopiuj zwrócony adres URL punktu końcowego i klucz, którego użyjesz do wywołania punktu końcowego funkcji.
Aktualizowanie pliku pom.xml
Po pomyślnym utworzeniu aplikacji funkcji na platformie Azure zaktualizuj plik pom.xml, aby narzędzie Maven można było wdrożyć w nowej aplikacji. W przeciwnym razie program Maven tworzy nowy zestaw zasobów platformy Azure podczas wdrażania.
W usłudze Azure Cloud Shell użyj tego
az functionapp showpolecenia, aby uzyskać adres URL i identyfikator kontenera wdrożenia nowej tożsamości zarządzanej przypisanej przez użytkownika:az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg \ --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \ containerUrl: properties.functionAppConfig.deployment.storage.value}"W tym przykładzie zastąp
<APP_NAME>nazwami twojej aplikacji funkcji.W katalogu głównym projektu otwórz plik pom.xml w edytorze tekstów, znajdź
propertieselement i zaktualizuj następujące wartości właściwości:Nazwa właściwości Value java.versionUżyj tej samej obsługiwanej wersji stosu języka zweryfikowanego lokalnie, takiej jak 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameNazwa aplikacji funkcji na platformie Azure. Znajdź sekcję
configurationplikuazure-functions-maven-plugini zastąp ją następującym fragmentem XML:<configuration> <appName>${functionAppName}</appName> <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup> <pricingTier>Flex Consumption</pricingTier> <region>....</region> <runtime> <os>linux</os> <javaVersion>${java.version}</javaVersion> </runtime> <deploymentStorageAccount>...</deploymentStorageAccount> <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup> <deploymentStorageContainer>...</deploymentStorageContainer> <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod> <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId> <appSettings> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>W nowym elemencie
configurationwprowadź te konkretne zamiany wartości wielokropków (...):Configuration Value regionKod regionu istniejącej aplikacji funkcji, taki jak eastus.deploymentStorageAccountNazwa konta magazynowego. deploymentStorageContainerNazwa udziału wdrożenia, która znajduje się po \w wartościcontainerUrl, którą uzyskałeś.userAssignedIdentityResourceIdW pełni kwalifikowany identyfikator zasobu tożsamości zarządzanej, który został uzyskany. Zapisz zmiany w pliku pom.xml .
Teraz możesz użyć narzędzia Maven, aby wdrożyć projekt kodu w istniejącej aplikacji.
Wdrażanie projektu funkcji na platformie Azure
W wierszu polecenia uruchom następujące polecenie:
mvn clean package azure-functions:deployPo pomyślnym wdrożeniu uruchom polecenie Core Tools, aby uzyskać wartość punktu końcowego URL, w tym klucz dostępu:
func azure functionapp list-functions <APP_NAME> --show-keysW tym przykładzie ponownie zastąp
<APP_NAME>nazwą Twojej aplikacji.Skopiuj zwrócony adres URL punktu końcowego i klucz, którego użyjesz do wywołania punktu końcowego funkcji.
Wdrażanie projektu funkcji na platformie Azure
Po pomyślnym utworzeniu aplikacji funkcji w Azure możesz przystąpić do wdrażania projektu funkcji lokalnych. Użyj polecenia func azure functionapp publish, aby wdrożyć projekt w Azure:
func azure functionapp publish <APP_NAME>
Zastąp <APP_NAME> nazwą swojej aplikacji funkcji.
Wywoływanie funkcji na platformie Azure
Ponieważ funkcja używa wyzwalacza HTTP i obsługuje żądania GET, wywołuje je, wysyłając żądanie HTTP do adresu URL przy użyciu klucza dostępu na poziomie funkcji. Najłatwiej jest wykonać żądanie GET w przeglądarce.
Wklej adres URL i klucz dostępu skopiowany na pasek adresu przeglądarki.
Adres URL punktu końcowego powinien wyglądać mniej więcej tak:
https://contoso-app.azurewebsites.net/api/httpexample?code=aabbccdd...
W takim przypadku należy również podać klucz dostępu w ciągu zapytania podczas wysyłania żądania GET do adresu URL punktu końcowego. Użycie klucza dostępu jest zalecane w celu ograniczenia dostępu od klientów losowych. Podczas wykonywania żądania POST przy użyciu klienta HTTP należy zamiast tego podać klucz dostępu w nagłówku x-functions-key .
Po przejściu do tego adresu URL przeglądarka powinna wyświetlić podobne dane wyjściowe, jak po uruchomieniu funkcji lokalnie.
Wywoływanie funkcji na platformie Azure
Po zakończeniu wdrażania otwórz następujący adres URL w przeglądarce, aby sprawdzić, czy funkcja działa w Azure:
https://<APP_NAME>.azurewebsites.net/api/hello
Powinna zostać wyświetlona ta sama Hello from Go Worker! odpowiedź, która została wyświetlona podczas lokalnego uruchamiania funkcji.
Uprzątnij zasoby
Jeśli przejdziesz do następnego kroku i dodasz powiązanie wyjściowe kolejki usługi Azure Storage, zachowaj wszystkie zasoby na miejscu, ponieważ będziesz rozwijać to, co już zrobiłeś.
W przeciwnym razie użyj następującego polecenia, aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby, aby uniknąć ponoszenia dalszych kosztów.
az group delete --name AzureFunctionsQuickstart-rg
Uprzątnij zasoby
Jeśli będziesz kontynuować następny krok, zachowaj wszystkie zasoby na miejscu podczas kompilowania tego, co zostało już utworzone.
W przeciwnym razie użyj następującego polecenia, aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby, aby uniknąć ponoszenia dalszych kosztów.
az group delete --name AzureFunctionsQuickstart-rg
Dalsze kroki
Dalsze kroki
Aby uzyskać więcej informacji na temat tworzenia funkcji języka Go, zobacz następujące zasoby: