02 - First Deploy (Consumption)¶
Deploy your .NET 8 isolated worker app to the Consumption plan with long-form Azure CLI commands and validate your first production endpoint.
Prerequisites¶
| Tool | Version | Purpose |
|---|---|---|
| .NET SDK | 8.0 (LTS) | Build and run isolated worker functions |
| Azure Functions Core Tools | v4 | Start local host and publish artifacts |
| Azure CLI | 2.61+ | Provision Azure resources and inspect app state |
Consumption plan basics
Consumption (Y1) scales to zero and charges per execution. Default timeout is 5 minutes (max 10 minutes). No VNet integration on this plan.
What You'll Build¶
A Linux Consumption Function App running the .NET 8 isolated worker, deployed from your local project with Core Tools, then validated through all HTTP endpoints.
flowchart TD
A[dotnet publish] --> B[func azure functionapp publish]
B --> C[Consumption Function App]
C --> D[16 functions indexed]
D --> E[HTTP endpoint validation] Steps¶
Step 1 - Set deployment variables¶
export RG="rg-func-dotnet-con-demo"
export LOCATION="koreacentral"
export STORAGE_NAME="stdotnetcon0410"
export APP_NAME="func-dotnetcon-04100220"
Step 2 - Create resource group and storage account¶
az group create \
--name "$RG" \
--location "$LOCATION"
az storage account create \
--name "$STORAGE_NAME" \
--resource-group "$RG" \
--location "$LOCATION" \
--sku Standard_LRS
Step 3 - Create the Consumption function app¶
az functionapp create \
--name "$APP_NAME" \
--resource-group "$RG" \
--storage-account "$STORAGE_NAME" \
--consumption-plan-location "$LOCATION" \
--runtime dotnet-isolated \
--runtime-version 8 \
--functions-version 4 \
--os-type Linux
Step 4 - Create trigger resources¶
az storage queue create \
--name "incoming-orders" \
--account-name "$STORAGE_NAME"
az storage container create \
--name "uploads" \
--account-name "$STORAGE_NAME"
Step 5 - Configure app settings¶
STORAGE_CONN=$(az storage account show-connection-string \
--name "$STORAGE_NAME" \
--resource-group "$RG" \
--query connectionString \
--output tsv)
az functionapp config appsettings set \
--name "$APP_NAME" \
--resource-group "$RG" \
--settings \
"QueueStorage=$STORAGE_CONN" \
"EventHubConnection=Endpoint=sb://placeholder.servicebus.windows.net/;SharedAccessKeyName=placeholder;SharedAccessKey=cGxhY2Vob2xkZXI=;EntityPath=events"
Step 6 - Build and publish¶
cd apps/dotnet
dotnet publish --configuration Release --output ./publish
cd publish
func azure functionapp publish "$APP_NAME" --dotnet-isolated
Must pass --dotnet-isolated flag
When publishing from the compiled output directory, Core Tools cannot detect the project language. Always pass --dotnet-isolated to specify the worker runtime explicitly.
Step 7 - Verify function list¶
az functionapp function list \
--name "$APP_NAME" \
--resource-group "$RG" \
--query "[].{name:name, language:language}" \
--output table
Expected output (16 functions):
Name Language
-------------------------------------------- ---------------
func-dotnetcon-04100220/blobProcessor dotnet-isolated
func-dotnetcon-04100220/dnsResolve dotnet-isolated
func-dotnetcon-04100220/eventhubLagProcessor dotnet-isolated
func-dotnetcon-04100220/externalDependency dotnet-isolated
func-dotnetcon-04100220/health dotnet-isolated
func-dotnetcon-04100220/helloHttp dotnet-isolated
func-dotnetcon-04100220/identityProbe dotnet-isolated
func-dotnetcon-04100220/info dotnet-isolated
func-dotnetcon-04100220/logLevels dotnet-isolated
func-dotnetcon-04100220/queueProcessor dotnet-isolated
func-dotnetcon-04100220/scheduledCleanup dotnet-isolated
func-dotnetcon-04100220/slowResponse dotnet-isolated
func-dotnetcon-04100220/storageProbe dotnet-isolated
func-dotnetcon-04100220/testError dotnet-isolated
func-dotnetcon-04100220/timerLab dotnet-isolated
func-dotnetcon-04100220/unhandledError dotnet-isolated
Step 8 - Test HTTP endpoints¶
curl --request GET "https://$APP_NAME.azurewebsites.net/api/health"
curl --request GET "https://$APP_NAME.azurewebsites.net/api/hello/Consumption"
curl --request GET "https://$APP_NAME.azurewebsites.net/api/info"
Verification¶
Uploading 6.82 MB [-----------------------------------------------------------]
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...
App state:
State DefaultHostName Kind
------- ----------------------------------------- -----------------
Running func-dotnetcon-04100220.azurewebsites.net functionapp,linux
Health endpoint response:
.NET upload size
The .NET isolated worker publish output is approximately 6.82 MB, larger than Java (~326 KB) because it includes the ASP.NET Core runtime dependencies.
Next Steps¶
Next: 03 - Configuration
See Also¶
- Tutorial Overview & Plan Chooser
- .NET Language Guide
- Platform: Hosting Plans
- Operations: Deployment
- Recipes Index