W zeszłym tygodniu przeszliśmy przez proces tworzenia i debuggowania funkcji za pomocą Visual Studio 2017 15.3 Preview. Dzisiaj zrobimy prawie to samo, ale z poziomu Visual Studio Code. Prawie bo po pierwsze Visual Studio Code nie wspiera full .NET Framework, po drugie mój komp nie był reinstalowany od czasu k runtime, i najnowsza wersja Core Alfa Pre Omega 2.5 mi po prostu nie działa. Więc będę korzystał z przykładów JavaScriptowych.

Aktualizacja (2017-06-22 9:57):

A jednak, będzie działało dla C# tylko, że to prace w toku:

oraz:

Koniec Aktualizacji

By w ogóle rozpocząć zabawę z Azure Function na Visual Studio Code będziemy potrzebowali narzędzia co się zowie azure-functions-cli i jest to paczka globalna npm która tworzy nam komendę func.

Instalacja jest prosta jak budowa cepa:

npm i -g azure-functions-cli

Zaraz po zainstalowaniu możemy śmiało zacząć wykorzystywać komendę func. Stwórzmy sobie jakiś przykładowy folder na przykład my-fun-test i wejdźmy do niego. Jak już w nim będziemy to wykonajmy polecenie func init:

Gutek@Gutek-PC MINGW64 /d/test/my-fun-test
$ func init
Writing .gitignore
Writing host.json
Writing appsettings.json
Created launch.json
Initialized empty Git repository in D:/test/my-fun-test/.git/

Stworzy to nam kilka podstawowych plików konfiguracyjnych i zainicjalizuje repozytorium git. Teraz mając tak przygotowany projekt możemy stworzyć naszą pierwszą funkcję. W tym celu wykonujemy polecenie func new, które za pomocą prostego wizzarda przeprowadzi nas przez wybór języka i szablonu projektu:

Gutek@Gutek-PC MINGW64 /d/test/my-fun-test (master)
$ func new
Select a language: JavaScript
Select a template: Generic Webhook
Function name: [GenericWebhookJS] WebHookJonSnow
Writing D:\test\my-fun-test\WebHookJonSnow\index.js
Writing D:\test\my-fun-test\WebHookJonSnow\sample.dat
Writing D:\test\my-fun-test\WebHookJonSnow\function.json

Można to oczywiście przyspieszyć i możemy napisać:

func new --language JavaScript --template "Generic Webhook" --name WebHookJonSnow

Skąd i jakie szablony sa dostępne? Albo możemy przejrzeć nasz wizzard albo zajrzeć sobie tutaj – jest to dosłownie metoda wołana przez func by pobrać szablony wraz z ich nazwami oraz plikami które są tworzone. Więc nawet jak nie chcemy korzystać z func to możemy sami sobie pobrać aktualne “szablony” z azure ;

Mając stworzony w ten sposób projekt możemy go:

  • uruchomić za pomocą komendy func run .\NazwaFunkcji\ – to otworzy nam osobne okno hostowania lokalnego funkcji
  • Zahostować naszą funkcję lokalnie (głównie chodzi o to, że run odpala i zamyka i możemy kolejne polecenia wykonywac a to nie, to blokuje): func host start
  • Możemy odpalić dwie komendy z opcją debuggowania --debug
  • Możemy zrobić masę innych rzeczy jak z deployować nasze rozwiązanie ale o tym jeszcze dwa słowa będą

Opcji mamy dużo. Wykorzystajmy więc chociaż część z nich.

Otwórzmy sobie VS Code w aktualnym folderze:

code .

Otwórzmy naszą funkcję i ustawmy breakpoint na jakiejś jednej linii. Następnie w linii poleceń odpalmy polecenie:

func host start --debug vscode
func host start w akcji
func host start w akcji

Czemu vscode? Nie wiem ;) ale to chyba chodzi o to gdzie ma szukać odpowiednich parametrów uruchomienia. Mając func host wystartowane możemy w VS Code wcisnąć F5 i…….. Jeszcze musimy odpytać naszą usługę – przeglądarka wystarczy, link do usługi znajduje się w oknie command linie tam gdzie jest func host start. Teraz jak w przeglądarce przejdziemy do urla z func host start, to pułapka na VS Code zadziała:

VS Code Azure Functions debuggowanie w akcji
VS Code Azure Functions debuggowanie w akcji

Jakbyście się zastanawiali jak wygląda opcja z run to tak:

func run w akcji
func run w akcji

Teraz możemy sobie fajnie wszystko debugować, lokalnie, ale możemy. To samo co w VS 2017 15.3 Preview ale lepiej bo nie trzeba instalować iluś tam set gibabajtów. Najlepsze jest to, że też możemy łączyć się do azure i nie testować danych na przykładowych “oszukanych” elementach jak kolejka. Ale możemy to testować na prawdziwych danych – to znaczy, że element w kolejce w azure naprawdę może trafić do nas lokalnie na maszynę i wywołać naszą lokalnie testowaną funkcję. Fajne? SUPER. To jak to zrobić?

TRZEBA MIEĆ FARTA albo przeinstalować system. Mnie się nie udało mieć pierwszego a na drugie nie mam czasu ;)

Azure functions CLI - bo kochamy stack trace :)
Azure functions CLI – bo kochamy stack trace :)

Ale się da, istnieją komendy które pozwalają nam połączyć się z azure i następnie pobierać aktualizować i publikować rozwiązania za pomocą func. W tym celu niestety jedna z komend:

func azure login
func azure account set

Musi zadziałać. U mnie nie zadziałały.

Podsumowanie

Tak czy siak, byłem bardzo mile zaskoczony tym, że za pomocą VS Code jestem wstanie debugować sobie funkcję zarówno napisaną w C# (jakby to tylko działało) jak i JavaScript. Dla mnie jest to duże ułatwienie oraz pozwala kontynuować pracę, mimo że zmieniam komputery i systemy operacyjne.

Zdziwiłem się też, że działa to dużo lepiej niż to na Visual Studio 2017 15.3 Preview (mam dość pisania tej długiej nazwy!). Prawie w ogóle tooling mi się nie wysypał nie licząc tylko próby podłączenia pod azure.

Jednak ostatnio zaczynam mieć mieszane uczucia do VS Code :( ale może to się zmieni.

A za tydzień? Też serverless :) jeszcze parę razy będzie :)