Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym szybkim starcie użyjesz narzędzi wiersza polecenia dla deweloperów Azure, aby utworzyć skalowalny web API z punktami końcowymi funkcji, które odpowiadają na żądania HTTP. Po przetestowaniu kodu lokalnie wdrożysz go w nowej aplikacji funkcji bezserwerowej utworzonej w planie Flex Consumption w usłudze Azure Functions.
Źródło projektu używa interfejsu wiersza polecenia dla deweloperów platformy Azure (azd), aby uprościć wdrażanie kodu na platformie Azure. To wdrożenie jest zgodne z bieżącymi najlepszymi rozwiązaniami dotyczącymi bezpiecznych i skalowalnych wdrożeń usługi Azure Functions.
Domyślnie plan Flex Consumption jest zgodny z modelem rozliczeń z płatnością za rzeczywiste użycie, co oznacza, że ukończenie tego rozpoczęcia pracy wiąże się z niewielkim kosztem kilku centów amerykańskich lub mniej na koncie platformy Azure.
Prerequisites
Konto platformy 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
-
Bezpieczne narzędzie do testowania HTTP do wysyłania żądań przy użyciu ładunków JSON do punktów końcowych funkcji. W tym artykule jest używany program
curl.
Inicjowanie projektu
Użyj polecenia , azd init aby utworzyć lokalny projekt kodu usługi Azure Functions na podstawie szablonu.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnetTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Jest ona również używana w nazwie grupy zasobów utworzonej na platformie Azure.Uruchom to polecenie, aby przejść do
httpfolderu aplikacji:cd httpUtwórz plik o nazwie local.settings.json w
httpfolderze zawierającym te dane JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-javaTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Jest ona również używana w nazwie grupy zasobów utworzonej na platformie Azure.Uruchom to polecenie, aby przejść do
httpfolderu aplikacji:cd httpUtwórz plik o nazwie local.settings.json w
httpfolderze zawierającym te dane JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-javascript-azd -e httpendpoint-jsTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w folderze głównym. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Jest ona również używana w nazwie grupy zasobów utworzonej na platformie Azure.Utwórz plik o nazwie local.settings.json w folderze głównym zawierającym te dane JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-powershell-azd -e httpendpoint-psTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w folderze głównym. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Jest ona również używana w nazwie grupy zasobów utworzonej na platformie Azure.Uruchom to polecenie, aby przejść do
srcfolderu aplikacji:cd srcUtwórz plik o nazwie local.settings.json w
srcfolderze zawierającym te dane JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-typescript-azd -e httpendpoint-tsTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w folderze głównym. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.Utwórz plik o nazwie local.settings.json w folderze głównym zawierającym te dane JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-python-http-azd -e httpendpoint-pyTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w folderze głównym. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.Utwórz plik o nazwie local.settings.json w folderze głównym zawierającym te dane JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
Tworzenie i aktywowanie środowiska wirtualnego
W folderze głównym uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv:
python3 -m venv .venv
source .venv/bin/activate
Jeśli język Python nie instaluje pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:
sudo apt-get install python3-venv
Uruchamianie w środowisku lokalnym
Uruchom to polecenie z folderu aplikacji w terminalu lub wierszu polecenia:
func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm startPo uruchomieniu hosta usługi Functions w lokalnym folderze projektu zapisuje on punkty końcowe adresu URL funkcji wyzwalanych przez protokół HTTP do danych wyjściowych terminalu.
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.
W przeglądarce przejdź do adresu końcowego
httpget, który powinien wyglądać następująco:W nowym oknie terminalu lub wiersza polecenia uruchom to
curlpolecenie, aby wysłać żądanie POST z ładunkiem JSON do punktu końcowegohttppost:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.jsoncurl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"To polecenie odczytuje dane ładunku
testdata.jsonJSON z pliku projektu. Przykłady obu żądań HTTP można znaleźć wtest.httppliku projektu.Po zakończeniu naciśnij Ctrl+C w oknie terminalu
func.exe, aby zatrzymać proces hosta.
- Uruchom polecenie
deactivate, aby zamknąć środowisko wirtualne.
Przejrzyj kod (opcjonalnie)
Możesz przejrzeć kod definiujący dwa punkty końcowe funkcji wyzwalacza HTTP:
[Function("httpget")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
string name)
{
var returnValue = string.IsNullOrEmpty(name)
? "Hello, World."
: $"Hello, {name}.";
_logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");
return new OkObjectResult(returnValue);
}
@FunctionName("httpget")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.FUNCTION)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: httpGetFunction
});
Ten function.json plik definiuje httpget funkcję:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
Ten run.ps1 plik implementuje kod funkcji:
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters
$name = $Request.Query.name
$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")
Pełny projekt szablonu można przejrzeć tutaj.
Pełny projekt szablonu można przejrzeć tutaj.
Pełny projekt szablonu można przejrzeć tutaj.
Pełny projekt szablonu można przejrzeć tutaj.
Pełny projekt szablonu można przejrzeć tutaj.
Pełny projekt szablonu można przejrzeć tutaj.
Po zweryfikowaniu funkcji lokalnie nadszedł czas, aby opublikować je na platformie Azure.
Wdróż na platformie Azure
Ten projekt jest skonfigurowany do użycia azd up polecenia w celu wdrożenia tego projektu w nowej aplikacji funkcji w planie Flex Consumption na platformie Azure.
Tip
Projekt zawiera zestaw plików Bicep (w folderze infra ), które azd wykorzystuje do utworzenia bezpiecznego wdrożenia w planie wykorzystania Flex, które jest zgodne z najlepszymi praktykami.
Uruchom to polecenie, aby
azdutworzyć wymagane zasoby platformy Azure na platformie Azure i wdrożyć projekt kodu w nowej aplikacji funkcji:azd upFolder główny zawiera
azure.yamlplik definicji wymagany przezazdprogram .Jeśli jeszcze nie zalogowano się, zostanie wyświetlony monit o uwierzytelnienie przy użyciu konta platformy Azure.
Po wyświetleniu monitu podaj następujące wymagane parametry wdrożenia:
Parameter Description Subskrypcja platformy Azure Subskrypcja, w której są tworzone zasoby. Lokalizacja platformy Azure Region platformy Azure, w którym ma zostać utworzona grupa zasobów zawierająca nowe zasoby platformy Azure. Wyświetlane są tylko regiony, które obecnie obsługują plan Flex Consumption. vnetEnabled Wybierz pozycję Fałsz. Po ustawieniu wartości True wdrożenie tworzy aplikację funkcji w nowej sieci wirtualnej. Polecenie
azd upużywa Twoich odpowiedzi na te monity wraz z plikami konfiguracji Bicep do wykonania następujących zadań wdrażania:Utwórz i skonfiguruj te wymagane zasoby platformy Azure (równoważne ):
azd provision- Flex Consumption plan i aplikacja funkcji
- Azure Storage (wymagane) i Application Insights (zalecane)
- Zasady dostępu i role dla twojego konta
- Połączenia między usługami przy użyciu tożsamości zarządzanych (zamiast przechowywanych parametry połączenia)
- (Opcja) Sieć wirtualna do bezpiecznego uruchamiania aplikacji funkcji i innych zasobów platformy Azure
Spakuj i wdróż kod w kontenerze wdrażania (odpowiednik
azd deploy). Aplikacja jest następnie uruchamiana i uruchamiana w wdrożonym pakiecie.
Po pomyślnym zakończeniu działania polecenia zobaczysz linki do utworzonych zasobów.
Wywoływanie funkcji na platformie Azure
Teraz możesz wywołać punkty końcowe funkcji na platformie Azure, wysyłając żądania HTTP do ich adresów URL przy użyciu narzędzia testowego HTTP lub z przeglądarki (w przypadku żądań GET). Po uruchomieniu funkcji na platformie Azure wymuszana jest autoryzacja klucza dostępu i musisz podać klucz dostępu funkcji wraz z żądaniem.
Aby uzyskać punkty końcowe adresów URL funkcji działających na platformie Azure, możesz użyć narzędzi Core Tools.
W lokalnym terminalu lub wierszu polecenia uruchom następujące polecenia, aby uzyskać wartości punktu końcowego adresu URL:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keysPolecenie
azd env get-valuepobiera nazwę aplikacji funkcji ze środowiska lokalnego. Jeśli używasz opcji--show-keyszfunc azure functionapp list-functions, wartość zwróconego adresu URL wywołania: dla każdego punktu końcowego zawiera klucz dostępu na poziomie funkcji.Tak jak wcześniej użyj narzędzia testowego HTTP, aby zweryfikować te adresy URL w aplikacji funkcji uruchomionej na platformie Azure.
Ponowne wdrażanie kodu
azd up Uruchom polecenie tyle razy, ile potrzebujesz, aby aprowizować zasoby platformy Azure i wdrażać aktualizacje kodu w aplikacji funkcji.
Note
Wdrożone pliki kodu są zawsze zastępowane przez najnowszy pakiet wdrożeniowy.
Początkowe odpowiedzi na azd monity i wszystkie zmienne środowiskowe wygenerowane przez azd program są przechowywane lokalnie w nazwanym środowisku. Użyj polecenia , azd env get-values aby przejrzeć wszystkie zmienne w środowisku, które były używane podczas tworzenia zasobów platformy Azure.
Czyszczenie zasobów
Po zakończeniu pracy z aplikacją funkcji i powiązanymi zasobami użyj tego polecenia, aby usunąć aplikację funkcji i powiązane z nią zasoby z platformy Azure i uniknąć ponoszenia dodatkowych kosztów:
azd down --no-prompt
Note
Opcja --no-prompt powoduje azd usunięcie grupy zasobów bez potwierdzenia.
To polecenie nie ma wpływu na lokalny projekt kodu.