Azure functions - Just the CLI, hold the GUI, add some git
When sitting down to get started on a project, the start and stops of setting this and that up can be a non-starter. Sometimes, ok almost always, I just want check in code and have the build and deploy just happen.
I'm a very big fan of CLI tooling. If I can fire up a bash prompt and get started, you've won me over. The .NET Core team continues to improve the command line tooling experience for all platforms with dotnet new
and if you're pushing your apps to the cloud; the Azure 2.0 CLI is on point for getting stuff done.
Azure CLI - The Azure CLI 2.0 is Azure's new command line experience for managing Azure resources. It runs on Windows, macOS and Linux. Get the installer for your OS here.
Using the portal is good way to get a visual understanding of the architecture or composure of Azure and setting up your first serverless function.
See - Create your first Azure Function - docs.microsoft.com
For repetitive instances, you may want to use ARM template deployments to speed up these infrastructure deployments to get started on your future serverless projects.
ARM template
The following ARM template defines an infrastructure for a Storage Account, Hosting Plan, and Azure Function setup with Continuous Integration tied to a GitHub repo. These are the minimum components for a CI/CD based serverless function in Azure.
The hosting plan in the template is set to be the "Consumption Plan" by default.
azuredeploy.json
Using the Azure CLI we can use this template to create a deployment and parameters in the way of a file or command line arguments to create the infrastructure ready for development.
Log in
az login
Create Resource Group
A Resource Group is a logical grouping of resources in Azure. Best practice is to create/name this resource in a manner that is related to your application. This also allows for ease of locating resources and cleaning up (if you're testing a lot).
The command requires a name and location.
az group create --name "spboyerappgroup" --location "East US"
Parameters
The ARM template (azuredeploy.json see above lines 4-40) defines the following parameters:
- appName
- location
- storageAccountName
- storageAccountType
- repoURL
- branch
Create a new file called parameters.json with the contents.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appName": {
"value": "spboyerappname"
},
"storageAccountName": {
"value": "spboyerstorage"
},
"storageAccountType": {
"value": "Standard_LRS"
},
"repoURL": {
"value": "https://github.com/spboyer/azdev-superhero-api"
},
"branch": {
"value": "master"
},
"location": {
"value": "East US"
}
}
}
One important note is storageAccountName is limited to 3-24 characters, letters and numbers only.
Deploying the template
Use the CLI to deploy the template using a combination of the following options.
- inline parameters
--parameters {}
- local parameters file
--parameters @<filename>
, the@
is required notating the parameters are a file. - external template
--template-uri <uri>
- local template
--template-file <filename>
Deployment using file
az group deployment create --name MyDeployment --resource-group MyResourceGroup --template-file azuredeploy.json --parameters @parameters.json
Deployment using remote template and local parameters file
az group deployment create --name MyDeployment --resource-group MyResourceGroup --template-uri https://raw.githubusercontent.com/spboyer/azdev-functions-deployment/master/azuredeploy.json --parameters @parameters.json
Deployment using command-line parameters
az group deployment create --name MyDeployment --resource-group spboyergroup --template-file azuredeploy.json \
--parameters '{"appName":{"value":"spboyerappname"},"storageAccountName":{"value":"spboyerstorage"},"storageAccountType":{"value":"Standard_LRS"},"repoURL":{"value":"https://github.com/spboyer/azdev-superhero-api"},"branch":{"value":"master"},"location":{"value":"East US"}}'
Resources
- GitHub Project - https://github.com/spboyer/azdev-functions-deployment
- Free Azure Account
- Try Azure Functions Playground - no sign up