== Azure Functions HTTP triggers sample
IMPORTANT: For a general information about building and deploying `Azure Functions` with Spring Cloud Function, consult the https://docs.spring.io/spring-cloud-function/docs/current/reference/html/azure.html[Azure Adapter] documentation.
Azure Functions may be invoked via HTTP requests to build serverless APIs.
Find more about the https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook?tabs=in-process%2Cfunctionsv2&pivots=programming-language-java[HTTP triggers].
=== Usage
==== Package Staging folder
Use the script below to package your staging folder:
[source,shell]
----
./mvnw clean package
----
==== Run Azure Functions locally
Use the script below to run the function locally.
[source,shell]
----
./mvnw azure-functions:run
----
NOTE: To run locally on top of `Azure Functions`, and to deploy to your live Azure environment, you will need `Azure Functions Core Tools` installed along with the Azure CLI (see https://docs.microsoft.com/en-us/azure/azure-functions/create-first-function-cli-java?tabs=bash%2Cazure-cli%2Cbrowser#configure-your-local-environment[here]).
NOTE: https://github.com/Azure/azure-functions-core-tools[Azure Functions Core Tools] version `4.0.5030` or newer is required!
For some configuration you would need the https://learn.microsoft.com/en-us/azure/storage/common/storage-use-emulator[Azurite emulator] as well.
==== Deploy Azure Functions to Azure Cloud
Make sure you are logged in your Azure account.
[source,shell]
----
az login
----
then build and deploy
[source,shell]
----
./mvnw clean package
./mvnw azure-functions:deploy
----
==== Debug locally
Run the function in debug mode.
[source,shell]
----
./mvnw azure-functions:run -DenableDebug
----
Alternatively and the `JAVA_OPTS` value to your `local.settings.json` like this:
[source,json]
----
{
"IsEncrypted": false,
"Values": {
...
"FUNCTIONS_WORKER_RUNTIME": "java",
"JAVA_OPTS": "-Djava.net.preferIPv4Stack=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=127.0.0.1:5005"
}
}
----
For VSCode remote debug use configuration like this:
[source,json]
----
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Attach to Remote Program",
"request": "attach",
"hostName": "localhost",
"port": "5005"
},
...
]
}
----