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:

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.

Launch Cloud Shell in a new window

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ę.

  1. func init Uruchom 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 --docker
    

    Opcja --docker generuje element Dockerfile dla projektu, który definiuje odpowiedni kontener niestandardowy do użycia z Azure Functions i wybranym środowiskiem uruchomieniowym.

  2. Przejdź do folderu projektu:

    cd LocalFunctionProj
    

    Ten folder zawiera Dockerfile pliki 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.

  3. Otwórz wygenerowany Dockerfile element i znajdź 3.0 tag dla obrazu podstawowego. Jeśli istnieje tag, zastąp 3.0 go tagiem 3.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.

  4. Dodaj funkcję do projektu przy użyciu następującego polecenia, gdzie --name argument jest unikatową nazwą funkcji (HttpExample), a --template argument 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.

  1. W folderze głównym projektu uruchom polecenie docker build i podaj nazwę , azurefunctionsimagei tag . v1.0.0

    Nastę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.

  2. 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.0
    

    Ponownie zastąp ciąg <DOCKER_ID identyfikatorem platformy Docker i dodaj argument portów, -p 8080:80

  3. Po 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.

  1. 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 login
    
  2. Po 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.0
    
  3. W 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.

The output of the function run on Azure in a browser

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.