This repository contains an Azure Functions HTTP trigger reference sample written in Java and deployed to Azure using Azure Developer CLI (azd
). The sample uses managed identity and a virtual network to make sure deployment is secure by default. You can opt out of a VNet being used in the sample by setting VNET_ENABLED to false in the parameters.
This source code supports the article Quickstart: Create and deploy functions to Azure Functions using the Azure Developer CLI.
JAVA_HOME
environment variable must be set to the install location of the correct version of the JDK.azd
)You can initialize a project from this azd
template in one of these ways:
Use this azd init
command from an empty local (root) folder:
azd init --template azure-functions-java-flex-consumption-azd
Supply an environment name, such as flexquickstart
when prompted. In azd
, the environment is used to maintain a unique deployment context for your app.
Clone the GitHub template repository locally using the git clone
command:
git clone https://github.com/Azure-Samples/azure-functions-java-flex-consumption-azd.git cd azure-functions-java-flex-consumption-azd
You can also clone the repository from your own fork in GitHub.
Navigate to the http
app folder and create a file in that folder named local.settings.json that contains this JSON data:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }Run your app from the terminal
From the http
folder, run these commands to start the Functions host locally:
mvn clean package mvn azure-functions:run
From your HTTP test tool in a new terminal (or from your browser), call the HTTP GET endpoint: http://localhost:7071/api/httpget
Test the HTTP POST trigger with a payload using your favorite secure HTTP test tool. This example runs in the http
folder and uses the curl
tool with payload data from the testdata.json
project file:
curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@testdata.json"
When you're done, press Ctrl+C in the terminal window to stop the func.exe
host process.
code .
code command to open the project in Visual Studio Code.httpget
and httppost
endpoints respectively using your HTTP test tool (or browser for httpget
). If you have the RestClient extension installed, you can execute requests directly from the test.http
project file.The source code for the GET and POST functions is found in the Function.java
file. The function is identified as an Azure Function by use of the @FunctionName
and @HttpTrigger
annotations from the azure.functions.java.library.version
library in the POM.
This code defines an HTTP GET triggered function:
@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(); }
This code defines an HTTP POST triggered function, which expects a JSON payload with name
and age
values in the request.
@FunctionName("httppost") public HttpResponseMessage runPost( @HttpTrigger( name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request, final ExecutionContext context) { context.getLogger().info("Java HTTP trigger processed a POST request."); // Parse request body String name; Integer age; try { ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(request.getBody().orElse("{}")); name = Optional.ofNullable(jsonNode.get("name")).map(JsonNode::asText).orElse(null); age = Optional.ofNullable(jsonNode.get("age")).map(JsonNode::asInt).orElse(null); if (name == null || age == null) { return request.createResponseBuilder(HttpStatus.BAD_REQUEST) .body("Please provide both name and age in the request body.").build(); } } catch (Exception e) { context.getLogger().severe("Error parsing request body: " + e.getMessage()); return request.createResponseBuilder(HttpStatus.BAD_REQUEST) .body("Error parsing request body").build(); } return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name +"! You are " + age +" years old.").build(); }
Run this command to provision the function app, with any required Azure resources, and deploy your code:
By default, this sample uses a virtual network to ensure your deployment is secure by default. You can opt-out of a VNet being used by setting VNET_ENABLED to false before running azd up
:
azd env set VNET_ENABLED false azd up
You're prompted to supply these required deployment parameters:
Parameter Description Environment name An environment that's used to maintain a unique deployment context for your app. You won't be prompted if you created the local project usingazd init
. Azure subscription Subscription in which your resources are created. Azure location Azure region in which to create the resource group that contains the new Azure resources. Only regions that currently support the Flex Consumption plan are shown.
After publish completes successfully, azd
provides you with the URL endpoints of your new functions, but without the function key values required to access the endpoints. To learn how to obtain these same endpoints along with the required function keys, see Invoke the function on Azure in the companion article Quickstart: Create and deploy functions to Azure Functions using the Azure Developer CLI.
You can run the azd up
command as many times as you need to both provision your Azure resources and deploy code updates to your function app.
Note
Deployed code files are always overwritten by the latest deployment package.
When you're done working with your function app and related resources, you can use this command to delete the function app and its related resources from Azure and avoid incurring any further costs:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4