Tworzenie pierwszej funkcji w usłudze Azure Arc przy użyciu niestandardowego kontenera (wersja zapoznawcza)
W tym przewodniku Szybki start utworzysz projekt Azure Functions uruchomiony w kontenerze niestandardowym i wdrożysz go w klastrze Kubernetes z obsługą usługi Azure Arc z poziomu konta Docker Hub. Aby dowiedzieć się więcej, zobacz App Service, Functions i Logic Apps w usłudze Azure Arc. Ten scenariusz obsługuje tylko aplikacje funkcji działające w systemie Linux.
Uwaga
Obsługa uruchamiania funkcji w klastrze Kubernetes z obsługą usługi Azure Arc jest obecnie dostępna w wersji zapoznawczej.
Wymagania wstępne
Na komputerze lokalnym:
- Zestaw SDK platformy .NET Core 3.1
- Azure Functions Core Tools w wersji 3.0.3245.
- Interfejs wiersza polecenia platformy Azure w wersji 2.4 lub nowszej.
- Docker
- Identyfikator platformy Docker
Tworzenie środowiska App Service Kubernetes
Przed rozpoczęciem należy utworzyć App Service środowisko Kubernetes dla klastra Kubernetes z obsługą usługi Azure Arc.
Uwaga
Podczas tworzenia środowiska pamiętaj, aby zanotować zarówno nazwę lokalizacji niestandardowej, jak i nazwę grupy zasobów, która zawiera lokalizację niestandardową. Można ich użyć do znalezienia niestandardowego identyfikatora lokalizacji, który będzie potrzebny podczas tworzenia aplikacji funkcji w środowisku.
Jeśli środowisko nie zostało utworzone, zapoznaj się z administratorem klastra.
Dodawanie rozszerzeń interfejsu wiersza polecenia platformy Azure
Uruchom środowisko powłoki Bash na platformie Azure Cloud Shell.
Ponieważ te polecenia interfejsu wiersza polecenia nie są jeszcze częścią podstawowego zestawu interfejsu wiersza polecenia, dodaj je za pomocą następujących poleceń:
az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube
Tworzenie projektu funkcji lokalnej
W Azure Functions projekt funkcji jest kontekstem dla co najmniej jednej funkcji, która odpowiada na określony wyzwalacz. Wszystkie funkcje w projekcie współdzielą te same konfiguracje lokalne i hostujące. W tej sekcji utworzysz projekt funkcji zawierający jedną funkcję.
func initUruchom polecenie w następujący sposób, aby utworzyć projekt funkcji w folderze o nazwie LocalFunctionProj z określonym środowiskiem uruchomieniowym:func init LocalFunctionProj --dotnet --dockerOpcja
--dockergeneruje elementDockerfiledla projektu, który definiuje odpowiedni kontener niestandardowy do użycia z Azure Functions i wybranym środowiskiem uruchomieniowym.Przejdź do folderu projektu:
cd LocalFunctionProjTen folder zawiera
Dockerfilepliki i inne dla projektu, w tym pliki konfiguracji o nazwie local.settings.json i host.json. Domyślnie plik local.settings.json jest wykluczony z kontroli źródła w pliku gitignore . To wykluczenie jest spowodowane tym, że plik może zawierać wpisy tajne pobierane z platformy Azure.Otwórz wygenerowany
Dockerfileelement i znajdź3.0tag dla obrazu podstawowego. Jeśli istnieje tag, zastąp3.0go tagiem3.0.15885. Na przykład w aplikacji JavaScript plik platformy Docker powinien zostać zmodyfikowany tak, aby miałFROM mcr.microsoft.com/azure-functions/node:3.0.15885wartość . Ta wersja obrazu podstawowego obsługuje wdrażanie w klastrze Kubernetes z obsługą usługi Azure Arc.Dodaj funkcję do projektu przy użyciu następującego polecenia, gdzie
--nameargument jest unikatową nazwą funkcji (HttpExample), a--templateargument określa wyzwalacz funkcji (HTTP).func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
Kompilowanie obrazu kontenera i testowanie lokalnie
Plik Dockerfile w katalogu głównym projektu opisuje minimalne wymagane środowisko do uruchomienia aplikacji funkcji w kontenerze. Pełna lista obsługiwanych obrazów bazowych dla Azure Functions można znaleźć na stronie obrazu podstawowego Azure Functions.
W folderze głównym projektu uruchom polecenie docker build i podaj nazwę ,
azurefunctionsimagei tag .v1.0.0Następujące polecenie kompiluje obraz platformy Docker dla kontenera.
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .W tym przykładzie zastąp ciąg
<DOCKER_ID>identyfikatorem konta Docker Hub. Po zakończeniu wykonywania polecenia można uruchomić nowy kontener lokalnie.Aby przetestować kompilację, uruchom obraz w kontenerze lokalnym przy użyciu polecenia docker run , z argumentem dodawania portów
-p 8080:80.docker run -p 8080:80 -it <docker_id>/azurefunctionsimage:v1.0.0Ponownie zastąp ciąg
<DOCKER_IDidentyfikatorem platformy Docker i dodaj argument portów,-p 8080:80Po uruchomieniu obrazu w kontenerze lokalnym przejdź do
http://localhost:8080/api/HttpExample?name=Functionsstrony , która powinna wyświetlić ten sam komunikat "hello", jak poprzednio. Ponieważ funkcja wyzwalana przez protokół HTTP używa autoryzacji anonimowej, nadal można wywołać funkcję, mimo że jest uruchomiona w kontenerze. Ustawienia klucza dostępu funkcji są wymuszane podczas uruchamiania lokalnego w kontenerze. Jeśli masz problemy z wywoływanie funkcji, upewnij się, że dostęp do funkcji jest ustawiony na anonimowy.
Po zweryfikowaniu aplikacji funkcji w kontenerze zatrzymaj platformę Docker za pomocą klawiszy Ctrl+C.
Wypychanie obrazu do Docker Hub
Docker Hub to rejestr kontenerów, który hostuje obrazy i udostępnia usługi obrazów i kontenerów. Aby udostępnić obraz, który obejmuje wdrażanie na platformie Azure, należy wypchnąć go do rejestru.
Jeśli jeszcze nie zalogowaliśmy się do platformy Docker, wykonaj to za pomocą polecenia logowania platformy Docker , zastępując ciąg
<docker_id>identyfikatorem platformy Docker. To polecenie wyświetla monit o nazwę użytkownika i hasło. Komunikat "Logowanie powiodło się" potwierdza, że zalogowałeś się.docker loginPo zalogowaniu wypchnij obraz do Docker Hub przy użyciu polecenia wypychania platformy Docker, a następnie ponownie zastąp element
<docker_id>identyfikatorem platformy Docker.docker push <docker_id>/azurefunctionsimage:v1.0.0W zależności od szybkości sieci wypychanie obrazu po raz pierwszy może potrwać kilka minut (wypychanie kolejnych zmian jest znacznie szybsze). Czekając, możesz przejść do następnej sekcji i utworzyć zasoby platformy Azure w innym terminalu.
Pobieranie lokalizacji niestandardowej
Aby móc utworzyć aplikację funkcji w lokalizacji niestandardowej, musisz uzyskać informacje o środowisku.
Uzyskaj następujące informacje o lokalizacji niestandardowej od administratora klastra (zobacz Tworzenie lokalizacji niestandardowej).
customLocationGroup="<resource-group-containing-custom-location>"
customLocationName="<name-of-custom-location>"
Pobierz identyfikator lokalizacji niestandardowej dla następnego kroku.
customLocationId=$(az customlocation show \
--resource-group $customLocationGroup \
--name $customLocationName \
--query id \
--output tsv)
Tworzenie zasobów platformy Azure
Przed wdrożeniem kontenera w nowym środowisku App Service Kubernetes należy utworzyć jeszcze dwa zasoby:
- Konto Storage, które jest obecnie wymagane przez narzędzia i nie jest częścią środowiska.
- Aplikacja funkcji, która udostępnia kontekst uruchamiania kontenera. Aplikacja funkcji działa w środowisku App Service Kubernetes i mapuje na lokalny projekt funkcji. Aplikacja funkcji umożliwia grupowanie funkcji jako jednostki logicznej, co ułatwia wdrażanie i udostępnianie zasobów oraz zarządzanie nimi.
Uwaga
Aplikacje funkcji są uruchamiane w środowisku App Service Kubernetes w planie dedykowanego (App Service). Podczas tworzenia aplikacji funkcji bez istniejącego planu zostanie utworzony plan.
Tworzenie konta Storage
Użyj polecenia az storage account create , aby utworzyć konto magazynu ogólnego przeznaczenia w grupie zasobów i regionie:
az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS
Uwaga
Konto magazynu jest obecnie wymagane przez narzędzia Azure Functions.
W poprzednim przykładzie zastąp <STORAGE_NAME> ciąg nazwą odpowiednią dla Ciebie i unikatową w usłudze Azure Storage. Nazwy muszą zawierać od trzech do 24 znaków i tylko małe litery. Standard_LRS określa konto ogólnego przeznaczenia, które jest obsługiwane przez usługę Functions. Wartość --location jest standardowym regionem świadczenia usługi Azure.
Tworzenie aplikacji funkcji
Uruchom polecenie az functionapp create , aby utworzyć nową aplikację funkcji w środowisku.
az functionapp create --resource-group MyResourceGroup --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --functions-version 3 --runtime dotnet --deployment-container-image-name <DOCKER_ID>/azurefunctionsimage:v1.0.0
W tym przykładzie zastąp <CUSTOM_LOCATION_ID> identyfikatorem lokalizacji niestandardowej określonej dla środowiska App Service Kubernetes. Zastąp <STORAGE_NAME> również nazwą konta użytego w poprzednim kroku, <APP_NAME> globalnie unikatową nazwą odpowiednią dla Ciebie i <DOCKER_ID> identyfikatorem Docker Hub.
Parametr deployment-container-image-name określa obraz do użycia dla aplikacji funkcji. Możesz użyć polecenia az functionapp config container show , aby wyświetlić informacje o obrazie używanym do wdrożenia. Do wdrożenia z innego obrazu można również użyć polecenia az functionapp config container set .
Podczas pierwszego tworzenia aplikacji funkcji pobiera on początkowy obraz z Docker Hub. Możesz również włączyć ciągłe wdrażanie na platformie Azure z poziomu Docker Hub.
Aby dowiedzieć się, jak włączyć protokół SSH na obrazie, zobacz Włączanie połączeń SSH.
Ustawianie wymaganych ustawień aplikacji
Uruchom następujące polecenia, aby utworzyć ustawienie aplikacji dla parametrów połączenia konta magazynu:
storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString
Ten kod musi zostać uruchomiony w Cloud Shell lub w powłoce Bash na komputerze lokalnym. Zastąp <STORAGE_NAME> ciąg nazwą konta magazynu i <APP_NAME> nazwą aplikacji funkcji.
Wywoływanie funkcji na platformie Azure
Ponieważ funkcja używa wyzwalacza HTTP, należy wywołać go, wysyłając żądanie HTTP do jego adresu URL w przeglądarce lub za pomocą narzędzia takiego jak curl.
Skopiuj pełny adres URL wywołania widoczny w danych wyjściowych polecenia publikowania na pasku adresu przeglądarki, dołączając parametr ?name=Functionszapytania . Przeglądarka powinna wyświetlać podobne dane wyjściowe, jak podczas lokalnego uruchamiania funkcji.

Następne kroki
Teraz, gdy aplikacja funkcji jest uruchomiona w kontenerze z włączoną obsługą usługi Azure Arc App Service środowisku Kubernetes, możesz połączyć ją z usługą Azure Storage, dodając powiązanie wyjściowe kolejki Storage.

