Skip to content

Commit ece376f

Browse files
chore: dev to main (Improve Logging & Telemetry, Standardize Deployment Parameters)
2 parents c6cc8b3 + a43838d commit ece376f

23 files changed

Lines changed: 2390 additions & 382 deletions

.github/workflows/azure-dev-validation.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Azure Template Validation
22
on:
3-
workflow_dispatch:
3+
workflow_dispatch:
44

55
permissions:
66
contents: read
@@ -11,6 +11,7 @@ permissions:
1111
jobs:
1212
template_validation_job:
1313
runs-on: ubuntu-latest
14+
environment: production
1415
name: Template validation
1516

1617
steps:
@@ -21,13 +22,19 @@ jobs:
2122
# Step 2: Validate the Azure template using microsoft/template-validation-action
2223
- name: Validate Azure Template
2324
uses: microsoft/template-validation-action@v0.4.4
25+
with:
26+
validateAzd: true
27+
useDevContainer: false
28+
validateTests: false
2429
id: validation
2530
env:
2631
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
2732
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
2833
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
2934
AZURE_ENV_NAME: ${{ secrets.AZURE_ENV_NAME }}
3035
AZURE_LOCATION: ${{ secrets.AZURE_LOCATION }}
36+
AZURE_ENV_OPENAI_LOCATION: ${{ vars.AZURE_ENV_OPENAI_LOCATION || 'eastus2' }}
37+
AZURE_ENV_USE_CASE: ${{ vars.AZURE_ENV_USE_CASE || 'telecom' }}
3138
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3239
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
3340

.github/workflows/azure-dev.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: Deploy to Azure
2+
3+
on:
4+
workflow_dispatch:
5+
# push:
6+
# branches:
7+
# - main
8+
9+
# Set up permissions for deploying with secretless Azure federated credentials
10+
# https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure?tabs=azure-portal%2Clinux#set-up-azure-login-with-openid-connect-authentication
11+
permissions:
12+
id-token: write
13+
contents: read
14+
15+
jobs:
16+
build:
17+
runs-on: ubuntu-latest
18+
environment: production
19+
env:
20+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
21+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
22+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
23+
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
24+
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
25+
AZURE_ENV_OPENAI_LOCATION: ${{ vars.AZURE_ENV_OPENAI_LOCATION || 'eastus2' }}
26+
AZURE_ENV_USE_CASE: ${{ vars.AZURE_ENV_USE_CASE || 'telecom' }}
27+
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
28+
steps:
29+
- name: Checkout
30+
uses: actions/checkout@v6
31+
32+
- name: Install azd
33+
uses: Azure/setup-azd@v2.0.0
34+
35+
- name: Log in with Azure (Federated Credentials)
36+
run: |
37+
azd auth login `
38+
--client-id "$Env:AZURE_CLIENT_ID" `
39+
--federated-credential-provider "github" `
40+
--tenant-id "$Env:AZURE_TENANT_ID"
41+
shell: pwsh
42+
43+
- name: Provision Infrastructure
44+
run: azd provision --no-prompt
45+
env:
46+
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
47+
48+
- name: Deploy Application
49+
run: azd deploy --no-prompt

README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ Leverages Azure Content Understanding, Foundry IQ, Azure OpenAI Service, Azure A
3434

3535
<br/>
3636

37+
## Features
38+
3739
### Key features
3840
<details open>
3941
<summary>Click to learn more about the key features this solution enables</summary>
@@ -58,6 +60,8 @@ Summarized conversations, topic generation, and key phrase extraction support fa
5860

5961

6062
<br /><br />
63+
## Getting Started
64+
6165
<h2><img src="./documents/Images/ReadMe/quick-deploy.png" width="48" />
6266
Quick deploy
6367
</h2>
@@ -79,6 +83,8 @@ Follow the quick deploy steps on the deployment guide to deploy this solution
7983
8084
<br/>
8185

86+
## Guidance
87+
8288
### Prerequisites and costs
8389
To deploy this solution accelerator, ensure you have access to an [Azure subscription](https://azure.microsoft.com/free/) with the necessary permissions to create **resource groups, resources, app registrations, and assign roles at the resource group level**. This should include Contributor role at the subscription level and Role Based Access Control role on the subscription and/or resource group level. Follow the steps in [Azure Account Set Up](./documents/AzureAccountSetUp.md).
8490

@@ -96,6 +102,11 @@ _Note: This is not meant to outline all costs as selected SKUs, scaled use, cust
96102

97103
<br/>
98104

105+
>⚠️ **Important:** To avoid unnecessary costs, remember to take down your app if it's no longer in use,
106+
either by deleting the resource group in the Portal or running `azd down`.
107+
108+
## Resources
109+
99110
| Product | Description | Tier / Expected Usage Notes | Cost |
100111
|---|---|---|---|
101112
| [Microsoft Foundry](https://learn.microsoft.com/en-us/azure/ai-foundry) | Used to orchestrate and build AI workflows that combine Azure AI services. | Free Tier | [Pricing](https://azure.microsoft.com/pricing/details/ai-studio/) |
@@ -112,8 +123,6 @@ _Note: This is not meant to outline all costs as selected SKUs, scaled use, cust
112123

113124
<br/>
114125

115-
>⚠️ **Important:** To avoid unnecessary costs, remember to take down your app if it's no longer in use,
116-
either by deleting the resource group in the Portal or running `azd down`.
117126

118127
<br /><br />
119128
<h2><img src="./documents/Images/ReadMe/business-scenario.png" width="48" />

documents/CustomizingAzdParameters.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ By default this template will use the environment name as the prefix to prevent
2626
| `AZURE_EXISTING_AI_PROJECT_RESOURCE_ID` | string | `<Existing AI Project resource Id>` | Reuses an existing AIFoundry and AIFoundryProject instead of creating a new one. |
2727
| `AZURE_ENV_VM_ADMIN_USERNAME` | string | `take(newGuid(), 20)` | The administrator username for the virtual machine. |
2828
| `AZURE_ENV_VM_ADMIN_PASSWORD` | string | `newGuid()` | The administrator password for the virtual machine. |
29+
| `AZURE_ENV_VM_SIZE` | string | `Standard_D2s_v5` | The size/SKU of the Jumpbox Virtual Machine (e.g., `Standard_D2s_v5`, `Standard_DS2_v2`). |
2930
| `AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT` | string | `<Container Registry Endpoint>` | The hostname/endpoint for the container registry used by both backend and frontend containers. |
3031

3132

documents/TroubleShootingSteps.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Use these as quick reference guides to unblock your deployments.
6161
| **ServiceQuotaExceeded** | Free tier service quota limit reached for Azure AI Search | This error occurs when you attempt to deploy an Azure AI Search service but have already reached the **free tier quota limit** for your subscription. Each Azure subscription is limited to **one free tier Search service**.<br><br>**Example error message:**<br>`ServiceQuotaExceeded: Operation would exceed 'free' tier service quota. You are using 1 out of 1 'free' tier service quota.`<br><br>**Common causes:**<br><ul><li>Already have a free tier Azure AI Search service in the subscription</li><li>Previous deployment created a free tier Search service that wasn't deleted</li><li>Attempting to deploy multiple environments with free tier Search services</li></ul><br>**Resolution:**<br><ul><li>**Option 1: Delete existing free tier Search service:**<br>`az search service list --query "[?sku.name=='free']" -o table`<br>`az search service delete --name <service-name> --resource-group <rg-name> --yes`</li><li>**Option 2: Upgrade to a paid SKU:**<br>Modify your Bicep/ARM template to use `basic`, `standard`, or higher SKU instead of `free`</li><li>**Option 3: Use existing Search service:**<br>Reference the existing free tier Search service in your deployment instead of creating a new one</li><li>**Request quota increase:**<br>Submit a support request with issue type 'Service and subscription limits (quota)' and quota type 'Search' via [Azure Quota Request](https://aka.ms/AddQuotaSubscription)</li></ul><br>**Reference:**<br><ul><li>[Azure AI Search service limits](https://learn.microsoft.com/en-us/azure/search/search-limits-quotas-capacity)</li><li>[Azure AI Search pricing tiers](https://learn.microsoft.com/en-us/azure/search/search-sku-tier)</li></ul> |
6262
| **InsufficientQuota** | Not enough quota available in subscription | <ul><li>Check if you have sufficient quota available in your subscription before deployment</li><li>To verify, refer to the [quota_check](../documents/QuotaCheck.md) file for details</li></ul> |
6363
| **MaxNumberOfRegionalEnvironmentsInSubExceeded** | Maximum Container App Environments limit reached for region |This error occurs when you attempt to create more **Azure Container App Environments** than the regional quota limit allows for your subscription. Each Azure region has a specific limit on the number of Container App Environments that can be created per subscription.<br><br>**Common Causes:**<br><ul><li>Deploying to regions with low quota limits (e.g., Sweden Central allows only 1 environment)</li><li>Multiple deployments without cleaning up previous environments</li><li>Exceeding the standard limit of 15 environments in most major regions</li></ul><br>**Resolution:**<br><ul><li>**Delete unused environments** in the target region, OR</li><li>**Deploy to a different region** with available capacity, OR</li><li>**Request quota increase** via [Azure Support](https://go.microsoft.com/fwlink/?linkid=2208872)</li></ul><br>**Reference:**<br><ul><li>[Azure Container Apps quotas](https://learn.microsoft.com/en-us/azure/container-apps/quotas)</li><li>[Azure subscription and service limits](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits)</li></ul> |
64-
| **SkuNotAvailable** | Requested SKU not available in selected location or zone | You receive this error in the following scenarios:<br><ul><li>When the resource SKU you've selected, such as VM size, isn't available for a location or zone</li><li>If you're deploying an Azure Spot VM or Spot scale set instance, and there isn't any capacity for Azure Spot in this location. For more information, see Spot error messages</li></ul> |
64+
| **SkuNotAvailable** | Requested SKU not available in selected location or zone | This error occurs when the resource SKU you've selected (such as VM size) isn't available for the target location or availability zone.<br><br>**In this deployment**, the jumpbox VM defaults to `Standard_D2s_v5`. While this size is available in most regions, certain regions or zones may not support it.<br><br>**Resolution:**<br><ul><li>**Check SKU availability** for your target region:<br>`az vm list-skus --location <region> --size Standard_D2s --output table`</li><li>**Override the VM size** if the default isn't available in your region:<br>`azd env set AZURE_ENV_VM_SIZE Standard_D2s_v4`</li><li>**Recommended alternatives** (all support accelerated networking + Premium SSD):<br>- `Standard_D2s_v4` — previous gen, identical pricing<br>- `Standard_D2as_v5` — AMD-based, similar pricing<br>- `Standard_D2s_v3` — older gen, widely available</li><li>**Avoid A-series VMs** (e.g., `Standard_A2m_v2`) — they do not support accelerated networking or Premium SSD, which are required by this deployment</li></ul><br>**Reference:**<br><ul><li>[Resolve errors for SKU not available](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-sku-not-available)</li><li>[Azure VM sizes - Dsv5 series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dsv5-series)</li></ul> |
6565
| **Conflict - No available instances to satisfy this request** | Azure App Service has insufficient capacity in the region | This error occurs when Azure App Service doesn't have enough available compute instances in the selected region to provision or scale your app.<br><br>**Common Causes:**<br><ul><li>High demand in the selected region (e.g., East US, West Europe)</li><li>Specific SKUs experiencing capacity constraints (Free, Shared, or certain Premium tiers)</li><li>Multiple rapid deployments in the same region</li></ul><br>**Resolution:**<br><ul><li>**Wait and Retry** (15-30 minutes): `azd up`</li><li>**Deploy to a New Resource Group** (Recommended for urgent cases):<br>```<br>azd down --force --purge<br>azd up<br>```</li><li>**Try a Different Region:**<br>Update region in `main.bicep` or `azure.yaml` to a less congested region (e.g., `westus2`, `centralus`, `northeurope`)</li><li>**Use a Different SKU/Tier:**<br>If using Free/Shared tier, upgrade to Basic or Standard<br>Check SKU availability: `az appservice list-locations --sku <sku-name>`</li></ul><br>**Reference:** [Azure App Service Plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans) |
6666

6767
--------------------------------

0 commit comments

Comments
 (0)