Example Project from A First Look at Azure Functions
Azure Functions is an event-driven serverless compute platform that manages deploying and maintaining servers. It provides all up-to-date resources and orchestration needed to keep your applications running. Developer tools for debugging are included along with triggers and bindings for integrating services.
git clone https://github.com/ajcwebdev/a-first-look.git
cd deployment/azure-functionsA Functions project directory contains host.json, local.settings.json, and subfolders with the code for individual functions.
The host.json metadata file contains global configuration options that affect all functions for a function app.
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
}
}The local.settings.json file stores app settings, connection strings, and settings used by local development tools.
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"AzureWebJobsStorage": ""
}
}HTTP triggers let you invoke a function with an HTTP request. You can use an HTTP trigger to build serverless APIs and respond to webhooks.
// index.js
module.exports = async function (context, req) {
context.log('You did it!')
const name = (req.query.name || (req.body && req.body.name))
const responseMessage = name
? "Hello, " + name + ". It worked!"
: "It worked! Pass a name for a personalized response."
context.res = {
status: 200,
body: responseMessage
}
}In function.json, req and res are set to the direction in and out. Requests can be get or post.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}To run a Functions project, run the Functions host with the Azure Functions Core Tools.
Azure Functions Core Tools includes a version of the same runtime that powers Azure Functions runtime that you can run on your local development computer. It also provides commands to create functions, connect to Azure, and deploy function projects.
brew tap azure/functions
brew install azure-functions-core-tools@3The host enables triggers for all functions in the project.
func startWhen the Functions host starts, it outputs the URL of HTTP-triggered functions:
Core Tools Version: 3.0.3477
Commit hash: 5fbb9a76fc00e4168f2cc90d6ff0afe5373afc6d (64-bit)
Function Runtime Version: 3.0.15584.0
Functions:
HttpTrigger: [GET,POST] http://localhost:7071/api/HttpTrigger
For detailed output, run func with --verbose flag.
Alternatively, you can test the endpoints with curl.
curl --get http://localhost:7071/api/HttpTriggercurl --request POST http://localhost:7071/api/HttpTrigger \
--data '{"name":"ajcwebdev"}'To publish a function you must create a function app with an Azure subscription. A subscription is a container used to provision resources in Azure. It holds the details of all your resources such as VMs and databases.
When you create an Azure resource like a VM, you identify the subscription it belongs to so usage of the VM can be aggregated and billed monthly. You must use the Azure portal to create a subscription.
Select Subscriptions.
Click add.
Give your subscription a name.
There are numerous ways to install the Azure CLI depending on your development environment. I followed the instructions for installing with Homebrew on MacOS.
brew install azure-cliaz versionLog in to Azure with az login.
az loginIf you have Multi-Factor Authentication setup then you will need to use az login --tenant TENANT_ID to explicitly login to a tenant. You can find your tenant ID on the Azure Active Directory portal.
az account set \
--subscription ajcwebdev-subscriptionA function app maps to your local function project and lets you group functions as a logical unit for easier management, deployment, and sharing of resources. Before you can deploy your function code to Azure, you need to create three resources:
- Resource group - logical container for related resources
- Storage account - maintains state and other information about the functions
- Function app - environment for executing function code
The az group create command creates a resource group.
az group create \
--name ajcwebdev-rg \
--location westusThe az storage account create command creates the storage account.
az storage account create \
--name ajcwebdevstorage \
--location westus \
--resource-group ajcwebdev-rg \
--sku Standard_LRSStandard_LRS creates a general-purpose storage account in your resource group and region.
The az functionapp create command creates the function app in Azure.
az functionapp create \
--resource-group ajcwebdev-rg \
--consumption-plan-location westus \
--runtime node \
--runtime-version 12 \
--functions-version 3 \
--name ajcwebdev-function-app \
--storage-account ajcwebdevstorageThis specifies:
ajcwebdev-rgfor the resource groupajcwebdevstoragefor the storage accountajcwebdev-function-appfor the name of the function app
The func azure functionapp publish command deploys your local functions project to Azure.
func azure functionapp publish ajcwebdev-function-appOutput:
Getting site publishing info...
Creating archive for current directory...
Uploading 1.63 KB
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...
Functions in ajcwebdev-function-app:
HttpTrigger - [httpTrigger]
Invoke url: https://ajcwebdev-function-app.azurewebsites.net/api/httptrigger?code=qFdxLBSxkswsQ/NZIeooMTlC4WS9awDgaGZi/OJPqgUzcKQYFYIwJA==
Enter the provided URL or add &name=person.
You can also view the home page of your function app at ajcwebdev-function-app.azurewebsites.net.







