From f7308c22587d673d2147418d5c2337378c96c7f5 Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Mon, 7 Sep 2026 16:23:41 +0200 Subject: [PATCH 01/13] Point Terraform samples at azure.localhost.localstack.cloud:4566 Use the Azure-scoped emulator host as the azurerm provider metadata_host in every sample's providers.tf and in the Terraform READMEs that quote it, so the documented configuration matches what the deploy scripts apply. Co-Authored-By: Claude Fable 5.1 --- samples/aci-blob-storage/python/terraform/README.md | 2 +- samples/aci-blob-storage/python/terraform/providers.tf | 2 +- samples/container-apps-blob-storage/python/terraform/README.md | 2 +- .../container-apps-blob-storage/python/terraform/providers.tf | 2 +- samples/eventhubs-eventgrid/python/terraform/providers.tf | 2 +- samples/eventhubs/python/terraform/README.md | 2 +- samples/eventhubs/python/terraform/providers.tf | 2 +- .../function-app-managed-identity/python/terraform/README.md | 2 +- .../function-app-managed-identity/python/terraform/providers.tf | 2 +- samples/function-app-service-bus/dotnet/terraform/README.md | 2 +- samples/function-app-service-bus/dotnet/terraform/providers.tf | 2 +- samples/function-app-storage-http/dotnet/terraform/README.md | 2 +- samples/function-app-storage-http/dotnet/terraform/providers.tf | 2 +- samples/servicebus/java/terraform/README.md | 2 +- samples/servicebus/java/terraform/providers.tf | 2 +- samples/url-shortener/python/terraform/providers.tf | 2 +- samples/web-app-cosmosdb-mongodb-api/python/terraform/README.md | 2 +- .../web-app-cosmosdb-mongodb-api/python/terraform/providers.tf | 2 +- samples/web-app-custom-image/python/terraform/README.md | 2 +- samples/web-app-custom-image/python/terraform/providers.tf | 2 +- samples/web-app-managed-identity/python/terraform/README.md | 2 +- samples/web-app-managed-identity/python/terraform/providers.tf | 2 +- .../web-app-mysql-flexible-server/python/terraform/providers.tf | 2 +- .../python/terraform/providers.tf | 2 +- samples/web-app-sql-database/python/terraform/README.md | 2 +- samples/web-app-sql-database/python/terraform/providers.tf | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/samples/aci-blob-storage/python/terraform/README.md b/samples/aci-blob-storage/python/terraform/README.md index 1c3dedf..94facad 100644 --- a/samples/aci-blob-storage/python/terraform/README.md +++ b/samples/aci-blob-storage/python/terraform/README.md @@ -38,7 +38,7 @@ provider "azurerm" { prevent_deletion_if_contains_resources = false } } - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" subscription_id = "00000000-0000-0000-0000-000000000000" } ``` diff --git a/samples/aci-blob-storage/python/terraform/providers.tf b/samples/aci-blob-storage/python/terraform/providers.tf index 5201455..266e75d 100644 --- a/samples/aci-blob-storage/python/terraform/providers.tf +++ b/samples/aci-blob-storage/python/terraform/providers.tf @@ -19,7 +19,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/container-apps-blob-storage/python/terraform/README.md b/samples/container-apps-blob-storage/python/terraform/README.md index 1e03c8a..8b380df 100644 --- a/samples/container-apps-blob-storage/python/terraform/README.md +++ b/samples/container-apps-blob-storage/python/terraform/README.md @@ -36,7 +36,7 @@ provider "azurerm" { prevent_deletion_if_contains_resources = false } } - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" subscription_id = "00000000-0000-0000-0000-000000000000" } ``` diff --git a/samples/container-apps-blob-storage/python/terraform/providers.tf b/samples/container-apps-blob-storage/python/terraform/providers.tf index 5201455..266e75d 100644 --- a/samples/container-apps-blob-storage/python/terraform/providers.tf +++ b/samples/container-apps-blob-storage/python/terraform/providers.tf @@ -19,7 +19,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/eventhubs-eventgrid/python/terraform/providers.tf b/samples/eventhubs-eventgrid/python/terraform/providers.tf index cfe920b..f3beceb 100644 --- a/samples/eventhubs-eventgrid/python/terraform/providers.tf +++ b/samples/eventhubs-eventgrid/python/terraform/providers.tf @@ -20,7 +20,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/eventhubs/python/terraform/README.md b/samples/eventhubs/python/terraform/README.md index 49e006d..bd6a438 100644 --- a/samples/eventhubs/python/terraform/README.md +++ b/samples/eventhubs/python/terraform/README.md @@ -9,7 +9,7 @@ application code with the Azure CLI. - `terraform` and `az` are on the PATH. The provider is already pointed at the emulator in `providers.tf` -(`metadata_host = "localhost.localstack.cloud:4566"`), so no `tflocal` wrapper is needed. +(`metadata_host = "azure.localhost.localstack.cloud:4566"`), so no `tflocal` wrapper is needed. ## Usage diff --git a/samples/eventhubs/python/terraform/providers.tf b/samples/eventhubs/python/terraform/providers.tf index cfe920b..f3beceb 100644 --- a/samples/eventhubs/python/terraform/providers.tf +++ b/samples/eventhubs/python/terraform/providers.tf @@ -20,7 +20,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/function-app-managed-identity/python/terraform/README.md b/samples/function-app-managed-identity/python/terraform/README.md index b65526f..46e15f7 100644 --- a/samples/function-app-managed-identity/python/terraform/README.md +++ b/samples/function-app-managed-identity/python/terraform/README.md @@ -76,7 +76,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/function-app-managed-identity/python/terraform/providers.tf b/samples/function-app-managed-identity/python/terraform/providers.tf index 25af634..6682178 100644 --- a/samples/function-app-managed-identity/python/terraform/providers.tf +++ b/samples/function-app-managed-identity/python/terraform/providers.tf @@ -19,7 +19,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/function-app-service-bus/dotnet/terraform/README.md b/samples/function-app-service-bus/dotnet/terraform/README.md index 55c5ccd..ed4e8a2 100644 --- a/samples/function-app-service-bus/dotnet/terraform/README.md +++ b/samples/function-app-service-bus/dotnet/terraform/README.md @@ -94,7 +94,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/function-app-service-bus/dotnet/terraform/providers.tf b/samples/function-app-service-bus/dotnet/terraform/providers.tf index 0b17881..1f06025 100644 --- a/samples/function-app-service-bus/dotnet/terraform/providers.tf +++ b/samples/function-app-service-bus/dotnet/terraform/providers.tf @@ -17,7 +17,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/function-app-storage-http/dotnet/terraform/README.md b/samples/function-app-storage-http/dotnet/terraform/README.md index 9db1b48..f1374b5 100644 --- a/samples/function-app-storage-http/dotnet/terraform/README.md +++ b/samples/function-app-storage-http/dotnet/terraform/README.md @@ -71,7 +71,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/function-app-storage-http/dotnet/terraform/providers.tf b/samples/function-app-storage-http/dotnet/terraform/providers.tf index 25af634..6682178 100644 --- a/samples/function-app-storage-http/dotnet/terraform/providers.tf +++ b/samples/function-app-storage-http/dotnet/terraform/providers.tf @@ -19,7 +19,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/servicebus/java/terraform/README.md b/samples/servicebus/java/terraform/README.md index c2b31f7..072fc62 100644 --- a/samples/servicebus/java/terraform/README.md +++ b/samples/servicebus/java/terraform/README.md @@ -69,7 +69,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/servicebus/java/terraform/providers.tf b/samples/servicebus/java/terraform/providers.tf index 0b17881..1f06025 100644 --- a/samples/servicebus/java/terraform/providers.tf +++ b/samples/servicebus/java/terraform/providers.tf @@ -17,7 +17,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/url-shortener/python/terraform/providers.tf b/samples/url-shortener/python/terraform/providers.tf index 95bbc9d..85b3364 100644 --- a/samples/url-shortener/python/terraform/providers.tf +++ b/samples/url-shortener/python/terraform/providers.tf @@ -23,7 +23,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-cosmosdb-mongodb-api/python/terraform/README.md b/samples/web-app-cosmosdb-mongodb-api/python/terraform/README.md index 4ccf1c2..c79660d 100644 --- a/samples/web-app-cosmosdb-mongodb-api/python/terraform/README.md +++ b/samples/web-app-cosmosdb-mongodb-api/python/terraform/README.md @@ -81,7 +81,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-cosmosdb-mongodb-api/python/terraform/providers.tf b/samples/web-app-cosmosdb-mongodb-api/python/terraform/providers.tf index 0b17881..1f06025 100644 --- a/samples/web-app-cosmosdb-mongodb-api/python/terraform/providers.tf +++ b/samples/web-app-cosmosdb-mongodb-api/python/terraform/providers.tf @@ -17,7 +17,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-custom-image/python/terraform/README.md b/samples/web-app-custom-image/python/terraform/README.md index c8a1c18..c607381 100644 --- a/samples/web-app-custom-image/python/terraform/README.md +++ b/samples/web-app-custom-image/python/terraform/README.md @@ -78,7 +78,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-custom-image/python/terraform/providers.tf b/samples/web-app-custom-image/python/terraform/providers.tf index 873ef7f..1246b2e 100644 --- a/samples/web-app-custom-image/python/terraform/providers.tf +++ b/samples/web-app-custom-image/python/terraform/providers.tf @@ -21,7 +21,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-managed-identity/python/terraform/README.md b/samples/web-app-managed-identity/python/terraform/README.md index 3aff1a3..8fd5cd5 100644 --- a/samples/web-app-managed-identity/python/terraform/README.md +++ b/samples/web-app-managed-identity/python/terraform/README.md @@ -65,7 +65,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-managed-identity/python/terraform/providers.tf b/samples/web-app-managed-identity/python/terraform/providers.tf index 25af634..6682178 100644 --- a/samples/web-app-managed-identity/python/terraform/providers.tf +++ b/samples/web-app-managed-identity/python/terraform/providers.tf @@ -19,7 +19,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-mysql-flexible-server/python/terraform/providers.tf b/samples/web-app-mysql-flexible-server/python/terraform/providers.tf index 0b17881..1f06025 100644 --- a/samples/web-app-mysql-flexible-server/python/terraform/providers.tf +++ b/samples/web-app-mysql-flexible-server/python/terraform/providers.tf @@ -17,7 +17,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-postgresql-flexible-server/python/terraform/providers.tf b/samples/web-app-postgresql-flexible-server/python/terraform/providers.tf index 0b17881..1f06025 100644 --- a/samples/web-app-postgresql-flexible-server/python/terraform/providers.tf +++ b/samples/web-app-postgresql-flexible-server/python/terraform/providers.tf @@ -17,7 +17,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-sql-database/python/terraform/README.md b/samples/web-app-sql-database/python/terraform/README.md index 037c9fd..082ff14 100644 --- a/samples/web-app-sql-database/python/terraform/README.md +++ b/samples/web-app-sql-database/python/terraform/README.md @@ -61,7 +61,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host="localhost.localstack.cloud:4566" + metadata_host="azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" diff --git a/samples/web-app-sql-database/python/terraform/providers.tf b/samples/web-app-sql-database/python/terraform/providers.tf index 25af634..6682178 100644 --- a/samples/web-app-sql-database/python/terraform/providers.tf +++ b/samples/web-app-sql-database/python/terraform/providers.tf @@ -19,7 +19,7 @@ provider "azurerm" { # Set the hostname of the Azure Metadata Service (for example management.azure.com) # used to obtain the Cloud Environment when using LocalStack's Azure emulator. # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. - metadata_host = "localhost.localstack.cloud:4566" + metadata_host = "azure.localhost.localstack.cloud:4566" # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. subscription_id = "00000000-0000-0000-0000-000000000000" From 5fc089ac8d5fbd6976ad6c4fcad9341f29e2b299 Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Mon, 7 Sep 2026 16:56:42 +0200 Subject: [PATCH 02/13] Add .NET 10 ports of the custom-image and managed-identity web app samples Introduce the ASP.NET Core Razor Pages port of the Vacation Planner used by every web-app sample: one Index page with TempData flash messages, a Delete page keyed on the store id, an IActivityStore abstraction initialized at startup, a /health endpoint, and Kestrel binding to the PORT that App Service and the emulator inject. The custom-image variant serves the same info page and /api/status from a multi-stage sdk:10.0 -> aspnet:10.0 image; the managed-identity variant stores one blob per activity through DefaultAzureCredential. Deployment artifacts mirror the Python siblings: DOTNETCORE|10.0 code deployment with the project source zipped for the Oryx build, dotnet_version in Terraform, runtimeName 'dotnetcore' in Bicep, unchanged WEBSITES_PORT values and validation scripts. Register both samples in run-samples.sh, link them from the root README and normalize line endings for C# sources. Co-Authored-By: Claude Fable 5.1 --- .gitattributes | 3 + README.md | 14 +- run-samples.sh | 16 + samples/web-app-custom-image/dotnet/README.md | 83 ++ .../dotnet/bicep/README.md | 294 +++++ .../dotnet/bicep/acr.bicep | 81 ++ .../dotnet/bicep/acr.bicepparam | 8 + .../dotnet/bicep/deploy.sh | 254 ++++ .../dotnet/bicep/main.bicep | 305 +++++ .../dotnet/bicep/main.bicepparam | 10 + .../bicep/modules/app-service-plan.bicep | 154 +++ .../bicep/modules/container-registry.bicep | 135 +++ .../dotnet/bicep/modules/log-analytics.bicep | 45 + .../bicep/modules/managed-identity.bicep | 54 + .../bicep/modules/private-dns-zone.bicep | 41 + .../bicep/modules/private-endpoint.bicep | 72 ++ .../bicep/modules/virtual-network.bicep | 239 ++++ .../dotnet/bicep/modules/web-app.bicep | 210 ++++ .../dotnet/images/architecture.png | Bin 0 -> 121286 bytes .../dotnet/scripts/README.md | 258 +++++ .../dotnet/scripts/call-web-app.sh | 36 + .../dotnet/scripts/deploy.sh | 1023 +++++++++++++++++ .../dotnet/scripts/validate.sh | 132 +++ .../dotnet/src/.dockerignore | 4 + .../dotnet/src/AppInfo.cs | 11 + .../dotnet/src/Dockerfile | 16 + .../dotnet/src/Pages/Index.cshtml | 35 + .../dotnet/src/Pages/Index.cshtml.cs | 16 + .../dotnet/src/Pages/_ViewImports.cshtml | 3 + .../dotnet/src/Program.cs | 29 + .../dotnet/src/VacationPlanner.csproj | 9 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/style.css | 100 ++ .../dotnet/terraform/README.md | 287 +++++ .../dotnet/terraform/deploy.sh | 53 + .../dotnet/terraform/main.tf | 224 ++++ .../modules/app_service_plan/main.tf | 25 + .../modules/app_service_plan/outputs.tf | 19 + .../modules/app_service_plan/variables.tf | 42 + .../modules/container_registry/main.tf | 65 ++ .../modules/container_registry/output.tf | 34 + .../modules/container_registry/variables.tf | 60 + .../terraform/modules/log_analytics/main.tf | 14 + .../terraform/modules/log_analytics/output.tf | 30 + .../modules/log_analytics/variables.tf | 37 + .../modules/managed_identity/main.tf | 20 + .../modules/managed_identity/output.tf | 25 + .../modules/managed_identity/variables.tf | 26 + .../terraform/modules/nat_gateway/main.tf | 42 + .../terraform/modules/nat_gateway/output.tf | 9 + .../modules/nat_gateway/variables.tf | 55 + .../modules/network_security_group/main.tf | 53 + .../modules/network_security_group/outputs.tf | 9 + .../network_security_group/variables.tf | 51 + .../modules/private_dns_zone/main.tf | 25 + .../modules/private_dns_zone/outputs.tf | 9 + .../modules/private_dns_zone/variables.tf | 20 + .../modules/private_endpoint/main.tf | 26 + .../modules/private_endpoint/outputs.tf | 19 + .../modules/private_endpoint/variables.tf | 61 + .../terraform/modules/virtual_network/main.tf | 55 + .../modules/virtual_network/outputs.tf | 19 + .../modules/virtual_network/variables.tf | 40 + .../dotnet/terraform/modules/web_app/main.tf | 78 ++ .../terraform/modules/web_app/outputs.tf | 24 + .../terraform/modules/web_app/variables.tf | 114 ++ .../dotnet/terraform/outputs.tf | 23 + .../dotnet/terraform/providers.tf | 28 + .../dotnet/terraform/push_image.sh | 44 + .../dotnet/terraform/terraform.tfvars | 3 + .../dotnet/terraform/variables.tf | 251 ++++ .../dotnet/visio/web-app-custom-image.vsdx | Bin 0 -> 259502 bytes .../web-app-managed-identity/dotnet/README.md | 120 ++ .../dotnet/bicep/README.md | 195 ++++ .../dotnet/bicep/deploy.sh | 153 +++ .../dotnet/bicep/main.bicep | 275 +++++ .../dotnet/bicep/main.bicepparam | 6 + .../dotnet/images/architecture.png | Bin 0 -> 54097 bytes .../dotnet/images/azure-storage-explorer.png | Bin 0 -> 31796 bytes .../dotnet/images/vacation-planner.png | Bin 0 -> 85690 bytes .../dotnet/scripts/README.md | 210 ++++ .../dotnet/scripts/api.sh | 153 +++ .../dotnet/scripts/call-web-app.sh | 199 ++++ .../dotnet/scripts/cli.sh | 91 ++ .../dotnet/scripts/system-assigned.sh | 272 +++++ .../dotnet/scripts/user-assigned.sh | 356 ++++++ .../dotnet/scripts/validate.sh | 67 ++ .../dotnet/src/Models/Activity.cs | 4 + .../dotnet/src/Pages/Delete.cshtml | 2 + .../dotnet/src/Pages/Delete.cshtml.cs | 22 + .../dotnet/src/Pages/Index.cshtml | 265 +++++ .../dotnet/src/Pages/Index.cshtml.cs | 46 + .../dotnet/src/Pages/_ViewImports.cshtml | 4 + .../dotnet/src/Program.cs | 31 + .../dotnet/src/Services/BlobActivityStore.cs | 81 ++ .../dotnet/src/Services/BlobStorageOptions.cs | 19 + .../dotnet/src/Services/IActivityStore.cs | 21 + .../dotnet/src/Services/StoreInitializer.cs | 33 + .../dotnet/src/VacationPlanner.csproj | 13 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/favicon.ico | Bin 0 -> 36791 bytes .../dotnet/src/wwwroot/style.css | 341 ++++++ .../dotnet/terraform/README.md | 208 ++++ .../dotnet/terraform/deploy.sh | 76 ++ .../dotnet/terraform/main.tf | 118 ++ .../dotnet/terraform/outputs.tf | 19 + .../dotnet/terraform/providers.tf | 26 + .../dotnet/terraform/terraform.tfvars | 2 + .../dotnet/terraform/variables.tf | 216 ++++ .../dotnet/visio/architecture.vsdx | Bin 0 -> 197355 bytes 110 files changed, 9364 insertions(+), 7 deletions(-) create mode 100644 samples/web-app-custom-image/dotnet/README.md create mode 100644 samples/web-app-custom-image/dotnet/bicep/README.md create mode 100644 samples/web-app-custom-image/dotnet/bicep/acr.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/acr.bicepparam create mode 100755 samples/web-app-custom-image/dotnet/bicep/deploy.sh create mode 100644 samples/web-app-custom-image/dotnet/bicep/main.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/main.bicepparam create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/app-service-plan.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/container-registry.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/log-analytics.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/managed-identity.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/private-dns-zone.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/private-endpoint.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/virtual-network.bicep create mode 100644 samples/web-app-custom-image/dotnet/bicep/modules/web-app.bicep create mode 100644 samples/web-app-custom-image/dotnet/images/architecture.png create mode 100644 samples/web-app-custom-image/dotnet/scripts/README.md create mode 100755 samples/web-app-custom-image/dotnet/scripts/call-web-app.sh create mode 100755 samples/web-app-custom-image/dotnet/scripts/deploy.sh create mode 100755 samples/web-app-custom-image/dotnet/scripts/validate.sh create mode 100644 samples/web-app-custom-image/dotnet/src/.dockerignore create mode 100644 samples/web-app-custom-image/dotnet/src/AppInfo.cs create mode 100644 samples/web-app-custom-image/dotnet/src/Dockerfile create mode 100644 samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-custom-image/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-custom-image/dotnet/src/Program.cs create mode 100644 samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-custom-image/dotnet/src/appsettings.json create mode 100644 samples/web-app-custom-image/dotnet/src/wwwroot/style.css create mode 100644 samples/web-app-custom-image/dotnet/terraform/README.md create mode 100755 samples/web-app-custom-image/dotnet/terraform/deploy.sh create mode 100644 samples/web-app-custom-image/dotnet/terraform/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/container_registry/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/container_registry/output.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/container_registry/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/output.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/output.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/output.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/web_app/main.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/web_app/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/modules/web_app/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/outputs.tf create mode 100644 samples/web-app-custom-image/dotnet/terraform/providers.tf create mode 100755 samples/web-app-custom-image/dotnet/terraform/push_image.sh create mode 100644 samples/web-app-custom-image/dotnet/terraform/terraform.tfvars create mode 100644 samples/web-app-custom-image/dotnet/terraform/variables.tf create mode 100644 samples/web-app-custom-image/dotnet/visio/web-app-custom-image.vsdx create mode 100644 samples/web-app-managed-identity/dotnet/README.md create mode 100644 samples/web-app-managed-identity/dotnet/bicep/README.md create mode 100755 samples/web-app-managed-identity/dotnet/bicep/deploy.sh create mode 100644 samples/web-app-managed-identity/dotnet/bicep/main.bicep create mode 100644 samples/web-app-managed-identity/dotnet/bicep/main.bicepparam create mode 100644 samples/web-app-managed-identity/dotnet/images/architecture.png create mode 100644 samples/web-app-managed-identity/dotnet/images/azure-storage-explorer.png create mode 100644 samples/web-app-managed-identity/dotnet/images/vacation-planner.png create mode 100644 samples/web-app-managed-identity/dotnet/scripts/README.md create mode 100755 samples/web-app-managed-identity/dotnet/scripts/api.sh create mode 100755 samples/web-app-managed-identity/dotnet/scripts/call-web-app.sh create mode 100755 samples/web-app-managed-identity/dotnet/scripts/cli.sh create mode 100755 samples/web-app-managed-identity/dotnet/scripts/system-assigned.sh create mode 100755 samples/web-app-managed-identity/dotnet/scripts/user-assigned.sh create mode 100755 samples/web-app-managed-identity/dotnet/scripts/validate.sh create mode 100644 samples/web-app-managed-identity/dotnet/src/Models/Activity.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml create mode 100644 samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-managed-identity/dotnet/src/Program.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Services/BlobStorageOptions.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Services/IActivityStore.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/Services/StoreInitializer.cs create mode 100644 samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-managed-identity/dotnet/src/appsettings.json create mode 100644 samples/web-app-managed-identity/dotnet/src/wwwroot/favicon.ico create mode 100644 samples/web-app-managed-identity/dotnet/src/wwwroot/style.css create mode 100644 samples/web-app-managed-identity/dotnet/terraform/README.md create mode 100755 samples/web-app-managed-identity/dotnet/terraform/deploy.sh create mode 100644 samples/web-app-managed-identity/dotnet/terraform/main.tf create mode 100644 samples/web-app-managed-identity/dotnet/terraform/outputs.tf create mode 100644 samples/web-app-managed-identity/dotnet/terraform/providers.tf create mode 100644 samples/web-app-managed-identity/dotnet/terraform/terraform.tfvars create mode 100644 samples/web-app-managed-identity/dotnet/terraform/variables.tf create mode 100644 samples/web-app-managed-identity/dotnet/visio/architecture.vsdx diff --git a/.gitattributes b/.gitattributes index e3e2de9..827944e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,6 @@ *.yml text eol=lf *.bicep text eol=lf *.tf text eol=lf +*.cs text eol=lf +*.csproj text eol=lf +*.cshtml text eol=lf diff --git a/README.md b/README.md index b98547d..522602a 100644 --- a/README.md +++ b/README.md @@ -33,13 +33,13 @@ This repository contains comprehensive sample projects demonstrating how to deve | [Function App and Front Door](./samples/function-app-front-door/python/README.md) | Azure Functions App exposed via Front Door | | [Function App and Managed Identities](./samples/function-app-managed-identity/python/README.md) | Azure Function App using Managed Identities | | [Function App and Service Bus](./samples/function-app-service-bus/dotnet/README.md) | Azure Function App using Service Bus | -| [Web App and CosmosDB for MongoDB API ](./samples/web-app-cosmosdb-mongodb-api/python/README.md) | Azure Web App using CosmosDB for MongoDB API | -| [Web App and CosmosDB for NoSQL API ](./samples/web-app-cosmosdb-nosql-api/python/README.md) | Azure Web App using CosmosDB for NoSQL API | -| [Web App and Managed Identities](./samples/web-app-managed-identity/python/README.md) | Azure Web App using Managed Identities | -| [Web App and SQL Database ](./samples/web-app-sql-database/python/README.md) | Azure Web App using SQL Database | -| [Web App and PostgreSQL Database ](./samples/web-app-postgresql-flexible-server/python/README.md) | Azure Web App using PostgreSQL Database | -| [Web App and MySQL Database ](./samples/web-app-mysql-flexible-server/python/README.md) | Azure Web App using MySQL Database | -| [Web App with Custom Docker Image](./samples/web-app-custom-image/python/README.md) | Azure Web App running a custom Docker image | +| [Web App and CosmosDB for MongoDB API ](./samples/web-app-cosmosdb-mongodb-api/python/README.md) ([.NET](./samples/web-app-cosmosdb-mongodb-api/dotnet/README.md)) | Azure Web App using CosmosDB for MongoDB API | +| [Web App and CosmosDB for NoSQL API ](./samples/web-app-cosmosdb-nosql-api/python/README.md) ([.NET](./samples/web-app-cosmosdb-nosql-api/dotnet/README.md)) | Azure Web App using CosmosDB for NoSQL API | +| [Web App and Managed Identities](./samples/web-app-managed-identity/python/README.md) ([.NET](./samples/web-app-managed-identity/dotnet/README.md)) | Azure Web App using Managed Identities | +| [Web App and SQL Database ](./samples/web-app-sql-database/python/README.md) ([.NET](./samples/web-app-sql-database/dotnet/README.md)) | Azure Web App using SQL Database | +| [Web App and PostgreSQL Database ](./samples/web-app-postgresql-flexible-server/python/README.md) ([.NET](./samples/web-app-postgresql-flexible-server/dotnet/README.md)) | Azure Web App using PostgreSQL Database | +| [Web App and MySQL Database ](./samples/web-app-mysql-flexible-server/python/README.md) ([.NET](./samples/web-app-mysql-flexible-server/dotnet/README.md)) | Azure Web App using MySQL Database | +| [Web App with Custom Docker Image](./samples/web-app-custom-image/python/README.md) ([.NET](./samples/web-app-custom-image/dotnet/README.md)) | Azure Web App running a custom Docker image | | [ACI and Blob Storage](./samples/aci-blob-storage/python/README.md) | Azure Container Instances with ACR, Key Vault, and Blob Storage | | [Container Apps and Blob Storage](./samples/container-apps-blob-storage/python/README.md) | Azure Container Apps running a guestbook app from ACR with Blob Storage, secrets, revisions, replicas and scale rules | | [Azure Service Bus with Spring Boot](./samples/servicebus/java/README.md) | Azure Service Bus used by a Spring Boot application | diff --git a/run-samples.sh b/run-samples.sh index 9ebb94c..29a73b9 100755 --- a/run-samples.sh +++ b/run-samples.sh @@ -37,11 +37,17 @@ SAMPLES=( "samples/function-app-service-bus/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-http-trigger.sh" "samples/function-app-storage-http/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-http-triggers.sh" "samples/web-app-cosmosdb-mongodb-api/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-cosmosdb-mongodb-api/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-managed-identity/python|bash scripts/user-assigned.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-managed-identity/dotnet|bash scripts/user-assigned.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-sql-database/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/get-web-app-url.sh" + "samples/web-app-sql-database/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/get-web-app-url.sh" "samples/web-app-mysql-flexible-server/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-mysql-flexible-server/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-postgresql-flexible-server/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-postgresql-flexible-server/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-custom-image/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-custom-image/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/aci-blob-storage/python|bash scripts/deploy.sh|bash scripts/validate.sh" "samples/container-apps-blob-storage/python|bash scripts/deploy.sh|bash scripts/validate.sh" "samples/url-shortener/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" @@ -56,10 +62,15 @@ TERRAFORM_SAMPLES=( "samples/function-app-service-bus/dotnet/terraform|bash deploy.sh" "samples/function-app-storage-http/dotnet/terraform|bash deploy.sh" "samples/web-app-cosmosdb-mongodb-api/python/terraform|bash deploy.sh" + "samples/web-app-cosmosdb-mongodb-api/dotnet/terraform|bash deploy.sh" "samples/web-app-managed-identity/python/terraform|bash deploy.sh" + "samples/web-app-managed-identity/dotnet/terraform|bash deploy.sh" "samples/web-app-sql-database/python/terraform|bash deploy.sh" + "samples/web-app-sql-database/dotnet/terraform|bash deploy.sh" "samples/web-app-mysql-flexible-server/python/terraform|bash deploy.sh" + "samples/web-app-mysql-flexible-server/dotnet/terraform|bash deploy.sh" "samples/web-app-postgresql-flexible-server/python/terraform|bash deploy.sh" + "samples/web-app-postgresql-flexible-server/dotnet/terraform|bash deploy.sh" "samples/aci-blob-storage/python/terraform|bash deploy.sh" "samples/container-apps-blob-storage/python/terraform|bash deploy.sh" "samples/url-shortener/python/terraform|bash deploy.sh|bash ../scripts/validate.sh" @@ -75,9 +86,13 @@ BICEP_SAMPLES=( "samples/function-app-service-bus/dotnet/bicep|bash deploy.sh" "samples/function-app-storage-http/dotnet/bicep|bash deploy.sh" "samples/web-app-cosmosdb-mongodb-api/python/bicep|bash deploy.sh" + "samples/web-app-cosmosdb-mongodb-api/dotnet/bicep|bash deploy.sh" "samples/web-app-managed-identity/python/bicep|bash deploy.sh" + "samples/web-app-managed-identity/dotnet/bicep|bash deploy.sh" "samples/web-app-mysql-flexible-server/python/bicep|bash deploy.sh" + "samples/web-app-mysql-flexible-server/dotnet/bicep|bash deploy.sh" "samples/web-app-postgresql-flexible-server/python/bicep|bash deploy.sh" + "samples/web-app-postgresql-flexible-server/dotnet/bicep|bash deploy.sh" "samples/aci-blob-storage/python/bicep|bash deploy.sh" "samples/container-apps-blob-storage/python/bicep|bash deploy.sh" "samples/url-shortener/python/bicep|bash deploy.sh|bash ../scripts/validate.sh" @@ -122,6 +137,7 @@ ARM64_SAMPLE_DIRS=( "samples/function-app-service-bus/dotnet" "samples/function-app-storage-http/dotnet" "samples/web-app-custom-image/python" + "samples/web-app-custom-image/dotnet" ) # Fail loudly if an entry no longer matches a registered sample: a rename would otherwise diff --git a/samples/web-app-custom-image/dotnet/README.md b/samples/web-app-custom-image/dotnet/README.md new file mode 100644 index 0000000..6d7bcac --- /dev/null +++ b/samples/web-app-custom-image/dotnet/README.md @@ -0,0 +1,83 @@ +# Azure Web App with Custom Docker Image + +This sample demonstrates an ASP.NET Core web application hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) using a custom Docker image. The app runs on an Azure App Service Plan and uses a container image stored in an [Azure Container Registry](https://learn.microsoft.com/azure/container-registry/container-registry-intro). For more information on configuring a web app to use a custom container, see [Configure a custom container for Azure App Service](https://learn.microsoft.com/azure/app-service/configure-custom-container?tabs=debian&pivots=container-linux). + +## Architecture + +The following diagram illustrates the architecture of the solution: + +![Architecture Diagram](./images/architecture.png) + +The solution is composed of the following Azure resources: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Dedicated to [regional VNet integration](https://learn.microsoft.com/azure/azure-functions/functions-networking-options?tabs=azure-portal#outbound-networking-features) with the Web App. + - *pe-subnet*: Used for hosting Azure Private Endpoints. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone): Handles DNS resolution for the Azure Container Registry Private Endpoint within the virtual network. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview): Secures network access to the Azure Container Registry via a private IP within the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Provides deterministic outbound connectivity for the Web App. Included for completeness; the sample app does not call any external services. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): Enforces inbound and outbound traffic rules across the virtual network's subnets. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics from all resources in the solution. +8. [Azure Container Registry](https://learn.microsoft.com/azure/container-registry/container-registry-intro): A fully-managed container registry service based on the open-source [Docker platform](https://docs.docker.com/get-started/docker-overview/) used to hold the container image used by the web app. +9. [User-Assigned Managed Identity](https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview): Assigned the [AcrPull](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/containers#acrpull) role on the Azure Container Registry, enabling the Web App to pull the container image without storing credentials. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core application from the custom container image stored in the Azure Container Registry. + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [Docker](https://docs.docker.com/get-docker/) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0), only if you want to build or run the web application outside Docker. +- [Bicep](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep), if you plan to install the sample via Bicep. +- [Terraform](https://developer.hashicorp.com/terraform/downloads), if you plan to install the sample via Terraform. +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and set it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the image, execute: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator by running: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application to LocalStack for Azure using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All deployment methods have been fully tested against Azure and the LocalStack for Azure local emulator. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process involves downloading and building Docker images. This is a one-time operation—subsequent deployments will be significantly faster. Depending on your internet connection and system resources, this initial setup may take several minutes. + +## Test + +You can use the `call-web-app.sh` Bash script below to call the web app. The script calls the web app via the default hostname `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure Container Registry Documentation](https://learn.microsoft.com/azure/container-registry/container-registry-intro) +- [Configure a custom container for Azure App Service](https://learn.microsoft.com/azure/app-service/configure-custom-container?tabs=debian&pivots=container-linux) +- [Azure Identity client library for .NET](https://learn.microsoft.com/en-us/dotnet/api/overview/azure/identity-readme) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-custom-image/dotnet/bicep/README.md b/samples/web-app-custom-image/dotnet/bicep/README.md new file mode 100644 index 0000000..b02028a --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/README.md @@ -0,0 +1,294 @@ +# Bicep Deployment + +This directory contains the Bicep templates and a deployment script for provisioning Azure services in LocalStack for Azure. For further details about the sample application, refer to the [Azure Web App with Custom Docker Image](../README.md). + +## Prerequisites + +Before deploying this solution, ensure you have the following tools installed: + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/): Local Azure cloud emulator for development and testing +- [Visual Studio Code](https://code.visualstudio.com/): Code editor installed on one of the [supported platforms](https://code.visualstudio.com/docs/supporting/requirements#_platforms) +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep): VS Code extension for Bicep language support and IntelliSense +- [Docker](https://docs.docker.com/get-docker/): Container runtime required for LocalStack and building the custom image +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli): Azure command-line interface +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +### Installing lstk CLI + +Deploying to LocalStack requires the `lstk` CLI, which routes Azure CLI commands to the emulator (run `lstk az start-interception` before deploying). Install it using Homebrew: + +```bash +brew install localstack/tap/lstk +``` + +or npm: + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). For more information, see the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +## Architecture Overview + +The [deploy.sh](deploy.sh) script creates the [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli) for all the Azure resources. The deployment is split into two Bicep phases with an image push step between them. + +### First Bicep Deployment +In this phase, the [acr.bicep](acr.bicep) template deploys: + +1. [Azure Container Registry](https://learn.microsoft.com/azure/container-registry/container-registry-intro): A fully-managed container registry service based on the open-source [Docker platform](https://docs.docker.com/get-started/docker-overview/) used to hold the container image used by the web app. +2. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics from all resources in the solution. + +## Container Image Push +After the first Bicep deployment, the script builds the container image locally from the `src/Dockerfile` and pushes it to the Azure Container Registry. + +### Second Bicep Deployment +The [main.bicep](main.bicep) template deploys the remaining resources: + +1. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Dedicated to [regional VNet integration](https://learn.microsoft.com/azure/azure-functions/functions-networking-options?tabs=azure-portal#outbound-networking-features) with the Web App. + - *pe-subnet*: Used for hosting Azure Private Endpoints. +2. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone): Handles DNS resolution for the Azure Container Registry Private Endpoint within the virtual network. +3. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview): Secures network access to the Azure Container Registry via a private IP within the VNet. +4. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Provides deterministic outbound connectivity for the Web App. Included for completeness; the sample app does not call any external services. +5. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): Enforces inbound and outbound traffic rules across the virtual network's subnets. +6. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +7. [User-Assigned Managed Identity](https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview): Assigned the [AcrPull](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/containers#acrpull) role on the Azure Container Registry, enabling the Web App to pull the container image without storing credentials. +8. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core application from the custom container image stored in the Azure Container Registry. + +The provisioning process assigns the user-defined managed identity to the web app and uses its credentials to access the Azure Container Registry to pull the container image. The [AcrPull](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/containers#acrpull) role is assigned to the managed identity with the Azure Container Registry as the scope. + +For more information on the sample application, see [Azure Web App with Custom Docker Image](../README.md). + +## Configuration + +Before deploying the `main.bicep` template, update the `main.bicepparam` file with your specific values: + +```bicep +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param imageName = 'custom-image-webapp' +param imageTag = 'v1' +param tags = { + environment: 'test' + project: 'custom-image-webapp' +} +``` + +## Provisioning Scripts + +See [deploy.sh](deploy.sh) for the complete deployment automation. The script performs: + +- Detects environment (LocalStack vs Azure Cloud) and uses appropriate CLI +- Creates resource group if it doesn't exist +- Optionally validates the Bicep template +- Optionally runs what-if deployment for preview +- Deploys [acr.bicep](acr.bicep) to provision the Azure Container Registry and Log Analytics Workspace +- Extracts deployment outputs (ACR name, ACR login server) +- Builds the container image locally and pushes it to the Azure Container Registry +- Deploys [main.bicep](main.bicep) with parameters from [main.bicepparam](main.bicepparam) to provision the remaining resources +- Extracts deployment outputs (Web App name, App Service Plan name, Managed Identity name) + +## Deployment + +You can set up the Azure emulator by utilizing the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `bicep` folder: + +```bash +cd samples/web-app-custom-image/dotnet/bicep +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +Once the deployment completes, run the [validate.sh](../scripts/validate.sh) script to confirm that all resources were provisioned and configured as expected: + +```bash +#!/bin/bash +set -euo pipefail + +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +ACR_NAME="${PREFIX}acr${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.azurecr.io" +PRIVATE_ENDPOINT_NAME="${PREFIX}-acr-pe-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table + +# Check managed identity +echo -e "[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] App Service Plan:\n" +az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Container Registry +echo -e "\n[$ACR_NAME] Azure Container Registry:\n" +az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] Web App:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "{name:name, state:state, defaultHostName:defaultHostName, kind:kind}" \ + --output table + +# Check App Settings +echo -e "\n[$WEB_APP_NAME] app settings:\n" +az webapp config appsettings list \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "[?name=='IMAGE_NAME' || name=='APP_NAME' || name=='WEBSITES_PORT']" \ + --output table + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Public IP Prefix +echo -e "\n[$PIP_PREFIX_NAME] public ip prefix:\n" +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +echo -e "\nResources in [$RESOURCE_GROUP_NAME]:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the Bicep deployment script. + +## Related Documentation + +- [Azure Bicep Documentation](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/) +- [Bicep Language Reference](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-functions) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-custom-image/dotnet/bicep/acr.bicep b/samples/web-app-custom-image/dotnet/bicep/acr.bicep new file mode 100644 index 0000000..01a4e6b --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/acr.bicep @@ -0,0 +1,81 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the name of the Azure Log Analytics resource.') +param logAnalyticsName string = '' + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param logAnalyticsSku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param logAnalyticsRetentionInDays int = 60 + +@description('Tier of your Azure Container Registry.') +@allowed([ + 'Basic' + 'Standard' + 'Premium' +]) +param acrSku string = 'Premium' + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +//******************************************** +// Variables +//******************************************** +var acrName = '${prefix}acr${suffix}' + +//******************************************** +// Modules and Resources +//******************************************** +module workspace 'modules/log-analytics.bicep' = { + name: 'workspace' + params: { + // properties + name: empty(logAnalyticsName) ? toLower('${prefix}-log-analytics-${suffix}') : logAnalyticsName + location: location + tags: tags + sku: logAnalyticsSku + retentionInDays: logAnalyticsRetentionInDays + } +} + +module containerRegistry './modules/container-registry.bicep' = { + name: 'containerRegistry' + params: { + name: acrName + sku: acrSku + adminUserEnabled: true + workspaceId: workspace.outputs.id + location: location + tags: tags + } +} + +//******************************************** +// Outputs +//******************************************** +output acrName string = containerRegistry.outputs.name +output acrLoginServer string = containerRegistry.outputs.loginServer +output logAnalyticsWorkspaceName string = workspace.outputs.name diff --git a/samples/web-app-custom-image/dotnet/bicep/acr.bicepparam b/samples/web-app-custom-image/dotnet/bicep/acr.bicepparam new file mode 100644 index 0000000..f58b20d --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/acr.bicepparam @@ -0,0 +1,8 @@ +using 'acr.bicep' + +param prefix = 'local' +param suffix = 'test' +param tags = { + environment: 'test' + project: 'custom-image-webapp' +} diff --git a/samples/web-app-custom-image/dotnet/bicep/deploy.sh b/samples/web-app-custom-image/dotnet/bicep/deploy.sh new file mode 100755 index 0000000..9c16125 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/deploy.sh @@ -0,0 +1,254 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +ACR_TEMPLATE="acr.bicep" +ACR_PARAMETERS="acr.bicepparam" +MAIN_TEMPLATE="main.bicep" +MAIN_PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOCATION="westeurope" +IMAGE_NAME="custom-image-webapp" +IMAGE_TAG="v1" +LOCAL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1> /dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +echo "Deploying Azure Container Registry and Log Analytics Workspace Bicep..." + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$ACR_TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $ACR_TEMPLATE \ + --parameters $ACR_PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$ACR_TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$ACR_TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$ACR_TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $ACR_TEMPLATE \ + --parameters $ACR_PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$ACR_TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$ACR_TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$ACR_TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $ACR_TEMPLATE \ + --parameters $ACR_PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + --query 'properties.outputs' -o json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$ACR_TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + ACR_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.acrName.value') + ACR_LOGIN_SERVER=$(echo "$DEPLOYMENT_JSON" | jq -r '.acrLoginServer.value') + LOG_ANALYTICS_WORKSPACE_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.logAnalyticsWorkspaceName.value') + echo "Deployment complete." + echo "Resource Group: $RESOURCE_GROUP_NAME" + echo "Azure Container Registry: $ACR_NAME ($ACR_LOGIN_SERVER)" +else + echo "Failed to deploy Bicep template [$ACR_TEMPLATE]" + exit 1 +fi + +if [[ -z "$ACR_NAME" || -z "$ACR_LOGIN_SERVER" || -z "$LOG_ANALYTICS_WORKSPACE_NAME" ]]; then + echo "ACR Name, ACR Login Server, or Log Analytics Workspace Name is empty. Exiting." + exit 1 +fi + +echo "Logging into Azure Container Registry [$ACR_NAME]..." +az acr login --name "$ACR_NAME" --only-show-errors + +if [ $? -eq 0 ]; then + echo "Logged into Azure Container Registry [$ACR_NAME] successfully." +else + echo "Failed to log into Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +# Create full image name with login server, image name, and tag +FULL_IMAGE="${ACR_LOGIN_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}" + +echo "Building custom Docker image [$LOCAL_IMAGE]..." +docker build -t "$LOCAL_IMAGE" ../src/ + +if [ $? -eq 0 ]; then + echo "Docker image [$LOCAL_IMAGE] built successfully." +else + echo "Failed to build Docker image [$LOCAL_IMAGE]." + exit 1 +fi + +echo "Tagging Docker image [$LOCAL_IMAGE] as [$FULL_IMAGE]..." +docker tag "$LOCAL_IMAGE" "$FULL_IMAGE" + +if [ $? -eq 0 ]; then + echo "Docker image [$LOCAL_IMAGE] tagged as [$FULL_IMAGE] successfully." +else + echo "Failed to tag Docker image [$LOCAL_IMAGE] as [$FULL_IMAGE]." + exit 1 +fi + +echo "Pushing image [$FULL_IMAGE] to ACR..." +docker push "$FULL_IMAGE" + +if [ $? -eq 0 ]; then + echo "Docker image [$FULL_IMAGE] pushed to ACR successfully." +else + echo "Failed to push Docker image [$FULL_IMAGE] to ACR." + exit 1 +fi + +echo "Deploying the remaining Azure resources..." + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$MAIN_TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $MAIN_TEMPLATE \ + --parameters $MAIN_PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + imageName=$IMAGE_NAME \ + imageTag=$IMAGE_TAG \ + acrName="$ACR_NAME" \ + logAnalyticsWorkspaceName="$LOG_ANALYTICS_WORKSPACE_NAME" \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$MAIN_TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$MAIN_TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$MAIN_TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $MAIN_TEMPLATE \ + --parameters $MAIN_PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + imageName=$IMAGE_NAME \ + imageTag=$IMAGE_TAG \ + acrName="$ACR_NAME" \ + logAnalyticsWorkspaceName="$LOG_ANALYTICS_WORKSPACE_NAME" \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$MAIN_TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$MAIN_TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$MAIN_TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $MAIN_TEMPLATE \ + --parameters $MAIN_PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + imageName=$IMAGE_NAME \ + imageTag=$IMAGE_TAG \ + acrName="$ACR_NAME" \ + logAnalyticsWorkspaceName="$LOG_ANALYTICS_WORKSPACE_NAME" \ + --query 'properties.outputs' -o json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$MAIN_TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + APP_SERVICE_PLAN_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.appServicePlanName.value') + WEB_APP_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.webAppName.value') + ACR_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.acrName.value') + ACR_LOGIN_SERVER=$(echo "$DEPLOYMENT_JSON" | jq -r '.acrLoginServer.value') + MANAGED_IDENTITY_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.managedIdentityName.value') + echo "Deployment complete." + echo "Resource Group: $RESOURCE_GROUP_NAME" + echo "App Service Plan: $APP_SERVICE_PLAN_NAME" + echo "Web App: $WEB_APP_NAME" + echo "Azure Container Registry: $ACR_NAME ($ACR_LOGIN_SERVER)" + echo "Managed Identity: $MANAGED_IDENTITY_NAME" +else + echo "Failed to deploy Bicep template [$MAIN_TEMPLATE]" + exit 1 +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/bicep/main.bicep b/samples/web-app-custom-image/dotnet/bicep/main.bicep new file mode 100644 index 0000000..802b75c --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/main.bicep @@ -0,0 +1,305 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the name of the image to be used for the Web App.') +param imageName string + +@description('Specifies the tag of the image to be used for the Web App.') +param imageTag string + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string = '' + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'app-subnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetNsgName string = '' + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string = '' + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the name of the Azure Container Registry resource.') +param acrName string = '' + +@description('Specifies the name of the Azure Log Analytics resource.') +param logAnalyticsWorkspaceName string = '' + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +//******************************************** +// Variables +//******************************************** +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var managedIdentityName = '${prefix}-identity-${suffix}' +var privateDnsZoneName = 'privatelink.azurecr.io' +var privateEndpointName = '${prefix}-acr-pe-${suffix}' + +//******************************************** +// Modules and Resources +//******************************************** +resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' existing = { + name: logAnalyticsWorkspaceName == '' ? toLower('${prefix}-log-analytics-${suffix}') : logAnalyticsWorkspaceName +} +resource containerRegistry 'Microsoft.ContainerRegistry/registries@2024-11-01-preview' existing = { + name: acrName == '' ? toLower('${prefix}acr${suffix}') : acrName +} + +module managedIdentity 'modules/managed-identity.bicep' = { + name: 'managedIdentity' + params: { + // properties + name: managedIdentityName + containerRegistryName: containerRegistry.name + location: location + tags: tags + } +} + +module network 'modules/virtual-network.bicep' = { + name: 'network' + params: { + virtualNetworkName: empty(virtualNetworkName) ? toLower('${prefix}-vnet-${suffix}') : virtualNetworkName + virtualNetworkAddressPrefixes: virtualNetworkAddressPrefixes + webAppSubnetName: webAppSubnetName + webAppSubnetAddressPrefix: webAppSubnetAddressPrefix + webAppSubnetNsgName: empty(webAppSubnetNsgName) ? toLower('${prefix}-webapp-subnet-nsg-${suffix}') : webAppSubnetNsgName + peSubnetName: peSubnetName + peSubnetAddressPrefix: peSubnetAddressPrefix + peSubnetNsgName: empty(peSubnetNsgName) ? toLower('${prefix}-pe-subnet-nsg-${suffix}') : peSubnetNsgName + natGatewayName: empty(natGatewayName) ? toLower('${prefix}-nat-gateway-${suffix}') : natGatewayName + natGatewayZones: natGatewayZones + natGatewayPublicIpPrefixName: toLower('${prefix}-nat-gateway-pip-prefix-${suffix}') + natGatewayPublicIpPrefixLength: natGatewayPublicIpPrefixLength + natGatewayIdleTimeoutMins: natGatewayIdleTimeoutMins + delegationServiceName: skuTier == 'FlexConsumption' ? 'Microsoft.App/environments' : 'Microsoft.Web/serverfarms' + workspaceId: workspace.id + location: location + tags: tags + } +} + +module privateDnsZone 'modules/private-dns-zone.bicep' = { + name: 'privateDnsZone' + params: { + name: privateDnsZoneName + vnetId: network.outputs.virtualNetworkId + tags: tags + } +} + +module privateEndpoints 'modules/private-endpoint.bicep' = { + name: 'privateEndpoints' + params: { + name: privateEndpointName + privateLinkServiceId: containerRegistry.id + privateDnsZoneId: privateDnsZone.outputs.id + vnetId: network.outputs.virtualNetworkId + subnetId: network.outputs.peSubnetId + groupIds: [ + 'registry' + ] + location: location + tags: tags + } +} + +module appServicePlan 'modules/app-service-plan.bicep' = { + name: 'appServicePlan' + params: { + name: appServicePlanName + location: location + skuName: skuName + skuTier: skuTier + kind: appServicePlanKind + reserved: reserved + zoneRedundant: zoneRedundant + workspaceId: workspace.id + tags: tags + } +} + +module webApp 'modules/web-app.bicep' = { + name: webAppName + params: { + name: webAppName + location: location + kind: webAppKind + httpsOnly: httpsOnly + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + repoUrl: repoUrl + virtualNetworkName: network.outputs.virtualNetworkName + subnetName: network.outputs.webAppSubnetName + hostingPlanName: appServicePlan.outputs.name + loginServer: containerRegistry.properties.loginServer + imageName: imageName + imageTag: imageTag + managedIdentityName: managedIdentity.outputs.name + managedIdentityType: 'UserAssigned' + workspaceId: workspace.id + tags: tags + } +} + +//******************************************** +// Outputs +//******************************************** +output appServicePlanName string = appServicePlan.outputs.name +output webAppName string = webApp.outputs.name +output acrName string = containerRegistry.name +output acrLoginServer string = containerRegistry.properties.loginServer +output managedIdentityName string = managedIdentity.outputs.name diff --git a/samples/web-app-custom-image/dotnet/bicep/main.bicepparam b/samples/web-app-custom-image/dotnet/bicep/main.bicepparam new file mode 100644 index 0000000..0bfd022 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/main.bicepparam @@ -0,0 +1,10 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param imageName = 'custom-image-webapp' +param imageTag = 'v1' +param tags = { + environment: 'test' + project: 'custom-image-webapp' +} diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/app-service-plan.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/app-service-plan.bicep new file mode 100644 index 0000000..4b5cfb3 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/app-service-plan.bicep @@ -0,0 +1,154 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the App Service Plan.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param kind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** + +var diagnosticSettingsName = 'default' +var logCategories = [] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: name + location: location + tags: tags + kind: kind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: zoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: appServicePlan + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = appServicePlan.id +output name string = appServicePlan.name diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/container-registry.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/container-registry.bicep new file mode 100644 index 0000000..e830e39 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/container-registry.bicep @@ -0,0 +1,135 @@ + +//******************************************** +// Parameters +//******************************************** + +@description('Name of your Azure Container Registry') +@minLength(5) +@maxLength(50) +param name string = 'acr${uniqueString(resourceGroup().id)}' + +@description('Enable admin user that have push / pull permission to the registry.') +param adminUserEnabled bool = true + +@description('Specifies whether to allow public network access for the container registry.') +@allowed([ + 'Disabled' + 'Enabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Tier of your Azure Container Registry.') +@allowed([ + 'Basic' + 'Standard' + 'Premium' +]) +param sku string = 'Premium' + +@description('Specifies whether or not registry-wide pull is enabled from unauthenticated clients.') +param anonymousPullEnabled bool = true + +@description('Specifies whether or not a single data endpoint is enabled per region for serving data.') +param dataEndpointEnabled bool = true + +@description('Specifies the network rule set for the container registry.') +param networkRuleSet object = { + defaultAction: 'Allow' +} + +@description('Specifies ehether to allow trusted Azure services to access a network restricted registry.') +@allowed([ + 'AzureServices' + 'None' +]) +param networkRuleBypassOptions string = 'AzureServices' + +@description('Specifies whether or not zone redundancy is enabled for this container registry.') +@allowed([ + 'Disabled' + 'Enabled' +]) +param zoneRedundancy string = 'Disabled' + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** + +var diagnosticSettingsName = 'diagnosticSettings' +var logCategories = [ + 'ContainerRegistryRepositoryEvents' + 'ContainerRegistryLoginEvents' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** + +resource containerRegistry 'Microsoft.ContainerRegistry/registries@2024-11-01-preview' = { + name: name + location: location + tags: tags + sku: { + name: sku + } + properties: { + adminUserEnabled: adminUserEnabled + anonymousPullEnabled: anonymousPullEnabled + dataEndpointEnabled: dataEndpointEnabled + networkRuleBypassOptions: networkRuleBypassOptions + networkRuleSet: networkRuleSet + publicNetworkAccess: publicNetworkAccess + zoneRedundancy: zoneRedundancy + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { + name: diagnosticSettingsName + scope: containerRegistry + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** + +output id string = containerRegistry.id +output name string = containerRegistry.name +output sku string = containerRegistry.sku.name +output loginServer string = containerRegistry.properties.loginServer diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/log-analytics.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/log-analytics.bicep new file mode 100644 index 0000000..2618829 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/log-analytics.bicep @@ -0,0 +1,45 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Log Analytics workspace.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param sku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param retentionInDays int = 60 + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** +resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' = { + name: name + tags: tags + location: location + properties: { + sku: { + name: sku + } + retentionInDays: retentionInDays + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = workspace.id +output name string = workspace.name +output customerId string = workspace.properties.customerId diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/managed-identity.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/managed-identity.bicep new file mode 100644 index 0000000..656f1a4 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/managed-identity.bicep @@ -0,0 +1,54 @@ +//******************************************** +// Parameters +//******************************************** + +@description('Specifies the name of the user-defined managed identity.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the name of the Azure Container Registry.') +param containerRegistryName string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + + +resource containerRegistry 'Microsoft.ContainerRegistry/registries@2025-06-01-preview' existing = { + name: containerRegistryName +} + +resource acrPullRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = { + name: '7f951dda-4ed3-4680-a7ca-43fe172d538d' + scope: subscription() +} + +resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2025-01-31-preview' = { + name: name + location: location + tags: tags +} + +resource acrPullRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(containerRegistry.id, managedIdentity.id, acrPullRoleDefinition.id) + scope: containerRegistry + properties: { + roleDefinitionId: acrPullRoleDefinition.id + principalId: managedIdentity.properties.principalId + principalType: 'ServicePrincipal' + } +} + +//******************************************** +// Outputs +//******************************************** + +output id string = managedIdentity.id +output name string = managedIdentity.name +output clientId string = managedIdentity.properties.clientId +output principalId string = managedIdentity.properties.principalId diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/private-dns-zone.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/private-dns-zone.bicep new file mode 100644 index 0000000..d849259 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/private-dns-zone.bicep @@ -0,0 +1,41 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private DNS zone.') +param name string + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private DNS Zones +resource privateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = { + name: name + location: 'global' + tags: tags +} + +// Virtual Network Links +resource privateDnsZoneVirtualNetworkLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2024-06-01' = { + parent: privateDnsZone + name: 'link-to-vnet' + location: 'global' + properties: { + registrationEnabled: false + virtualNetwork: { + id: vnetId + } + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateDnsZone.id +output name string = privateDnsZone.name diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/private-endpoint.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/private-endpoint.bicep new file mode 100644 index 0000000..8fd35b8 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/private-endpoint.bicep @@ -0,0 +1,72 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private endpoint.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource ID of the subnet where private endpoints will be created.') +param subnetId string + +@description('Specifies the group IDs for the private link service connection.') +param groupIds array + +@description('Specifies the resource ID of the target resource.') +param privateLinkServiceId string + +@description('Specifies the resource ID of the private DNS zone.') +param privateDnsZoneId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private Endpoints +resource privateEndpoint 'Microsoft.Network/privateEndpoints@2025-05-01' = { + name: name + location: location + tags: tags + properties: { + privateLinkServiceConnections: [ + { + name: '${name}-pls-connection' + properties: { + privateLinkServiceId: privateLinkServiceId + groupIds: groupIds + } + } + ] + subnet: { + id: subnetId + } + } +} + +resource privateDnsZoneGroupName 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2025-05-01' = { + parent: privateEndpoint + name: 'private-dns-zone-group' + properties: { + privateDnsZoneConfigs: [ + { + name: 'dnsConfig' + properties: { + privateDnsZoneId: privateDnsZoneId + } + } + ] + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateEndpoint.id +output name string = privateEndpoint.name diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/virtual-network.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/virtual-network.bicep new file mode 100644 index 0000000..1c7a088 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/virtual-network.bicep @@ -0,0 +1,239 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'functionAppSubnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetNsgName string = '' + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the name of the public IP prefix for the Azure NAT Gateway.') +param natGatewayPublicIpPrefixName string + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the delegation service name.') +param delegationServiceName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var nsgLogCategories = [ + 'NetworkSecurityGroupEvent' + 'NetworkSecurityGroupRuleCounter' +] +var nsgLogs = [for category in nsgLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetLogCategories = [ + 'VMProtectionAlerts' +] +var vnetMetricCategories = [ + 'AllMetrics' +] +var vnetLogs = [for category in vnetLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetMetrics = [for category in vnetMetricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** + +// Virtual Network +resource vnet 'Microsoft.Network/virtualNetworks@2024-03-01' = { + name: virtualNetworkName + location: location + tags: tags + properties: { + addressSpace: { + addressPrefixes: [ + virtualNetworkAddressPrefixes + ] + } + subnets: [ + { + name: webAppSubnetName + properties: { + addressPrefix: webAppSubnetAddressPrefix + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + networkSecurityGroup: { + id: webAppSubnetNsg.id + } + natGateway: { + id: natGateway.id + } + delegations: [ + { + name: 'delegation' + properties: { + serviceName: delegationServiceName + } + } + ] + } + } + { + name: peSubnetName + properties: { + addressPrefix: peSubnetAddressPrefix + networkSecurityGroup: { + id: peSubnetNsg.id + } + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + natGateway: { + id: natGateway.id + } + } + } + ] + } +} + +resource webAppSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: webAppSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +resource peSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: peSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +// NAT Gateway +resource natGatewayPublicIpPrefix 'Microsoft.Network/publicIPPrefixes@2025-05-01' = { + name: natGatewayPublicIpPrefixName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIPAddressVersion: 'IPv4' + prefixLength: natGatewayPublicIpPrefixLength + } +} + +resource natGateway 'Microsoft.Network/natGateways@2025-05-01' = { + name: natGatewayName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIpPrefixes: [ + { + id: natGatewayPublicIpPrefix.id + } + ] + idleTimeoutInMinutes: natGatewayIdleTimeoutMins + } +} + +resource peSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: peSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource webAppSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webAppSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource vnetDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: vnet + properties: { + workspaceId: workspaceId + logs: vnetLogs + metrics: vnetMetrics + } +} + +//******************************************** +// Outputs +//******************************************** +output virtualNetworkId string = vnet.id +output virtualNetworkName string = vnet.name +output webAppSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, webAppSubnetName) +output webAppSubnetName string = webAppSubnetName +output peSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, peSubnetName) +output peSubnetName string = peSubnetName diff --git a/samples/web-app-custom-image/dotnet/bicep/modules/web-app.bicep b/samples/web-app-custom-image/dotnet/bicep/modules/web-app.bicep new file mode 100644 index 0000000..a51c307 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/bicep/modules/web-app.bicep @@ -0,0 +1,210 @@ +//******************************************** +// Parameters +//******************************************** + +@description('Specifies a globally unique name the Azure Web App.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param kind string = 'app,linux' + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = true + +@description('Specifies the name of the hosting plan.') +param hostingPlanName string + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the name of the subnet used by Azure Functions for the regional virtual network integration.') +param subnetName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the login server of the Azure Container Registry.') +param loginServer string + +@description('Specifies the name of the image to be used for the Web App.') +param imageName string + +@description('Specifies the tag of the image to be used for the Web App.') +param imageTag string + +@description('Specifies the type of the managed identity to be used by the Web App.') +@allowed([ + 'SystemAssigned' + 'UserAssigned' +]) +param managedIdentityType string = 'SystemAssigned' + +@description('Specifies the name of the managed identity to be used by the Web App if user assigned identity is selected.') +param managedIdentityName string = '' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** + +// Generates a unique container name for deployments. +var diagnosticSettingsName = 'default' +var logCategories = [ + 'AppServiceHTTPLogs' + 'AppServiceConsoleLogs' + 'AppServiceAppLogs' + 'AppServiceAuditLogs' + 'AppServiceIPSecAuditLogs' + 'AppServicePlatformLogs' + 'AppServiceAuthenticationLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** + +resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2025-01-31-preview' existing = { + name: managedIdentityName +} + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' existing = { + name: virtualNetworkName +} + +resource subnet 'Microsoft.Network/virtualNetworks/subnets@2024-05-01' existing = { + parent: virtualNetwork + name: subnetName +} + +resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' existing = { + name: hostingPlanName +} + +resource webApp 'Microsoft.Web/sites@2025-03-01' = { + name: name + location: location + tags: tags + kind: kind + properties: { + httpsOnly: httpsOnly + serverFarmId: hostingPlan.id + virtualNetworkSubnetId: subnet.id + outboundVnetRouting: { + allTraffic: true + applicationTraffic: true + contentShareTraffic: true + imagePullTraffic: true + backupRestoreTraffic: true + } + siteConfig: { + acrUseManagedIdentityCreds: true + acrUserManagedIdentityID: managedIdentity.properties.clientId + linuxFxVersion: 'DOCKER|${loginServer}/${imageName}:${imageTag}' + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: managedIdentityType + userAssignedIdentities : managedIdentityType == 'SystemAssigned' ? null : { + '${managedIdentity.id}': {} + } + } +} + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + WEBSITES_PORT: '80' + APP_NAME: 'Custom Image' + IMAGE_NAME: '${loginServer}/${imageName}:${imageTag}' + } +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webApp + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = webApp.id +output name string = webApp.name +output defaultHostName string = webApp.properties.defaultHostName diff --git a/samples/web-app-custom-image/dotnet/images/architecture.png b/samples/web-app-custom-image/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca0fe32580f44339177476ddbf38928c422703f GIT binary patch literal 121286 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

1y+&vpVeUx!!%3ch3OaM#4RN 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 literal 0 HcmV?d00001 diff --git a/samples/web-app-custom-image/dotnet/scripts/README.md b/samples/web-app-custom-image/dotnet/scripts/README.md new file mode 100644 index 0000000..a0ee2b4 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/scripts/README.md @@ -0,0 +1,258 @@ +# Azure CLI Deployment + +This directory contains the Azure CLI scripts for provisioning Azure services in LocalStack for Azure. For further details about the sample application, refer to the [Azure Web App with Custom Docker Image](../README.md). + +## Prerequisites + +Before deploying this solution, ensure you have the following tools installed: + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/): Local Azure cloud emulator for development and testing +- [Docker](https://docs.docker.com/get-docker/): Container runtime required for LocalStack and building the custom image +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli): Azure command-line interface +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +### Installing lstk CLI + +Deploying to LocalStack requires the `lstk` CLI, which routes Azure CLI commands to the emulator (run `lstk az start-interception` before deploying). Install it using Homebrew: + +```bash +brew install localstack/tap/lstk +``` + +or npm: + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). For more information, see the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +## Architecture Overview + +The [deploy.sh](deploy.sh) script creates all Azure resources from scratch using the Azure CLI: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Dedicated to [regional VNet integration](https://learn.microsoft.com/azure/azure-functions/functions-networking-options?tabs=azure-portal#outbound-networking-features) with the Web App. + - *pe-subnet*: Used for hosting Azure Private Endpoints. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone): Handles DNS resolution for the Azure Container Registry Private Endpoint within the virtual network. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview): Secures network access to the Azure Container Registry via a private IP within the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Provides deterministic outbound connectivity for the Web App. Included for completeness; the sample app does not call any external services. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): Enforces inbound and outbound traffic rules across the virtual network's subnets. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics from all resources in the solution. +8. [Azure Container Registry](https://learn.microsoft.com/azure/container-registry/container-registry-intro): A fully-managed container registry service based on the open-source [Docker platform](https://docs.docker.com/get-started/docker-overview/) used to hold the container image used by the web app. +9. [User-Assigned Managed Identity](https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview): Assigned the [AcrPull](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/containers#acrpull) role on the Azure Container Registry, enabling the Web App to pull the container image without storing credentials. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core application from the custom container image stored in the Azure Container Registry. + +## Provisioning Scripts + +See [deploy.sh](deploy.sh) for the complete deployment automation. The script performs: + +- Creates resource group +- Deploys Azure Container Registry +- Builds container image locally and pushes it to ACR +- Deploys remaining Azure resources (VNet, NSG, NAT Gateway, DNS, Private Endpoint, App Service Plan, managed identity, Web App) +- Configures Web App to use the container image from ACR +- Assigns [AcrPull](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/containers#acrpull) role to the user-assigned managed identity + +## Deployment + +You can set up the Azure emulator by utilizing the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `scripts` folder: + +```bash +cd samples/web-app-custom-image/dotnet/scripts +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +Once the deployment completes, run the [validate.sh](validate.sh) script to confirm that all resources were provisioned and configured as expected: + +```bash +#!/bin/bash +set -euo pipefail + +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +ACR_NAME="${PREFIX}acr${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.azurecr.io" +PRIVATE_ENDPOINT_NAME="${PREFIX}-acr-pe-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table + +# Check managed identity +echo -e "[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] App Service Plan:\n" +az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Container Registry +echo -e "\n[$ACR_NAME] Azure Container Registry:\n" +az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] Web App:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "{name:name, state:state, defaultHostName:defaultHostName, kind:kind}" \ + --output table + +# Check App Settings +echo -e "\n[$WEB_APP_NAME] app settings:\n" +az webapp config appsettings list \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "[?name=='IMAGE_NAME' || name=='APP_NAME' || name=='WEBSITES_PORT']" \ + --output table + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Public IP Prefix +echo -e "\n[$PIP_PREFIX_NAME] public ip prefix:\n" +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +echo -e "\nResources in [$RESOURCE_GROUP_NAME]:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the Azure CLI deployment script. + +## Related Documentation + +- [Azure CLI Documentation](https://learn.microsoft.com/en-us/cli/azure/) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh b/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh new file mode 100755 index 0000000..9189998 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -euo pipefail + +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" + +get_docker_container_name_by_prefix() { + local app_prefix="$1" + docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1 +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name" +} + +APP_HOST_NAME=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "defaultHostName" \ + --output tsv \ + --only-show-errors) + +if [ -z "$APP_HOST_NAME" ]; then + echo "Failed to retrieve Web App hostname." + exit 1 +fi + +echo "Web App hostname: $APP_HOST_NAME" + +echo "Calling Web App using $APP_HOST_NAME..." +curl --max-time 10 -fsS "http://$APP_HOST_NAME/api/status" +echo "" diff --git a/samples/web-app-custom-image/dotnet/scripts/deploy.sh b/samples/web-app-custom-image/dotnet/scripts/deploy.sh new file mode 100755 index 0000000..fbd7ada --- /dev/null +++ b/samples/web-app-custom-image/dotnet/scripts/deploy.sh @@ -0,0 +1,1023 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +ACR_NAME="${PREFIX}acr${SUFFIX}" +ACR_SKU='Premium' +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +IMAGE_NAME="custom-image-webapp" +IMAGE_TAG="v1" +LOCAL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +VIRTUAL_NETWORK_ADDRESS_PREFIX="10.0.0.0/8" +WEB_APP_SUBNET_NAME="app-subnet" +WEB_APP_SUBNET_PREFIX="10.0.0.0/24" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NAME="pe-subnet" +PE_SUBNET_PREFIX="10.0.1.0/24" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +VIRTUAL_NETWORK_LINK_NAME="link-to-vnet" +PRIVATE_DNS_ZONE_NAME="privatelink.azurecr.io" +PRIVATE_ENDPOINT_NAME="${PREFIX}-acr-pe-${SUFFIX}" +PRIVATE_ENDPOINT_GROUP="registry" +PRIVATE_DNS_ZONE_GROUP_NAME="default" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +DIAGNOSTIC_SETTINGS_NAME='default' +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +RETRY_COUNT=3 +SLEEP=5 + +cd "$CURRENT_DIR" || exit + +# Create a resource group +echo "Creating resource group [$RESOURCE_GROUP_NAME]..." +az group create \ + --name "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Resource group [$RESOURCE_GROUP_NAME] created successfully." +else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit 1 +fi + +# Check if the Azure Container Registry already exists +echo "Checking if [$ACR_NAME] Azure Container Registry already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$ACR_NAME] Azure Container Registry exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating Azure Container Registry [$ACR_NAME]..." + az acr create \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --sku "$ACR_SKU" \ + --admin-enabled true \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Azure Container Registry [$ACR_NAME] created successfully." + else + echo "Failed to create Azure Container Registry [$ACR_NAME]." + exit 1 + fi +else + echo "[$ACR_NAME] Azure Container Registry already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the Azure Container Registry resource id +echo "Getting [$ACR_NAME] Azure Container Registry resource id in the [$RESOURCE_GROUP_NAME] resource group..." +ACR_ID=$(az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $ACR_ID ]]; then + echo "[$ACR_NAME] Azure Container Registry resource id retrieved successfully: $ACR_ID" +else + echo "Failed to retrieve [$ACR_NAME] Azure Container Registry resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +echo "Logging into Azure Container Registry [$ACR_NAME]..." +az acr login --name "$ACR_NAME" --only-show-errors + +if [ $? -eq 0 ]; then + echo "Logged into Azure Container Registry [$ACR_NAME] successfully." +else + echo "Failed to log into Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +echo "Getting login server for Azure Container Registry [$ACR_NAME]..." +ACR_LOGIN_SERVER=$(az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "loginServer" \ + --output tsv \ + --only-show-errors) + +if [ -n "$ACR_LOGIN_SERVER" ]; then + echo "Login server retrieved successfully: $ACR_LOGIN_SERVER" +else + echo "Failed to retrieve login server for Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +# Create full image name with login server, image name, and tag +FULL_IMAGE="${ACR_LOGIN_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}" + +echo "Building custom Docker image [$LOCAL_IMAGE]..." +docker build -t "$LOCAL_IMAGE" ../src/ + +if [ $? -eq 0 ]; then + echo "Docker image [$LOCAL_IMAGE] built successfully." +else + echo "Failed to build Docker image [$LOCAL_IMAGE]." + exit 1 +fi + +echo "Tagging Docker image [$LOCAL_IMAGE] as [$FULL_IMAGE]..." +docker tag "$LOCAL_IMAGE" "$FULL_IMAGE" + +if [ $? -eq 0 ]; then + echo "Docker image [$LOCAL_IMAGE] tagged as [$FULL_IMAGE] successfully." +else + echo "Failed to tag Docker image [$LOCAL_IMAGE] as [$FULL_IMAGE]." + exit 1 +fi + +echo "Pushing image [$FULL_IMAGE] to ACR..." +docker push "$FULL_IMAGE" + +if [ $? -eq 0 ]; then + echo "Docker image [$FULL_IMAGE] pushed to ACR successfully." +else + echo "Failed to push Docker image [$FULL_IMAGE] to ACR." + exit 1 +fi + +# Check if the user-assigned managed identity already exists +echo "Checking if [$MANAGED_IDENTITY_NAME] user-assigned managed identity actually exists in the [$RESOURCE_GROUP_NAME] resource group..." + +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MANAGED_IDENTITY_NAME] user-assigned managed identity actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$MANAGED_IDENTITY_NAME] user-assigned managed identity in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the user-assigned managed identity + az identity create \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$MANAGED_IDENTITY_NAME] user-assigned managed identity successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$MANAGED_IDENTITY_NAME] user-assigned managed identity in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$MANAGED_IDENTITY_NAME] user-assigned managed identity already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Retrieve the principalId of the user-assigned managed identity +echo "Retrieving principalId for [$MANAGED_IDENTITY_NAME] managed identity..." +PRINCIPAL_ID=$(az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query principalId \ + --output tsv) + +if [[ -n $PRINCIPAL_ID ]]; then + echo "[$PRINCIPAL_ID] principalId for the [$MANAGED_IDENTITY_NAME] managed identity successfully retrieved" +else + echo "Failed to retrieve principalId for the [$MANAGED_IDENTITY_NAME] managed identity" + exit 1 +fi + +# Retrieve the clientId of the user-assigned managed identity +echo "Retrieving clientId for [$MANAGED_IDENTITY_NAME] managed identity..." +CLIENT_ID=$(az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query clientId \ + --output tsv) + +if [[ -n $CLIENT_ID ]]; then + echo "[$CLIENT_ID] clientId for the [$MANAGED_IDENTITY_NAME] managed identity successfully retrieved" +else + echo "Failed to retrieve clientId for the [$MANAGED_IDENTITY_NAME] managed identity" + exit 1 +fi + +# Retrieve the resource id of the user-assigned managed identity +echo "Retrieving resource id for the [$MANAGED_IDENTITY_NAME] managed identity..." +IDENTITY_ID=$(az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv) + +if [[ -n $IDENTITY_ID ]]; then + echo "Resource id for the [$MANAGED_IDENTITY_NAME] managed identity successfully retrieved" +else + echo "Failed to retrieve the resource id for the [$MANAGED_IDENTITY_NAME] managed identity" + exit 1 +fi + +# Assign the AcrPull role to the managed identity with the Azure Container Registry as scope +ROLE="AcrPull" +echo "Checking if the [$MANAGED_IDENTITY_NAME] managed identity has the [$ROLE] role assignment on Azure Container Registry [$ACR_NAME]..." +current=$(az role assignment list \ + --assignee "$PRINCIPAL_ID" \ + --scope "$ACR_ID" \ + --query "[?roleDefinitionName=='$ROLE'].roleDefinitionName" \ + --output tsv 2>/dev/null) + +if [[ $current == "$ROLE" ]]; then + echo "Managed identity [$MANAGED_IDENTITY_NAME] already has the [$ROLE] role assignment on Azure Container Registry [$ACR_NAME]" +else + echo "Managed identity [$MANAGED_IDENTITY_NAME] does not have the [$ROLE] role assignment on Azure Container Registry [$ACR_NAME]" + echo "Creating role assignment: assigning [$ROLE] role to managed identity [$MANAGED_IDENTITY_NAME] on Azure Container Registry [$ACR_NAME]..." + ATTEMPT=1 + while [ $ATTEMPT -le $RETRY_COUNT ]; do + echo "Attempt $ATTEMPT of $RETRY_COUNT to assign role..." + az role assignment create \ + --assignee "$PRINCIPAL_ID" \ + --role "$ROLE" \ + --scope "$ACR_ID" 1>/dev/null + + if [[ $? == 0 ]]; then + break + else + if [ $ATTEMPT -lt $RETRY_COUNT ]; then + echo "Role assignment failed. Waiting [$SLEEP] seconds before retry..." + sleep $SLEEP + fi + ATTEMPT=$((ATTEMPT + 1)) + fi + done + + if [[ $? == 0 ]]; then + echo "Successfully assigned [$ROLE] role to managed identity [$MANAGED_IDENTITY_NAME] on Azure Container Registry [$ACR_NAME]" + else + echo "Failed to assign [$ROLE] role to managed identity [$MANAGED_IDENTITY_NAME] on Azure Container Registry [$ACR_NAME]" + exit 1 + fi +fi + +# Check if the network security group for the web app subnet already exists +echo "Checking if [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the network security group for the web app subnet + az network nsg create \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the web app subnet +echo "Getting [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_SUBNET_NSG_ID=$(az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_SUBNET_NSG_ID ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id retrieved successfully: $WEB_APP_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the network security group for the private endpoint subnet already exists +echo "Checking if [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the network security group for the private endpoint subnet + az network nsg create \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the private endpoint subnet +echo "Getting [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +PE_SUBNET_NSG_ID=$(az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $PE_SUBNET_NSG_ID ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id retrieved successfully: $PE_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the public IP prefix for the NAT Gateway already exists +echo "Checking if [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the public IP prefix for the NAT Gateway + az network public-ip prefix create \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --length 31 \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the NAT Gateway already exists +echo "Checking if [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the NAT Gateway + az network nat gateway create \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --public-ip-prefixes "$PIP_PREFIX_NAME" \ + --idle-timeout 4 \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$NAT_GATEWAY_NAME] NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$NAT_GATEWAY_NAME] NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the virtual network + az network vnet create \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --address-prefixes "$VIRTUAL_NETWORK_ADDRESS_PREFIX" \ + --subnet-name "$WEB_APP_SUBNET_NAME" \ + --subnet-prefix "$WEB_APP_SUBNET_PREFIX" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + echo "Associating [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group..." + az network vnet subnet update \ + --name "$WEB_APP_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --nat-gateway "$NAT_GATEWAY_NAME" \ + --network-security-group "$WEB_APP_SUBNET_NSG_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NAME] subnet successfully associated with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + else + echo "Failed to associate [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + exit 1 + fi +else + echo "[$VIRTUAL_NETWORK_NAME] virtual network already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the subnet already exists +echo "Checking if [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network..." +az network vnet subnet show \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network" + echo "Creating [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the subnet + az network vnet subnet create \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --address-prefix "$PE_SUBNET_PREFIX" \ + --network-security-group "$PE_SUBNET_NSG_NAME" \ + --private-endpoint-network-policies "Disabled" \ + --private-link-service-network-policies "Disabled" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NAME] subnet successfully created in the [$VIRTUAL_NETWORK_NAME] virtual network" + else + echo "Failed to create [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$PE_SUBNET_NAME] subnet already exists in the [$VIRTUAL_NETWORK_NAME] virtual network" +fi + +# Retrieve the virtual network resource id +echo "Getting [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group..." +VIRTUAL_NETWORK_ID=$(az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $VIRTUAL_NETWORK_ID ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network resource id retrieved successfully: $VIRTUAL_NETWORK_ID" +else + echo "Failed to retrieve [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the private DNS Zone already exists +echo "Checking if [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the private DNS Zone + az network private-dns zone create \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network link between the private DNS zone and the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists..." +az network private-dns link vnet show \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists" + + echo "Creating [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network + az network private-dns link vnet create \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --virtual-network "$VIRTUAL_NETWORK_ID" \ + --registration-enabled false \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network already exists" +fi + +# Check if the private endpoint already exists +echo "Checking if private endpoint [$PRIVATE_ENDPOINT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group..." +privateEndpointId=$(az network private-endpoint list \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --query "[?name=='$PRIVATE_ENDPOINT_NAME'].id" \ + --output tsv) + +if [[ -z $privateEndpointId ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] does not exist in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_ENDPOINT_NAME] private endpoint for the [$ACR_NAME] Azure Container Registry in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a private endpoint for the Azure Container Registry + az network private-endpoint create \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --subnet "$PE_SUBNET_NAME" \ + --private-connection-resource-id "$ACR_ID" \ + --group-id "$PRIVATE_ENDPOINT_GROUP" \ + --connection-name "acr-connection" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] successfully created for the [$ACR_NAME] Azure Container Registry in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create a private endpoint for the [$ACR_NAME] Azure Container Registry in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the private DNS zone group is already created for the Azure Container Registry private endpoint +echo "Checking if the private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists..." +NAME=$(az network private-endpoint dns-zone-group show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --query name \ + --output tsv \ + --only-show-errors) + +if [[ -z $NAME ]]; then + echo "No private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint actually exists" + echo "Creating private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint..." + + # Create the private DNS zone group for the Azure Container Registry private endpoint + az network private-endpoint dns-zone-group create \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --private-dns-zone "$PRIVATE_DNS_ZONE_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint successfully created" + else + echo "Failed to create private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint" + exit + fi +else + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists" +fi + +# Check if the App Service Plan already exists +echo "Checking if [$APP_SERVICE_PLAN_NAME] App Service Plan already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$APP_SERVICE_PLAN_NAME] App Service Plan exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating Linux App Service Plan [$APP_SERVICE_PLAN_NAME]..." + az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "App Service Plan [$APP_SERVICE_PLAN_NAME] created successfully." + else + echo "Failed to create App Service Plan [$APP_SERVICE_PLAN_NAME]." + exit 1 + fi +else + echo "[$APP_SERVICE_PLAN_NAME] App Service Plan already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the App Service Plan resource id +echo "Getting [$APP_SERVICE_PLAN_NAME] App Service Plan resource id in the [$RESOURCE_GROUP_NAME] resource group..." +APP_SERVICE_PLAN_ID=$(az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $APP_SERVICE_PLAN_ID ]]; then + echo "[$APP_SERVICE_PLAN_NAME] App Service Plan resource id retrieved successfully: $APP_SERVICE_PLAN_ID" +else + echo "Failed to retrieve [$APP_SERVICE_PLAN_NAME] App Service Plan resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the Web App already exists +echo "Checking if [$WEB_APP_NAME] Web App already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$WEB_APP_NAME] Web App exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating Web App [$WEB_APP_NAME] from custom image [$FULL_IMAGE]..." + az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --assign-identity "${IDENTITY_ID}" \ + --container-image-name "$FULL_IMAGE" \ + --vnet "$VIRTUAL_NETWORK_NAME" \ + --subnet "$WEB_APP_SUBNET_NAME" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Web App [$WEB_APP_NAME] created successfully." + else + echo "Failed to create Web App [$WEB_APP_NAME]." + exit 1 + fi +else + echo "[$WEB_APP_NAME] Web App already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Configure the App Service to use managed identity for ACR authentication +echo "Configuring Web App [$WEB_APP_NAME] to use managed identity [$MANAGED_IDENTITY_NAME] to access Azure Container Registry [$ACR_NAME]..." +az webapp config set \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --generic-configurations "{\"acrUseManagedIdentityCreds\": true, \"acrUserManagedIdentityID\": \"$CLIENT_ID\"}" 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web App [$WEB_APP_NAME] configured to use managed identity [$MANAGED_IDENTITY_NAME] to access Azure Container Registry [$ACR_NAME] successfully." +else + echo "Failed to configure Web App [$WEB_APP_NAME] to use managed identity [$MANAGED_IDENTITY_NAME] to access Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +# Get the Web App resource id +echo "Getting [$WEB_APP_NAME] Web App resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_ID=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_ID ]]; then + echo "[$WEB_APP_NAME] Web App resource id retrieved successfully: $WEB_APP_ID" +else + echo "Failed to retrieve [$WEB_APP_NAME] Web App resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Enabling forced tunneling for the web app to route all outbound traffic through the virtual network +echo "Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network..." + +az resource update \ + --ids "$WEB_APP_ID" \ + --set properties.outboundVnetRouting.allTraffic=true \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Forced tunneling enabled for web app [$WEB_APP_NAME]." +else + echo "Failed to enable forced tunneling for web app [$WEB_APP_NAME]." + exit 1 +fi + +# Set web app settings +echo "Setting Web App container settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --settings \ + WEBSITES_PORT="80" \ + APP_NAME="Custom Image" \ + IMAGE_NAME="$FULL_IMAGE" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web App settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set Web App settings for [$WEB_APP_NAME]." + exit 1 +fi + +# Check if the Log Analytics workspace already exists +echo "Checking if [$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$LOG_ANALYTICS_NAME] Log Analytics workspace actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the Log Analytics workspace + az monitor log-analytics workspace create \ + --name "$LOG_ANALYTICS_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --query-access "Enabled" \ + --retention-time 30 \ + --sku "PerNode" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check whether the diagnostic settings for the container registry already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$ACR_NAME] container registry already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$ACR_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$ACR_NAME] container registry actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$ACR_NAME] container registry..." + + # Create the diagnostic settings for the container registry to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$ACR_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "ContainerRegistryRepositoryEvents", "enabled": true}, + {"category": "ContainerRegistryLoginEvents", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$ACR_NAME] container registry successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$ACR_NAME] container registry" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$ACR_NAME] container registry already exist" +fi + +# Check whether the diagnostic settings for the web app already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app..." + + # Create the diagnostic settings for the web app to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "AppServiceHTTPLogs", "enabled": true}, + {"category": "AppServiceConsoleLogs", "enabled": true}, + {"category": "AppServiceAppLogs", "enabled": true}, + {"category": "AppServiceAuditLogs", "enabled": true}, + {"category": "AppServiceIPSecAuditLogs", "enabled": true}, + {"category": "AppServicePlatformLogs", "enabled": true}, + {"category": "AppServiceAuthenticationLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist" +fi + +# Check whether the diagnostic settings for the App Service Plan already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] App Service Plan already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] App Service Plan actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] App Service Plan..." + + # Create the diagnostic settings for the App Service Plan to send metrics to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] App Service Plan successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] App Service Plan" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] App Service Plan already exist" +fi + +# Check whether the diagnostic settings for the virtual network already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the diagnostic settings for the virtual network to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "VMProtectionAlerts", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist" +fi + +# Check whether the diagnostic settings for the network security group for the web app subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the diagnostic settings for the network security group for the web app subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist" +fi + +# Check whether the diagnostic settings for the network security group for the private endpoint subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the diagnostic settings for the network security group for the private endpoint subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist" +fi + +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table + +echo "" +echo "Deployment complete." +echo "Resource Group: $RESOURCE_GROUP_NAME" +echo "App Service Plan: $APP_SERVICE_PLAN_NAME" +echo "Web App: $WEB_APP_NAME" +echo "Azure Container Registry: $ACR_NAME ($ACR_LOGIN_SERVER)" +echo "Image: $FULL_IMAGE" +echo "Managed Identity: $MANAGED_IDENTITY_NAME" +echo "" +echo "Run 'bash scripts/validate.sh' to verify the deployment." diff --git a/samples/web-app-custom-image/dotnet/scripts/validate.sh b/samples/web-app-custom-image/dotnet/scripts/validate.sh new file mode 100755 index 0000000..b58fb61 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/scripts/validate.sh @@ -0,0 +1,132 @@ +#!/bin/bash +set -euo pipefail + +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +ACR_NAME="${PREFIX}acr${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.azurecr.io" +PRIVATE_ENDPOINT_NAME="${PREFIX}-acr-pe-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table + +# Check managed identity +echo -e "[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] App Service Plan:\n" +az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Container Registry +echo -e "\n[$ACR_NAME] Azure Container Registry:\n" +az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] Web App:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "{name:name, state:state, defaultHostName:defaultHostName, kind:kind}" \ + --output table + +# Check App Settings +echo -e "\n[$WEB_APP_NAME] app settings:\n" +az webapp config appsettings list \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "[?name=='IMAGE_NAME' || name=='APP_NAME' || name=='WEBSITES_PORT']" \ + --output table + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Public IP Prefix +echo -e "\n[$PIP_PREFIX_NAME] public ip prefix:\n" +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +echo -e "\nResources in [$RESOURCE_GROUP_NAME]:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table diff --git a/samples/web-app-custom-image/dotnet/src/.dockerignore b/samples/web-app-custom-image/dotnet/src/.dockerignore new file mode 100644 index 0000000..c68ede2 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/.dockerignore @@ -0,0 +1,4 @@ +.git +bin/ +obj/ +*.zip diff --git a/samples/web-app-custom-image/dotnet/src/AppInfo.cs b/samples/web-app-custom-image/dotnet/src/AppInfo.cs new file mode 100644 index 0000000..0e938e3 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/AppInfo.cs @@ -0,0 +1,11 @@ +namespace VacationPlanner; + +///

Deployment details shown on the page and returned by /api/status. +public static class AppInfo +{ + public static string AppName => Environment.GetEnvironmentVariable("APP_NAME") ?? "Custom Image Web App"; + + public static string ImageName => Environment.GetEnvironmentVariable("IMAGE_NAME") ?? "custom-image-webapp:v1"; + + public static string HostName => Environment.MachineName; +} diff --git a/samples/web-app-custom-image/dotnet/src/Dockerfile b/samples/web-app-custom-image/dotnet/src/Dockerfile new file mode 100644 index 0000000..29a6679 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src +COPY VacationPlanner.csproj . +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /app/publish --no-restore + +FROM mcr.microsoft.com/dotnet/aspnet:10.0 +WORKDIR /app +COPY --from=build /app/publish . +# App Service (and the emulator) read the container port from the image's PORT variable; +# Kestrel binds it through ASPNETCORE_URLS. +ENV PORT=80 \ + ASPNETCORE_URLS=http://+:80 +EXPOSE 80 +ENTRYPOINT ["dotnet", "VacationPlanner.dll"] diff --git a/samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml b/samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..ba477ef --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,35 @@ +@page +@model IndexModel + + + + + + @Model.AppName + + + +
+
+

Azure Web App for Containers

+

@Model.AppName

+

This ASP.NET Core app is running from a custom Docker image on an emulated Azure Web App.

+
+ +
+
+ Image + @Model.ImageName +
+
+ Host + @Model.HostName +
+
+ Status endpoint + /api/status +
+
+
+ + diff --git a/samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..e9b15cf --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace VacationPlanner.Pages; + +public class IndexModel : PageModel +{ + public string AppName => AppInfo.AppName; + + public string ImageName => AppInfo.ImageName; + + public string HostName => AppInfo.HostName; + + public void OnGet() + { + } +} diff --git a/samples/web-app-custom-image/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-custom-image/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..e3c5b64 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using VacationPlanner +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-custom-image/dotnet/src/Program.cs b/samples/web-app-custom-image/dotnet/src/Program.cs new file mode 100644 index 0000000..b9d31ad --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/Program.cs @@ -0,0 +1,29 @@ +using VacationPlanner; + +var builder = WebApplication.CreateBuilder(args); + +// Code deployments built by Oryx export ASPNETCORE_URLS; custom images and local runs only set PORT. +if (Environment.GetEnvironmentVariable("ASPNETCORE_URLS") is null + && Environment.GetEnvironmentVariable("PORT") is { Length: > 0 } port) +{ + builder.WebHost.UseUrls($"http://*:{port}"); +} + +builder.Services.AddRazorPages(); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/api/status", () => Results.Json(new +{ + status = "ok", + app = AppInfo.AppName, + image = AppInfo.ImageName, + hostname = AppInfo.HostName, +})); + +app.MapGet("/health", () => Results.Json(new { status = "ok" })); + +app.Run(); diff --git a/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj b/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..10cba06 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,9 @@ + + + net10.0 + enable + enable + VacationPlanner + true + + diff --git a/samples/web-app-custom-image/dotnet/src/appsettings.json b/samples/web-app-custom-image/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-custom-image/dotnet/src/wwwroot/style.css b/samples/web-app-custom-image/dotnet/src/wwwroot/style.css new file mode 100644 index 0000000..0764737 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/src/wwwroot/style.css @@ -0,0 +1,100 @@ +:root { + color-scheme: light; + --ink: #172033; + --muted: #53606f; + --surface: #ffffff; + --line: #d8dee7; + --accent: #0f766e; + --accent-2: #b45309; + --page: #f5f7fb; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + color: var(--ink); + background: + linear-gradient(120deg, rgba(15, 118, 110, 0.12), transparent 36%), + linear-gradient(300deg, rgba(180, 83, 9, 0.12), transparent 34%), + var(--page); +} + +.shell { + width: min(1040px, calc(100% - 32px)); + margin: 0 auto; + padding: 64px 0; +} + +.hero { + padding: 48px 0 36px; +} + +.eyebrow { + margin: 0 0 12px; + color: var(--accent); + font-size: 0.84rem; + font-weight: 800; + letter-spacing: 0; + text-transform: uppercase; +} + +h1 { + margin: 0; + max-width: 760px; + font-size: clamp(2.5rem, 6vw, 5.2rem); + line-height: 0.95; + letter-spacing: 0; +} + +.lede { + max-width: 640px; + margin: 24px 0 0; + color: var(--muted); + font-size: 1.16rem; + line-height: 1.6; +} + +.details { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 16px; + margin-top: 32px; +} + +article { + min-height: 120px; + padding: 20px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--surface); +} + +span { + display: block; + color: var(--muted); + font-size: 0.85rem; + font-weight: 700; +} + +strong { + display: block; + margin-top: 10px; + overflow-wrap: anywhere; + font-size: 1.05rem; + line-height: 1.35; +} + +@media (max-width: 720px) { + .shell { + padding: 36px 0; + } + + .details { + grid-template-columns: 1fr; + } +} diff --git a/samples/web-app-custom-image/dotnet/terraform/README.md b/samples/web-app-custom-image/dotnet/terraform/README.md new file mode 100644 index 0000000..d743d7f --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/README.md @@ -0,0 +1,287 @@ +# Terraform Deployment + +This directory contains Terraform modules and a deployment script for provisioning Azure services in LocalStack for Azure. For further details about the sample application, refer to the [Azure Web App with Custom Docker Image](../README.md). + +## Prerequisites + +Before deploying this solution, ensure you have the following tools installed: + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/): Local Azure cloud emulator for development and testing +- [Visual Studio Code](https://code.visualstudio.com/): Code editor installed on one of the [supported platforms](https://code.visualstudio.com/docs/supporting/requirements#_platforms) +- [Terraform](https://developer.hashicorp.com/terraform/downloads): Infrastructure as Code tool for provisioning Azure resources +- [Docker](https://docs.docker.com/get-docker/): Container runtime required for LocalStack and building the custom image +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli): Azure command-line interface +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0): only needed to build or run the web application outside Docker +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +### Installing lstk CLI + +Deploying to LocalStack requires the `lstk` CLI, which routes Azure CLI commands to the emulator (run `lstk az start-interception` before deploying). Install it using Homebrew: + +```bash +brew install localstack/tap/lstk +``` + +or npm: + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). For more information, see the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +## Architecture Overview + +The Terraform modules create the following Azure resources: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Dedicated to [regional VNet integration](https://learn.microsoft.com/azure/azure-functions/functions-networking-options?tabs=azure-portal#outbound-networking-features) with the Web App. + - *pe-subnet*: Used for hosting Azure Private Endpoints. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone): Handles DNS resolution for the Azure Container Registry Private Endpoint within the virtual network. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview): Secures network access to the Azure Container Registry via a private IP within the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Provides deterministic outbound connectivity for the Web App. Included for completeness; the sample app does not call any external services. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): Enforces inbound and outbound traffic rules across the virtual network's subnets. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics from all resources in the solution. +8. [Azure Container Registry](https://learn.microsoft.com/azure/container-registry/container-registry-intro): A fully-managed container registry service based on the open-source [Docker platform](https://docs.docker.com/get-started/docker-overview/) used to hold the container image used by the web app. +9. [User-Assigned Managed Identity](https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview): Created and associated with the Web App. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core application from the custom container image stored in the Azure Container Registry. + +> **Note** +> The Terraform [azurerm_linux_web_app](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/linux_web_app) resource does not support using a managed identity for container image pull from Azure Container Registry. The Terraform deployment uses ACR admin username and password instead of a managed identity. + +## Provisioning Scripts + +You can use the [deploy.sh](deploy.sh) script to automate the deployment of all Azure resources in a single step, streamlining setup and reducing manual configuration. The script executes the following steps: + +- Cleans up any previous Terraform state and plan files to ensure a fresh deployment. +- Initializes the Terraform working directory and downloads required plugins. +- Creates and validates a Terraform execution plan for the Azure infrastructure. +- Applies the Terraform plan to provision all necessary Azure resources. +- Uses a [`local-exec` provisioner](https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec) on a `null_resource` to build and push the container image to the Azure Container Registry locally before deploying the Web App. +- Deploys the Web App configured to pull the container image using ACR admin credentials. + +## Configuration + +When using LocalStack for Azure, configure the `metadata_host` and `subscription_id` settings in the [Azure Provider for Terraform](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) to ensure proper connectivity: + +```hcl +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} +``` + +## Deployment + +You can set up the Azure emulator by utilizing the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `terraform` folder: + +```bash +cd samples/web-app-custom-image/dotnet/terraform +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +Once the deployment completes, run the [validate.sh](../scripts/validate.sh) script to confirm that all resources were provisioned and configured as expected: + +```bash +#!/bin/bash +set -euo pipefail + +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +ACR_NAME="${PREFIX}acr${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.azurecr.io" +PRIVATE_ENDPOINT_NAME="${PREFIX}-acr-pe-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table + +# Check managed identity +echo -e "[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] App Service Plan:\n" +az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Container Registry +echo -e "\n[$ACR_NAME] Azure Container Registry:\n" +az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] Web App:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "{name:name, state:state, defaultHostName:defaultHostName, kind:kind}" \ + --output table + +# Check App Settings +echo -e "\n[$WEB_APP_NAME] app settings:\n" +az webapp config appsettings list \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "[?name=='IMAGE_NAME' || name=='APP_NAME' || name=='WEBSITES_PORT']" \ + --output table + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Public IP Prefix +echo -e "\n[$PIP_PREFIX_NAME] public ip prefix:\n" +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +echo -e "\nResources in [$RESOURCE_GROUP_NAME]:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the Terraform deployment. + +## Related Documentation + +- [Terraform Azure Provider Documentation](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) +- [Terraform local-exec Provisioner](https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-custom-image/dotnet/terraform/deploy.sh b/samples/web-app-custom-image/dotnet/terraform/deploy.sh new file mode 100755 index 0000000..63e42fb --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/deploy.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +IMAGE_NAME="custom-image-webapp" +IMAGE_TAG="v1" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Intialize Terraform +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" \ + -var "image_name=$IMAGE_NAME" \ + -var "image_tag=$IMAGE_TAG" + +if [[ $? != 0 ]]; then + echo "Terraform plan failed. Exiting." + exit 1 +fi + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) +ACR_NAME=$(terraform output -raw container_registry_name) + +if [[ -z "$RESOURCE_GROUP_NAME" || -z "$WEB_APP_NAME" || -z "$ACR_NAME" ]]; then + echo "Resource Group Name, Web App Name, or ACR Name is empty. Exiting." + exit 1 +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/main.tf b/samples/web-app-custom-image/dotnet/terraform/main.tf new file mode 100644 index 0000000..ae6ad62 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/main.tf @@ -0,0 +1,224 @@ +# Local Variables +locals { + prefix = lower(var.prefix) + suffix = lower(var.suffix) + resource_group_name = "${var.prefix}-rg" + log_analytics_name = "${local.prefix}-log-analytics-${local.suffix}" + virtual_network_name = "${local.prefix}-vnet-${local.suffix}" + nat_gateway_name = "${local.prefix}-nat-gateway-${local.suffix}" + nat_gateway_ip_prefix_name = "${local.prefix}-nat-gateway-pip-prefix-${local.suffix}" + private_endpoint_name = "${local.prefix}-acr-pe-${local.suffix}" + webapp_subnet_nsg_name = "${local.prefix}-webapp-subnet-nsg-${local.suffix}" + pe_subnet_nsg_name = "${local.prefix}-pe-subnet-nsg-${local.suffix}" + acr_name = "${local.prefix}acr${local.suffix}" + managed_identity_name = "${local.prefix}-identity-${local.suffix}" + app_service_plan_name = "${local.prefix}-app-service-plan-${local.suffix}" + web_app_name = "${local.prefix}-webapp-${local.suffix}" +} + +# Data Sources +data "azurerm_client_config" "current" { +} + +# Create a resource group +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +# Create a log analytics workspace +module "log_analytics_workspace" { + source = "./modules/log_analytics" + name = local.log_analytics_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + tags = var.tags +} + +# Create a container registry +module "container_registry" { + source = "./modules/container_registry" + name = local.acr_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + sku = var.acr_sku + admin_enabled = var.acr_admin_enabled + georeplication_locations = var.acr_georeplication_locations + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Create a virtual network with subnets +module "virtual_network" { + source = "./modules/virtual_network" + resource_group_name = azurerm_resource_group.example.name + location = var.location + vnet_name = local.virtual_network_name + address_space = var.vnet_address_space + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + subnets = [ + { + name : var.webapp_subnet_name + address_prefixes : var.webapp_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : "Microsoft.Web/serverFarms" + }, + { + name : var.pe_subnet_name + address_prefixes : var.pe_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : null + } + ] +} + +# Create a network security group and associate it with the webapp subnet +module "webapp_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.webapp_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } +} + +# Create a network security group and associate it with the private endpoint subnet +module "pe_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.pe_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.pe_subnet_name) = module.virtual_network.subnet_ids[var.pe_subnet_name] + } +} + +# Create a NAT gateway and associate it with the webapp subnet +module "nat_gateway" { + source = "./modules/nat_gateway" + name = local.nat_gateway_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + sku_name = var.nat_gateway_sku_name + public_ip_prefix_name = local.nat_gateway_ip_prefix_name + public_ip_prefix_length = 31 + idle_timeout_in_minutes = var.nat_gateway_idle_timeout_in_minutes + zones = var.nat_gateway_zones + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } + tags = var.tags +} + +# Create a private DNS zone for the CosmosDB MongoDB account and link it to the virtual network +module "private_dns_zone" { + source = "./modules/private_dns_zone" + name = "privatelink.azurecr.io" + resource_group_name = azurerm_resource_group.example.name + tags = var.tags + virtual_networks_to_link = { + (module.virtual_network.name) = { + subscription_id = data.azurerm_client_config.current.subscription_id + resource_group_name = azurerm_resource_group.example.name + } + } +} + +# Create a private endpoint for the CosmosDB MongoDB account in the pe_subnet subnet +module "private_endpoint" { + source = "./modules/private_endpoint" + name = local.private_endpoint_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + subnet_id = module.virtual_network.subnet_ids[var.pe_subnet_name] + tags = var.tags + private_connection_resource_id = module.container_registry.id + is_manual_connection = false + subresource_name = "registry" + private_dns_zone_group_name = "private-dns-zone-group" + private_dns_zone_group_ids = [module.private_dns_zone.id] +} + +# Create App Service Plan using module +module "app_service_plan" { + source = "./modules/app_service_plan" + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Create a user-assigned managed identity +module "managed_identity" { + source = "./modules/managed_identity" + name = local.managed_identity_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + acr_id = module.container_registry.id + tags = var.tags +} + +# Push container image to the registry +resource "null_resource" "push_image" { + count = (var.image_name != null && var.image_name != "" && var.image_tag != null && var.image_tag != "") ? 1 : 0 + + provisioner "local-exec" { + command = "${path.root}/push_image.sh" + environment = { + ACR_NAME = local.acr_name + ACR_LOGIN_SERVER = module.container_registry.login_server + IMAGE_NAME = var.image_name + IMAGE_TAG = var.image_tag + } + } + + depends_on = [module.container_registry] +} + +# Create Web App using module +module "web_app" { + source = "./modules/web_app" + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + managed_identity_id = module.managed_identity.id + service_plan_id = module.app_service_plan.id + https_only = var.https_only + virtual_network_subnet_id = module.virtual_network.subnet_ids[var.webapp_subnet_name] + vnet_route_all_enabled = true + public_network_access_enabled = var.public_network_access_enabled + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + image_name = var.image_name + image_tag = var.image_tag + docker_registry_url = module.container_registry.login_server_url + docker_registry_username = module.container_registry.admin_username + docker_registry_password = module.container_registry.admin_password + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + ENABLE_ORYX_BUILD = "true" + WEBSITES_PORT = var.websites_port + APP_NAME = "Custom Image" + IMAGE_NAME = "${module.container_registry.login_server}/${var.image_name}:${var.image_tag}" + } + + depends_on = [null_resource.push_image] +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/main.tf new file mode 100644 index 0000000..98a3e4d --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_service_plan" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_service_plan.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/outputs.tf new file mode 100644 index 0000000..f1455ea --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/outputs.tf @@ -0,0 +1,19 @@ +output "id" { + value = azurerm_service_plan.example.id + description = "Specifies the resource id of the App Service Plan" +} + +output "name" { + value = azurerm_service_plan.example.name + description = "Specifies the name of the App Service Plan" +} + +output "location" { + value = azurerm_service_plan.example.location + description = "Specifies the location of the App Service Plan" +} + +output "resource_group_name" { + value = azurerm_service_plan.example.resource_group_name + description = "Specifies the resource group name of the App Service Plan" +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/variables.tf new file mode 100644 index 0000000..e543066 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/app_service_plan/variables.tf @@ -0,0 +1,42 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the App Service Plan." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the App Service Plan." + type = string +} + +variable "sku_name" { + description = "(Required) Specifies the SKU name for the App Service Plan." + type = string +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/main.tf new file mode 100644 index 0000000..98b1e22 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/main.tf @@ -0,0 +1,65 @@ +resource "azurerm_container_registry" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + sku = var.sku + admin_enabled = var.admin_enabled + tags = var.tags + + identity { + type = "UserAssigned" + identity_ids = [ + azurerm_user_assigned_identity.identity.id + ] + } + + dynamic "georeplications" { + for_each = var.georeplication_locations + + content { + location = georeplications.value + tags = var.tags + # Required since azurerm 5.0; true matches Azure's default of serving replicas + # through the geo-replicated login server (regional endpoints stay opt-in). + global_endpoint_routing_enabled = true + } + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_user_assigned_identity" "identity" { + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + name = "${var.name}Identity" + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_container_registry.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "ContainerRegistryRepositoryEvents" + } + + enabled_log { + category = "ContainerRegistryLoginEvents" + } + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/output.tf b/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/output.tf new file mode 100644 index 0000000..5e6fcd1 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/output.tf @@ -0,0 +1,34 @@ +output "name" { + description = "Specifies the name of the container registry." + value = azurerm_container_registry.example.name +} + +output "id" { + description = "Specifies the resource id of the container registry." + value = azurerm_container_registry.example.id +} + +output "resource_group_name" { + description = "Specifies the name of the resource group." + value = var.resource_group_name +} + +output "login_server" { + description = "Specifies the login server of the container registry." + value = azurerm_container_registry.example.login_server +} + +output "login_server_url" { + description = "Specifies the login server url of the container registry." + value = "https://${azurerm_container_registry.example.login_server}" +} + +output "admin_username" { + description = "Specifies the admin username of the container registry." + value = azurerm_container_registry.example.admin_username +} + +output "admin_password" { + description = "Specifies the admin password of the container registry." + value = azurerm_container_registry.example.admin_password +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/variables.tf new file mode 100644 index 0000000..c3fc7cc --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/container_registry/variables.tf @@ -0,0 +1,60 @@ +variable "name" { + description = "(Required) Specifies the name of the Container Registry. Changing this forces a new resource to be created." + type = string +} + +variable "resource_group_name" { + description = "(Required) The name of the resource group in which to create the Container Registry. Changing this forces a new resource to be created." + type = string +} + +variable "location" { + description = "(Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created." + type = string +} + +variable "admin_enabled" { + description = "(Optional) Specifies whether the admin user is enabled. Defaults to false." + type = bool + default = false +} + +variable "sku" { + description = "(Optional) The SKU name of the container registry. Possible values are Basic, Standard and Premium. Defaults to Basic" + type = string + default = "Basic" + + validation { + condition = contains(["Basic", "Standard", "Premium"], var.sku) + error_message = "The container registry sku is invalid." + } +} + +variable "tags" { + description = "(Optional) A mapping of tags to assign to the resource." + type = map(any) + default = {} +} + +variable "georeplication_locations" { + description = "(Optional) A list of Azure locations where the container registry should be geo-replicated." + type = list(string) + default = [] +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} + +variable "image_name" { + description = "(Required) Specifies the name of the container image to deploy to the Web App." + type = string + default = "custom-image-webapp" +} + +variable "image_tag" { + description = "(Required) Specifies the tag of the container image to deploy to the Web App." + type = string + default = "v1" +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/main.tf new file mode 100644 index 0000000..fcd4398 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/main.tf @@ -0,0 +1,14 @@ +resource "azurerm_log_analytics_workspace" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku = var.sku + tags = var.tags + retention_in_days = var.retention_in_days != null ? var.retention_in_days : null + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/output.tf b/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/output.tf new file mode 100644 index 0000000..fe2c398 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/output.tf @@ -0,0 +1,30 @@ +output "id" { + value = azurerm_log_analytics_workspace.example.id + description = "Specifies the resource id of the log analytics workspace" +} + +output "location" { + value = azurerm_log_analytics_workspace.example.location + description = "Specifies the location of the log analytics workspace" +} + +output "name" { + value = azurerm_log_analytics_workspace.example.name + description = "Specifies the name of the log analytics workspace" +} + +output "resource_group_name" { + value = azurerm_log_analytics_workspace.example.resource_group_name + description = "Specifies the name of the resource group that contains the log analytics workspace" +} + +output "workspace_id" { + value = azurerm_log_analytics_workspace.example.workspace_id + description = "Specifies the workspace id of the log analytics workspace" +} + +output "primary_shared_key" { + value = azurerm_log_analytics_workspace.example.primary_shared_key + description = "Specifies the workspace key of the log analytics workspace" + sensitive = true +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/variables.tf new file mode 100644 index 0000000..2db6a01 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/log_analytics/variables.tf @@ -0,0 +1,37 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Log Analytics workspace" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure Log Analytics workspace" + type = string +} + +variable "sku" { + description = "(Optional) Specifies the sku of the Azure Log Analytics workspace" + type = string + default = "PerGB2018" + + validation { + condition = contains(["Free", "Standalone", "PerNode", "PerGB2018"], var.sku) + error_message = "The log analytics sku is incorrect." + } +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Log Analytics workspace." + type = map(any) + default = {} +} + +variable "retention_in_days" { + description = " (Optional) Specifies the workspace data retention in days. Possible values are either 7 (Free Tier only) or range between 30 and 730." + type = number + default = 30 +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/main.tf new file mode 100644 index 0000000..95f89a8 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/main.tf @@ -0,0 +1,20 @@ + +resource "azurerm_user_assigned_identity" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_role_assignment" "example" { + scope = var.acr_id + role_definition_name = "AcrPull" + principal_id = azurerm_user_assigned_identity.example.principal_id + skip_service_principal_aad_check = true +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/output.tf b/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/output.tf new file mode 100644 index 0000000..a22e571 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/output.tf @@ -0,0 +1,25 @@ + +output "id" { + value = azurerm_user_assigned_identity.example.id + description = "Specifies the resource id of the workload user-defined managed identity" +} + +output "location" { + value = azurerm_user_assigned_identity.example.location + description = "Specifies the location of the workload user-defined managed identity" +} + +output "name" { + value = azurerm_user_assigned_identity.example.name + description = "Specifies the name of the workload user-defined managed identity" +} + +output "client_id" { + value = azurerm_user_assigned_identity.example.client_id + description = "Specifies the client id of the workload user-defined managed identity" +} + +output "principal_id" { + value = azurerm_user_assigned_identity.example.principal_id + description = "Specifies the principal id of the workload user-defined managed identity" +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/variables.tf new file mode 100644 index 0000000..5da194a --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/managed_identity/variables.tf @@ -0,0 +1,26 @@ +variable "name" { + description = "(Required) Specifies the name of the log analytics workspace" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the resource group name" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the log analytics workspace" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the log analytics workspace" + type = map(any) + default = {} +} + +variable "acr_id" { + description = "(Required) Specifies resource id of the Azure Container Registry resource" + type = string +} + diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/main.tf new file mode 100644 index 0000000..0dea868 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/main.tf @@ -0,0 +1,42 @@ +resource "azurerm_public_ip_prefix" "example" { + name = var.public_ip_prefix_name + location = var.location + resource_group_name = var.resource_group_name + sku = var.sku_name + zones = var.zones + tags = var.tags + prefix_length = var.public_ip_prefix_length + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku_name = var.sku_name + idle_timeout_in_minutes = var.idle_timeout_in_minutes + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway_public_ip_prefix_association" "example" { + nat_gateway_id = azurerm_nat_gateway.example.id + public_ip_prefix_id = azurerm_public_ip_prefix.example.id +} + +resource "azurerm_subnet_nat_gateway_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + nat_gateway_id = azurerm_nat_gateway.example.id +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/output.tf b/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/output.tf new file mode 100644 index 0000000..3f5d284 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/output.tf @@ -0,0 +1,9 @@ +output "name" { + value = azurerm_nat_gateway.example.name + description = "Specifies the name of the Azure NAT Gateway" +} + +output "id" { + value = azurerm_nat_gateway.example.id + description = "Specifies the resource id of the Azure NAT Gateway" +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/variables.tf new file mode 100644 index 0000000..a6b8e69 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/nat_gateway/variables.tf @@ -0,0 +1,55 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure NAT Gateway" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure NAT Gateway" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure NAT Gateway" + type = map(any) + default = {} +} + +variable "sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the NAT Gateway" + type = map(string) +} + +variable "public_ip_prefix_name" { + description = "(Required) The name of the public IP prefix to create and associate with the NAT Gateway." + type = string + default = null +} + +variable "public_ip_prefix_length" { + description = "(Required) The length of the public IP prefix to create and associate with the NAT Gateway. Must be between 28 and 31." + type = number + default = 31 +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/main.tf new file mode 100644 index 0000000..c649652 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/main.tf @@ -0,0 +1,53 @@ +resource "azurerm_network_security_group" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + dynamic "security_rule" { + for_each = try(var.security_rules, []) + content { + name = try(security_rule.value.name, null) + priority = try(security_rule.value.priority, null) + direction = try(security_rule.value.direction, null) + access = try(security_rule.value.access, null) + protocol = try(security_rule.value.protocol, null) + source_port_range = try(security_rule.value.source_port_range, null) + source_port_ranges = try(security_rule.value.source_port_ranges, null) + destination_port_range = try(security_rule.value.destination_port_range, null) + destination_port_ranges = try(security_rule.value.destination_port_ranges, null) + source_address_prefix = try(security_rule.value.source_address_prefix, null) + source_address_prefixes = try(security_rule.value.source_address_prefixes, null) + destination_address_prefix = try(security_rule.value.destination_address_prefix, null) + destination_address_prefixes = try(security_rule.value.destination_address_prefixes, null) + source_application_security_group_ids = try(security_rule.value.source_application_security_group_ids, null) + destination_application_security_group_ids = try(security_rule.value.destination_application_security_group_ids, null) + } + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet_network_security_group_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + network_security_group_id = azurerm_network_security_group.example.id +} + +resource "azurerm_monitor_diagnostic_setting" "settings" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_network_security_group.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "NetworkSecurityGroupEvent" + } + + enabled_log { + category = "NetworkSecurityGroupRuleCounter" + } +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/outputs.tf new file mode 100644 index 0000000..b8ca8d5 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the network security group" + value = azurerm_network_security_group.example.name +} + +output "id" { + description = "Specifies the resource id of the network security group" + value = azurerm_network_security_group.example.id +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/variables.tf new file mode 100644 index 0000000..04eb07e --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/network_security_group/variables.tf @@ -0,0 +1,51 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Network Security Group" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Network Security Group" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Network Security Group" + type = string +} + +variable "security_rules" { + description = "(Optional) Specifies the security rules of the Azure Network Security Group" + type = list(object({ + name = string + priority = number + direction = string + access = string + protocol = string + source_port_range = string + source_port_ranges = list(string) + destination_port_range = string + destination_port_ranges = list(string) + source_address_prefix = string + source_address_prefixes = list(string) + destination_address_prefix = string + destination_address_prefixes = list(string) + source_application_security_group_ids = list(string) + destination_application_security_group_ids = list(string) + })) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the Azure Network Security Group" + type = map(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Network Security Group" + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace" + type = string +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/main.tf new file mode 100644 index 0000000..e61df00 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_private_dns_zone" "example" { + name = var.name + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "example" { + for_each = var.virtual_networks_to_link + + name = "link_to_${lower(basename(each.key))}" + private_dns_zone_id = azurerm_private_dns_zone.example.id + virtual_network_id = "/subscriptions/${each.value.subscription_id}/resourceGroups/${each.value.resource_group_name}/providers/Microsoft.Network/virtualNetworks/${each.key}" + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/outputs.tf new file mode 100644 index 0000000..ca141f3 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the private dns zone" + value = azurerm_private_dns_zone.example.name +} + +output "id" { + description = "Specifies the resource id of the private dns zone" + value = azurerm_private_dns_zone.example.id +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/variables.tf new file mode 100644 index 0000000..8d0c0cc --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/private_dns_zone/variables.tf @@ -0,0 +1,20 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private DNS Zone" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Private DNS Zone" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Private DNS Zone" + default = {} +} + +variable "virtual_networks_to_link" { + description = "(Optional) Specifies the subscription id, resource group name, and name of the virtual networks to which create a virtual network link" + type = map(any) + default = {} +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/main.tf new file mode 100644 index 0000000..b21566e --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/main.tf @@ -0,0 +1,26 @@ +resource "azurerm_private_endpoint" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + subnet_id = var.subnet_id + tags = var.tags + + private_service_connection { + name = "${var.name}Connection" + private_connection_resource_id = var.private_connection_resource_id + is_manual_connection = var.is_manual_connection + subresource_names = var.subresource_name != null ? [var.subresource_name] : null + request_message = try(var.request_message, null) + } + + private_dns_zone_group { + name = var.private_dns_zone_group_name + private_dns_zone_ids = var.private_dns_zone_group_ids + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/outputs.tf new file mode 100644 index 0000000..367ab51 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the private endpoint." + value = azurerm_private_endpoint.example.name +} + +output "id" { + description = "Specifies the resource id of the private endpoint." + value = azurerm_private_endpoint.example.id +} + +output "private_dns_zone_group" { + description = "Specifies the private dns zone group of the private endpoint." + value = azurerm_private_endpoint.example.private_dns_zone_group +} + +output "private_dns_zone_configs" { + description = "Specifies the private dns zone(s) configuration" + value = azurerm_private_endpoint.example.private_dns_zone_configs +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/variables.tf new file mode 100644 index 0000000..ca1cde1 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/private_endpoint/variables.tf @@ -0,0 +1,61 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private Endpoint. Changing this forces a new resource to be created." + type = string +} + +variable "resource_group_name" { + description = "(Required) The name of the resource group. Changing this forces a new resource to be created." + type = string +} + +variable "private_connection_resource_id" { + description = "(Required) Specifies the resource id of the private link service" + type = string +} + +variable "location" { + description = "(Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created." + type = string +} + +variable "subnet_id" { + description = "(Required) Specifies the resource id of the subnet" + type = string +} + +variable "is_manual_connection" { + description = "(Optional) Specifies whether the Azure Private Endpoint connection requires manual approval from the remote resource owner." + type = bool + default = false +} + +variable "subresource_name" { + description = "(Optional) Specifies a subresource name which the Azure Private Endpoint is able to connect to." + type = string + default = null +} + +variable "request_message" { + description = "(Optional) Specifies a message passed to the owner of the remote resource when the Azure Private Endpoint attempts to establish the connection to the remote resource." + type = string + default = null +} + +variable "private_dns_zone_group_name" { + description = "(Required) Specifies the Name of the Private DNS Zone Group. Changing this forces a new private_dns_zone_group resource to be created." + type = string +} + +variable "private_dns_zone_group_ids" { + description = "(Required) Specifies the list of Private DNS Zones to include within the private_dns_zone_group." + type = list(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Azure Private Endpoint." + default = {} +} + +variable "private_dns" { + default = {} +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/main.tf new file mode 100644 index 0000000..cec00f4 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/main.tf @@ -0,0 +1,55 @@ +resource "azurerm_virtual_network" "example" { + name = var.vnet_name + address_space = var.address_space + location = var.location + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet" "example" { + for_each = { for subnet in var.subnets : subnet.name => subnet if subnet != null } + + name = each.key + resource_group_name = var.resource_group_name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = each.value.address_prefixes + private_endpoint_network_policies = each.value.private_endpoint_network_policies + private_link_service_network_policies_enabled = each.value.private_link_service_network_policies_enabled + + dynamic "delegation" { + for_each = each.value.delegation != null ? [each.value.delegation] : [] + content { + name = "delegation" + + service_delegation { + name = delegation.value + } + } + } + + lifecycle { + ignore_changes = [ + delegation + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_virtual_network.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "VMProtectionAlerts" + } + + enabled_metric { + category = "AllMetrics" + } +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/outputs.tf new file mode 100644 index 0000000..b464308 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the virtual network" + value = azurerm_virtual_network.example.name +} + +output "vnet_id" { + description = "Specifies the resource id of the virtual network" + value = azurerm_virtual_network.example.id +} + +output "subnet_ids" { + description = "Contains a list of the the resource id of the subnets" + value = { for subnet in azurerm_subnet.example : subnet.name => subnet.id } +} + +output "subnet_ids_as_list" { + description = "Returns the list of the subnet ids as a list of strings." + value = [for subnet in azurerm_subnet.example : subnet.id] +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/variables.tf new file mode 100644 index 0000000..f8c0b0e --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/virtual_network/variables.tf @@ -0,0 +1,40 @@ +variable "resource_group_name" { + description = "Resource Group name" + type = string +} + +variable "location" { + description = "Location in which to deploy the network" + type = string +} + +variable "vnet_name" { + description = "VNET name" + type = string +} + +variable "address_space" { + description = "VNET address space" + type = list(string) +} + +variable "subnets" { + description = "Subnets configuration" + type = list(object({ + name = string + address_prefixes = list(string) + private_endpoint_network_policies = string + private_link_service_network_policies_enabled = bool + delegation = string + })) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Virtual Network resource." + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/web_app/main.tf b/samples/web-app-custom-image/dotnet/terraform/modules/web_app/main.tf new file mode 100644 index 0000000..e1f3d26 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/web_app/main.tf @@ -0,0 +1,78 @@ +resource "azurerm_linux_web_app" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + service_plan_id = var.service_plan_id + https_only = var.https_only + virtual_network_subnet_id = var.virtual_network_subnet_id + public_network_access_enabled = var.public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + dynamic "identity" { + for_each = var.managed_identity_id != null ? [1] : [] + content { + type = "UserAssigned" + identity_ids = [var.managed_identity_id] + } + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + vnet_route_all_enabled = var.vnet_route_all_enabled + application_stack { + docker_image_name = "${var.image_name}:${var.image_tag}" + docker_registry_url = var.docker_registry_url + docker_registry_username = var.docker_registry_username + docker_registry_password = var.docker_registry_password + } + } + + app_settings = var.app_settings + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_linux_web_app.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "AppServiceHTTPLogs" + } + + enabled_log { + category = "AppServiceConsoleLogs" + } + + enabled_log { + category = "AppServiceAppLogs" + } + + enabled_log { + category = "AppServiceAuditLogs" + } + + enabled_log { + category = "AppServiceIPSecAuditLogs" + } + + enabled_log { + category = "AppServicePlatformLogs" + } + + enabled_log { + category = "AppServiceAuthenticationLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/web_app/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/modules/web_app/outputs.tf new file mode 100644 index 0000000..d7b6981 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/web_app/outputs.tf @@ -0,0 +1,24 @@ +output "id" { + value = azurerm_linux_web_app.example.id + description = "Specifies the resource id of the Web App" +} + +output "name" { + value = azurerm_linux_web_app.example.name + description = "Specifies the name of the Web App" +} + +output "default_hostname" { + value = azurerm_linux_web_app.example.default_hostname + description = "Specifies the default hostname of the Web App" +} + +output "outbound_ip_addresses" { + value = azurerm_linux_web_app.example.outbound_ip_addresses + description = "Specifies the outbound IP addresses of the Web App" +} + +output "principal_id" { + value = azurerm_linux_web_app.example.identity[0].principal_id + description = "Specifies the Principal ID of the System Assigned Managed Identity" +} diff --git a/samples/web-app-custom-image/dotnet/terraform/modules/web_app/variables.tf b/samples/web-app-custom-image/dotnet/terraform/modules/web_app/variables.tf new file mode 100644 index 0000000..dad9182 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/modules/web_app/variables.tf @@ -0,0 +1,114 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the Web App." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Web App." + type = string +} + +variable "service_plan_id" { + description = "(Required) Specifies the ID of the App Service Plan within which to create this Web App." + type = string +} + +variable "https_only" { + description = "(Optional) Specifies whether the Web App requires HTTPS connections." + type = bool + default = false +} + +variable "virtual_network_subnet_id" { + description = "(Optional) The subnet id which will be used by this Web App for regional virtual network integration." + type = string + default = null +} + +variable "vnet_route_all_enabled" { + description = "(Optional) Specifies whether to route all traffic from the Web App into the virtual network. This is only applicable if virtual_network_subnet_id is specified. Defaults to false." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "always_on" { + description = "(Optional) Specifies whether the Web App is Always On enabled." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Web App." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests." + type = string + default = "1.2" +} + +variable "app_settings" { + description = "(Optional) A map of key-value pairs for App Settings." + type = map(string) + default = {} +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} + +variable "image_name" { + description = "(Required) Specifies the name of the container image to deploy to the Web App." + type = string + default = "custom-image-webapp" +} + +variable "image_tag" { + description = "(Required) Specifies the tag of the container image to deploy to the Web App." + type = string + default = "v1" +} + +variable "docker_registry_url" { + description = "(Optional) Specifies the URL of the Docker registry where the container image is stored. This is required if the container image is stored in a private registry." + type = string + default = null +} + +variable "managed_identity_id" { + description = "(Optional) Specifies the ID of the user-assigned managed identity to be assigned to the Web App." + type = string + default = null +} + +variable "docker_registry_username" { + description = "Specifies the username of the Docker registry. This is required if the container image is stored in a private registry." + type = string + default = null +} + +variable "docker_registry_password" { + description = "Specifies the password of the Docker registry. This is required if the container image is stored in a private registry." + type = string + default = null +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/outputs.tf b/samples/web-app-custom-image/dotnet/terraform/outputs.tf new file mode 100644 index 0000000..a4d9b25 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/outputs.tf @@ -0,0 +1,23 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "container_registry_name" { + value = module.container_registry.name +} + +output "container_registry_login_server" { + value = module.container_registry.login_server +} + +output "app_service_plan_name" { + value = module.app_service_plan.name +} + +output "web_app_name" { + value = module.web_app.name +} + +output "web_app_url" { + value = module.web_app.default_hostname +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/providers.tf b/samples/web-app-custom-image/dotnet/terraform/providers.tf new file mode 100644 index 0000000..1246b2e --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/providers.tf @@ -0,0 +1,28 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=5.1.0" + } + null = { + source = "hashicorp/null" + version = "~> 3.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/push_image.sh b/samples/web-app-custom-image/dotnet/terraform/push_image.sh new file mode 100755 index 0000000..a86add2 --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/push_image.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +LOCAL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" +FULL_IMAGE="${ACR_LOGIN_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}" + +echo "Logging into Azure Container Registry [$ACR_NAME]..." +az acr login --name "$ACR_NAME" --only-show-errors + +if [ $? -eq 0 ]; then + echo "Logged into Azure Container Registry [$ACR_NAME] successfully." +else + echo "Failed to log into Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +echo "Building custom Docker image [$LOCAL_IMAGE]..." +docker build -t "$LOCAL_IMAGE" ../src/ + +if [ $? -eq 0 ]; then + echo "Docker image [$LOCAL_IMAGE] built successfully." +else + echo "Failed to build Docker image [$LOCAL_IMAGE]." + exit 1 +fi + +echo "Tagging Docker image [$LOCAL_IMAGE] as [$FULL_IMAGE]..." +docker tag "$LOCAL_IMAGE" "$FULL_IMAGE" + +if [ $? -eq 0 ]; then + echo "Docker image [$LOCAL_IMAGE] tagged as [$FULL_IMAGE] successfully." +else + echo "Failed to tag Docker image [$LOCAL_IMAGE] as [$FULL_IMAGE]." + exit 1 +fi + +echo "Pushing image [$FULL_IMAGE] to ACR..." +docker push "$FULL_IMAGE" + +if [ $? -eq 0 ]; then + echo "Docker image [$FULL_IMAGE] pushed to ACR successfully." +else + echo "Failed to push Docker image [$FULL_IMAGE] to ACR." + exit 1 +fi \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/terraform.tfvars b/samples/web-app-custom-image/dotnet/terraform/terraform.tfvars new file mode 100644 index 0000000..919af4f --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/terraform.tfvars @@ -0,0 +1,3 @@ +prefix = "local" +suffix = "test" +location = "westeurope" \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/terraform/variables.tf b/samples/web-app-custom-image/dotnet/terraform/variables.tf new file mode 100644 index 0000000..cd110df --- /dev/null +++ b/samples/web-app-custom-image/dotnet/terraform/variables.tf @@ -0,0 +1,251 @@ +variable "prefix" { + description = "(Optional) Specifies the prefix for the name of the Azure resources." + type = string + default = "local" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "(Optional) Specifies the suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "(Required) Specifies the location for all resources." + type = string + default = "westeurope" +} + +variable "acr_sku" { + description = "Specifies the name of the container registry" + type = string + default = "Premium" + + validation { + condition = contains(["Basic", "Standard", "Premium"], var.acr_sku) + error_message = "The container registry sku is invalid." + } +} + +variable "acr_admin_enabled" { + description = "Specifies whether admin is enabled for the container registry" + type = bool + default = true +} + +variable "acr_georeplication_locations" { + description = "(Optional) A list of Azure locations where the container registry should be geo-replicated." + type = list(string) + default = [] +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan. Possible values include Windows, Linux, and WindowsContainer. Changing this forces a new resource to be created." + type = string + default = "Linux" + + validation { + condition = contains([ + "Windows", + "Linux", + "WindowsContainer" + ], var.os_type) + error_message = "The os_type must be either 'Windows', 'Linux', or 'WindowsContainer'." + } +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "sku_tier" { + description = "(Optional) Specifies the tier name for the hosting plan." + type = string + default = "Standard" + + validation { + condition = contains([ + "Basic", + "Standard", + "ElasticPremium", + "Premium", + "PremiumV2", + "Premium0V3", + "PremiumV3", + "PremiumMV3", + "Isolated", + "IsolatedV2", + "WorkflowStandard", + "FlexConsumption" + ], var.sku_tier) + error_message = "The sku_tier must be one of the allowed values." + } +} +variable "sku_name" { + description = "(Optional) Specifies the SKU name for the hosting plan." + type = string + default = "S1" + + validation { + condition = contains([ + "B1", "B2", "B3", + "S1", "S2", "S3", + "EP1", "EP2", "EP3", + "P1", "P2", "P3", + "P1V2", "P2V2", "P3V2", + "P0V3", "P1V3", "P2V3", "P3V3", + "P1MV3", "P2MV3", "P3MV3", "P4MV3", "P5MV3", + "I1", "I2", "I3", + "I1V2", "I2V2", "I3V2", "I4V2", "I5V2", "I6V2", + "WS1", "WS2", "WS3", + "FC1" + ], var.sku_name) + error_message = "The sku_name must be one of the allowed values." + } +} + + +variable "https_only" { + description = "(Optional) Specifies whether the Linux Web App require HTTPS connections. Defaults to false." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests. Possible values include: 1.0, 1.1, 1.2 and 1.3. Defaults to 1.2." + type = string + default = "1.2" + + validation { + condition = contains([ + "1.0", + "1.1", + "1.2", + "1.3" + ], var.minimum_tls_version) + error_message = "The minimum_tls_version must be one of the allowed values." + } +} + +variable "always_on" { + description = "(Optional) Specifies whether the Linux Web App is Always On enabled. Defaults to true." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Linux Web App." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "login_name" { + description = "(Required) Specifies the login name for the application." + type = string + default = "paolo" +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} + +variable "vnet_name" { + description = "Specifies the name of the virtual network." + default = "VNet" + type = string +} + +variable "vnet_address_space" { + description = "Specifies the address space of the virtual network." + default = ["10.0.0.0/8"] + type = list(string) +} + +variable "webapp_subnet_name" { + description = "Specifies the name of the web app subnet." + default = "app-subnet" + type = string +} + +variable "webapp_subnet_address_prefix" { + description = "Specifies the address prefix of the web app subnet." + default = ["10.0.0.0/24"] + type = list(string) +} + +variable "pe_subnet_name" { + description = "Specifies the name of the subnet that contains the private endpoints." + default = "pe-subnet" + type = string +} + +variable "pe_subnet_address_prefix" { + description = "Specifies the address prefix of the subnet that contains the private endpoints." + default = ["10.0.1.0/24"] + type = list(string) +} + +variable "nat_gateway_name" { + description = "(Required) Specifies the name of the NAT Gateway" + type = string + default = "NatGateway" +} + +variable "nat_gateway_sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "nat_gateway_idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "nat_gateway_zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = ["1"] +} + +variable "websites_port" { + description = "(Optional) Specifies the port on which the Web App will listen. Defaults to 8000." + type = number + default = 80 +} + +variable "image_name" { + description = "(Required) Specifies the name of the container image to deploy to the Web App." + type = string + default = "custom-image-webapp" +} + +variable "image_tag" { + description = "(Required) Specifies the tag of the container image to deploy to the Web App." + type = string + default = "v1" +} \ No newline at end of file diff --git a/samples/web-app-custom-image/dotnet/visio/web-app-custom-image.vsdx b/samples/web-app-custom-image/dotnet/visio/web-app-custom-image.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..bd6c655ca337c56a27d0a12b184aefebad4e23b9 GIT binary patch literal 259502 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�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 j0o3b}nt-M*4Z!%-N&d + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application to LocalStack for Azure using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All deployment methods have been fully tested with both user-assigned and system-assigned managed identities against Azure and the LocalStack for Azure local emulator. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process involves downloading and building Docker images. This is a one-time operation—subsequent deployments will be significantly faster. Depending on your internet connection and system resources, this initial setup may take several minutes. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the following user interface for adding and removing activities: + +![Architecture Diagram](./images/vacation-planner.png) + +You can use the `call-web-app.sh` Bash script below to call the web app. The script demonstrates three methods for calling web apps: + +1. **Through the LocalStack for Azure emulator**: Call the web app via the emulator using its default host name. The emulator acts as a proxy to the web app. +2. **Via localhost and host port mapped to the container's port**: Use `127.0.0.1` with the host port mapped to the container's port `80`. +3. **Via container IP address**: Use the app container's IP address on port `80`. This technique is only available when accessing the web app from the Docker host machine. +4. **Via the default hostname**: Call the web app via the default hostname `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## Storage Contents + +You can use [Azure Storage Explorer](https://learn.microsoft.com/en-us/azure/storage/storage-explorer/vs-azure-tools-storage-manage-with-storage-explorer) to confirm that your Azure Web App creates the blobs in the `activities` container in the emulated storage account. To do this: + +- Expand **Emulator & Attached**. +- Right-click **Storage Accounts**. +- Select **Connect to Azure Storage...**. +- In the dialog that appears, enter the name of the emulated storage account and specify the published ports, as shown in the following picture: + +![Azure Storage Explorer](./images/azure-storage-explorer.png) + +> **Note** +> When sending commands to an emulated storage account, make sure to use the primary key generated by the emulator itself. For convenience, if you're connecting to the storage account directly with Azure Storage Explorer, you can use the default Azurite password. For more details, see [Connect to Azurite with SDKs and tools](https://learn.microsoft.com/en-us/azure/storage/common/storage-connect-azurite). + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [What is Azure Blob storage?](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview) +- [What is managed identities for Azure resources?](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) +- [How managed identities for Azure resources work with Azure virtual machines](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-managed-identities-work-vm) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-managed-identity/dotnet/bicep/README.md b/samples/web-app-managed-identity/dotnet/bicep/README.md new file mode 100644 index 0000000..23f67a5 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/bicep/README.md @@ -0,0 +1,195 @@ +# Bicep Deployment + +This directory contains the Bicep template and a deployment script for provisioning Azure services in LocalStack for Azure. Refer to the [Azure Web App with Managed Identity](../README.md) guide for details about the sample application. + +## Prerequisites + +Before deploying this solution, ensure you have the following tools installed: + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/): Local Azure cloud emulator for development and testing +- [Visual Studio Code](https://code.visualstudio.com/): Code editor installed on one of the [supported platforms](https://code.visualstudio.com/docs/supporting/requirements#_platforms) +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep): VS Code extension for Bicep language support and IntelliSense +- [Docker](https://docs.docker.com/get-docker/): Container runtime required for LocalStack +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli): Azure command-line interface +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0): Required to build and run the ASP.NET Core web application locally +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +### Installing lstk CLI + +Deploying to LocalStack requires the `lstk` CLI, which routes Azure CLI commands to the emulator (run `lstk az start-interception` before deploying). Install it using Homebrew: + +```bash +brew install localstack/tap/lstk +``` + +or npm: + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). For more information, see the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +## Architecture Overview + +The [deploy.sh](deploy.sh) script creates the [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli) for all the Azure resources, while the [main.bicep](main.bicep) Bicep module creates the following Azure resources: + +1. [Azure Storage Account](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview): Provides blob storage for persisting vacation activity data. The web application stores each activity as a JSON blob file in the `activities` container. +2. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): Defines the compute resources (CPU, memory, and scaling options) that host the web application. +3. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Hosts the ASP.NET Core *Vacation Planner* application. The web app uses managed identity to securely access the Azure Storage Account without requiring explicit credentials. +4. [Managed Identity](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview): Provides secure, credential-free authentication between the web app and storage account. Supports both system-assigned and user-assigned identity types. +5. [Role Assignment](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments): Grants the web app's managed identity the *Storage Blob Data Contributor* role, enabling read/write access to blob containers. +6. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): (Optional) Enables continuous deployment from a Git repository for automated application updates. + +The web app allows users to plan and manage vacation activities, storing all activity data as blob files in the `activities` containers in the [Azure Storage Account](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview). For more information, see [Azure Web App with Managed Identity](../README.md). + +## Provisioning Scripts + +See [deploy.sh](deploy.sh) for the complete deployment script. The script performs the following operations: + +- Detects environment (LocalStack or Azure Cloud) and selects appropriate CLI +- Creates resource group if it doesn't exist +- Validates Bicep template syntax and parameters +- Optionally runs what-if deployment for preview +- Deploys Bicep template to create all Azure resources +- Extracts deployment outputs (resource names, URLs) using jq +- Packages web application code into zip file +- Deploys zip package to Azure Web App +- Cleans up temporary artifacts + +## Deployment + +You can set up the Azure emulator by utilizing LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `bicep` folder: + +```bash +cd samples/web-app-managed-identity/dotnet/bicep +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +STORAGE_ACCOUNT_NAME="${PREFIX}storage${SUFFIX}" +CONTAINER_NAME='activities' +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check user-assigned managed identity +echo -e "\n[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,ClientId:clientId,PrincipalId:principalId}' \ + --output table \ + --only-show-errors + +# Check storage account +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage account:\n" +az storage account show \ + --name "$STORAGE_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,Kind:kind,Sku:sku.name}' \ + --output table \ + --only-show-errors + +# List storage containers +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage containers:\n" +az storage container list \ + --account-name "$STORAGE_ACCOUNT_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure Bicep Documentation](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/) +- [Bicep Language Reference](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-functions) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-managed-identity/dotnet/bicep/deploy.sh b/samples/web-app-managed-identity/dotnet/bicep/deploy.sh new file mode 100755 index 0000000..6ce9027 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/bicep/deploy.sh @@ -0,0 +1,153 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +TEMPLATE="main.bicep" +PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="$PREFIX-rg" +LOCATION="westeurope" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="webapp_app.zip" +MANAGED_IDENTITY_TYPE="UserAssigned" # SystemAssigned or UserAssigned + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + managedIdentityType=$MANAGED_IDENTITY_TYPE \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + managedIdentityType=$MANAGED_IDENTITY_TYPE \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + managedIdentityType=$MANAGED_IDENTITY_TYPE \ + --query 'properties.outputs' -o json); then + echo "Bicep template [$TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_OUTPUTS" | jq . + APP_SERVICE_PLAN_NAME=$(echo "$DEPLOYMENT_OUTPUTS" | jq -r '.appServicePlanName.value') + WEB_APP_NAME=$(echo "$DEPLOYMENT_OUTPUTS" | jq -r '.webAppName.value') + WEB_APP_URL=$(echo "$DEPLOYMENT_OUTPUTS" | jq -r '.webAppUrl.value') + STORAGE_ACCOUNT_NAME=$(echo "$DEPLOYMENT_OUTPUTS" | jq -r '.storageAccountName.value') + echo "Deployment details:" + echo "- appServicePlanName: $APP_SERVICE_PLAN_NAME" + echo "- webAppName: $WEB_APP_NAME" + echo "- webAppUrl: $WEB_APP_URL" + echo "- storageAccountName: $STORAGE_ACCOUNT_NAME" +else + echo "Failed to deploy Bicep template [$TEMPLATE]" + exit 1 +fi + +# Validation before deploying the web app +if [[ -z "$WEB_APP_NAME" ]]; then + echo "Web App Name is empty. Exiting." + exit 1 +fi + +# CD into the web app directory +cd ../src || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-managed-identity/dotnet/bicep/main.bicep b/samples/web-app-managed-identity/dotnet/bicep/main.bicep new file mode 100644 index 0000000..74d8580 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/bicep/main.bicep @@ -0,0 +1,275 @@ +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param appServicePlanZoneRedundant bool = false + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'dotnetcore' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.0' + '1.1' + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = '' + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +@description('Specifies the sku of the Azure Storage account.') +param storageAccountSku string = 'Standard_LRS' + +@description('Specifies the name of the blob container.') +param containerName string = 'activities' + +@description('Specifies the type of managed identity.') +@allowed([ + 'SystemAssigned' + 'UserAssigned' +]) +param managedIdentityType string = 'SystemAssigned' + +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var storageAccountName = '${prefix}storage${suffix}' +var managedIdentityName = '${prefix}-identity-${suffix}' + +resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = if (managedIdentityType == 'UserAssigned') { + name: managedIdentityName + location: location + tags: tags +} + +resource storageBlobDataContributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = { + name: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' + scope: subscription() +} + +resource storageBlobDataOwnerRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(storageAccount.id, webApp.id, storageBlobDataContributorRoleDefinition.id) + scope: storageAccount + properties: { + roleDefinitionId: storageBlobDataContributorRoleDefinition.id + principalId: managedIdentityType == 'SystemAssigned' ? webApp.identity.principalId : managedIdentity.properties.principalId + principalType: 'ServicePrincipal' + } +} + +resource storageAccount 'Microsoft.Storage/storageAccounts@2025-01-01' = { + name: storageAccountName + location: location + tags: tags + sku: { + name: storageAccountSku + } + kind: 'StorageV2' + properties: { + accessTier: 'Hot' + } +} + +resource blobServices 'Microsoft.Storage/storageAccounts/blobServices@2025-01-01' = { + parent: storageAccount + name: 'default' +} + +resource container 'Microsoft.Storage/storageAccounts/blobServices/containers@2025-01-01' = { + parent: blobServices + name: containerName +} + +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: appServicePlanName + location: location + tags: tags + kind: appServicePlanKind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: appServicePlanZoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource webApp 'Microsoft.Web/sites@2024-11-01' = { + name: webAppName + location: location + tags: tags + kind: webAppKind + properties: { + httpsOnly: httpsOnly + serverFarmId: appServicePlan.id + siteConfig: { + linuxFxVersion: toUpper('${runtimeName}|${runtimeVersion}') + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: managedIdentityType + userAssignedIdentities : managedIdentityType == 'SystemAssigned' ? null : { + '${managedIdentity.id}': {} + } + } +} + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + CONTAINER_NAME: container.name + AZURE_STORAGE_ACCOUNT_URL: storageAccount.properties.primaryEndpoints.blob + AZURE_CLIENT_ID: managedIdentityType == 'SystemAssigned' ? '' : managedIdentity.properties.clientId + } + dependsOn: [ + storageBlobDataOwnerRoleAssignment + ] +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +output appServicePlanName string = appServicePlan.name +output webAppName string = webApp.name +output webAppUrl string = webApp.properties.defaultHostName +output storageAccountName string = storageAccountName diff --git a/samples/web-app-managed-identity/dotnet/bicep/main.bicepparam b/samples/web-app-managed-identity/dotnet/bicep/main.bicepparam new file mode 100644 index 0000000..d86b021 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/bicep/main.bicepparam @@ -0,0 +1,6 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' diff --git a/samples/web-app-managed-identity/dotnet/images/architecture.png b/samples/web-app-managed-identity/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..a9bb4f24245cdf233a3a1b32add8920d8f7f62e6 GIT binary patch literal 54097 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 @bEVd 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諚jcXdYoZN%Lj`vdqq!)VfP=R%)34zGH71>j@AG$Ke)eTPX z4=4-(Jw}p!7r;ux=t=Wr&Wu@79z?57ZpV*=^qZ8pnZL)s*mwC72CWU2xshy4(qr>@ zi@DRkab|*Pp&lkmrd%WO280d%7rNxBQBvo?vNqVfct?m;_D0L!w4iJ4alkv_)sya~ z)7~C!&CG*s;3JQkXR_?Josz1_cmcbt{f@$v56ACsJxFJ#Ty7c^iV$Gs?>*VA`zKk@ zop={!J^)%9gpX6Vm-XzsCRNZepVyWr@7BASU$8yYPo>mu>*+iot#_V(7r1{0Y;ySl zTd;GK?se)K%tJv5#~Wb~qw`C1A&RB3(li)Z6w&**Sqy7djF z6K37SGEtt_2}6FI-HxvTiwE}e1=aSmky@;t=6M~EBHmT$TIl53&2-I*4v43>KZ4L zHLj_65w2lavPIKdo+616D9mYX_=H>#RkE2iCOa2IMwW_BG*_i$=K}5^!=3e;ynL3% z_fMvoDLt#Me*kB85uL@8lQ`wzp~OYA7GJ0;ok;(5(TQrsJqVRoYWU>OxnpE`MZ^{p z8u^AjOw*9B_}VXlo8>CjHlyA9NuxH_mdV6+8nA63;TI|M(ZlSDa>wqzqL-w7rNU^1 zaa)D8bB5z(Z5LdU$aiazoN<(phgdhd#4n7v*x9dEIj_EukG%q4ch`fbl~@JIH@9}* zvxW;ROBkhRo}hM>rgHp43Kh~1is{Ea^{UbWPsq3#bda`SEe+4l zXpBrd{#-1uB>{W?Ee-S-Zr>nF zH+I2EjL>>g0;2hA@q%9>ck85uuSoc?`M9v4v*55{$7K5qmloK(vb?ilcObGUcbU8< zEhS0CpN*qX(rB_Goirf6%2sg>33RD9BW>K>E}SrpD&d>^HX2XnHhnSPaS}*25dst1 zs_yI?eMyd5r04y7PVn^@TTtobFjd~=FQei(C{OT+k(26uZ;Xg!Mc^})I$|g|kONTs zMtFXp8O^b;Fyj?#%_v+sTYcyWD>kxX;Cv%h-aB9;U^{WsTaiK4PCczl>xn}YEK4&> zhcxn=N)`#sQxep*-+Mmgro=)lI9Bccty(UeNpDV%2ur`PpKqQn9QUJ`{eL_p)uz@-&NRK4m&)q z!!HzB$G?e`jZ1duE`UQ3DBiT@0civ@%5GA2yyO$ZK@IY?@nneU3&-w#=A)uqg7ov& z%!wd=7QWV0C}{>qR?uMYrN?0h8^lQ>{SEk~78~-DOo{519vPIKkreXU1-~foZK`RZ zaY|$=OFEJcOfwSGM$~xq*7Spv-cU|Q+~R|a)X?UaDueO|sOr5u>A*3@h-0pFBai>p z-giee)pdPZ9z{h#ML|G{(!2B;5D}0ry#$ETJ5nPZML`9m_a?m)dT)ZX&|4^>L+A-T zp))r=?>pZ--+J4cHEYe9wdOy#$-U>Cd(LjZ{o6ZD)i^XX|7=69wntc@ZCMylm ztC{wo4)!(9iK2X^!|CumTJ(-%@VBCMk>dFsCKip2sx^__h88{yI&XBYBCp@xN>s@V zE@Pz!c2p~U+v+a8$X1}~dRZX6u_9;k!SwFIxa$vNd2m3e+U-gLpEx z2!jIDnMLM1k7!BxBIo$89-7WhgY-o=P;}`$QEX?D$E*+>o7hl->8`x)wG0(KDtJm_ zXsV!$9XoH`&w+)$QdNAj^uVKVE|(o&4w zv^;kx=H5ylmQ;RkH6&27-p=wo@X^uB^%)}`x7?JL6LnLGw5f^uZAO?O2U71$=7Qr< z@=b5)COUeBEJ0Q?$+aiuXSD4-74{f!_v8#&J*rsm)yqy^1kA|K2Oft7TauT3=PbXr zE$qTFZ|h+<4j7Lad4)!ULAm<{P#?~6;VD{f4W4L>+_7p?HpC?h;xnu+%}@~jYvR}9 zPr+3(=b41NXYI|wEGE})@@3MK=>+XZ-I3cr)XprFoH?>G9H%&b<=FLXxQguTg;{jI zY7E7Q;9C*XjU9xXVTZyfd&n?^IYIHo*P#!2&LLzhU5m~nq6w8)86ODz%eNkrNqG^! z@@GqEtKcoY-MtS*Lkzv=8289^ZdYfO;+qY!<5SBbZ#Q4H4Yn#i(uA^wX>Y|2RAeoN zmF|3wq`x2KM4P+2nD>%{DcFd3Gc78#U%Eau*#4vPFOlw`6*@4BQtB#hxp%P?>wf;s ztge=>I8gNE#Bk}UH%lCAcdCS}!CN8;+*_-pa)tosp3z69{rU$7o&qm<_7}$2$ogM+ zr=0t(?9%{Ij{@?b_4Z8Xs|jL_Z=E#hrQB!xKh}v#eXcR~yk3Jucf4i|GZ0`-8Hogs zzT{U{ix5({II!i!NJ+Q)_u9#H5sjFM+zVFF&wnB9NU@(Jn%0iWL`DT2aiZQpXI|UL z&BxKm$*z&y8~uXoXuEySE=#!D4H3 zYviupNTBr?rra8a8MtxjE<2Ec?YRan8G`0^(#?<3kAWT`ajzQO7u*%^fZd%L-9EG4 zh%z*H;$N3HV7xW35_Tc(zF?-QU0LN{uSX^Ex;)PZB_P#em!w{|G#j@$DLN(8zI=7p z@NhEP+ojHFGppqq>6*Ex@rRb+y^qZy9vYc2dFaL;0rZ*pZdKVfq7J%tt#<(+}#1D2fnWx?y3s zhvb{S&Z?N;jD4E){Y$STNIW5q^qmHI3`uUAHUS@#0t0JgSV7JTU-%>(;$oo&2Ev2W z5o1JT3=&w3DuyA&=e6NI(f+n+5@I(0SI3tuUaO!(UOp;rk><6;J`F?eOA5vT6e^%rm5IHh=4Mhm*wFy@9K z!;a8hve4O3?QlV|+Jw0C=GL=U5S7)su_I>@_5k{>(Fd<1yAm%&k``MN~yZD@e3L>BtSEOs)B_}A9#CuHIii30B zlP1$+(A=`p5t;L`fMT*@*o=;f*%s~IQkTkZEh~dxdJRZ$$W{P`9vS zEYz9FD?1^DJ-I%|yv^avRbP8b(Mq`F!LmYzhLRlB4q+z+#rsopVzt+@B8|wp*;j2_ z4f~!t{Uk*a>e%m@^sl)OF&;;IeWc9N9kB}!YpkFrtmPwqYVR!&PWd_9*vzJcAq;s- zxEUc&aCHDm{VEO{XwK~6qy@zWambZ$>$!7>@ACSsjO0Aq;^8XVc^JaBobj_9ojkl2 zn4cl2S4v~YH|BJ#{B3$_s%957OYcL#rAsw6ey~14#^o|@pz^SS>`*U_Uu>yEo;|nt`qk zy>0pTxDXG)_iF8h%(~RvZTu>FijCWhRUCBJVzn`$(PwmN#D4KpnDkZ2X6+6jkX}-E zCeT;Qs68dyOGAf?oc}se&kSH5iDIkCKj;`+TjUglzy&5r9ouP&5MDJAcbY_}=>O>`991H*5ehc%=OsC;p-4)@tqM zKlS^c$XouunHB$4eDlxPTK}i7M@rN)o`{Z?g>Ms$+~+1~C5`P37mv>VpJ@p`@b6U) zDE3saH;q*UB^u#=>1SK{I`F61j<t4b3n@Gl##Aj_V>-@VjM)L|yd3?R}R zVbe3}^#@@~R)3}%fQ-bkn0G%-0!W8DHqCj_2VLa!gstyO@+u$i_Rnv23Fd|SM{L$X z_saAer>@&6i3qc!=F?tqe@#V*dYA^gtpIH)_6Kxay?F-TjL~6t2A?N&p6t*+-@w9# zhWGYdI%H!5_lgKKU3u{gk>@o)yPqy@7!1*fwc>P2($ZU~&`Qt_Tau?c%q#SX|Ka!{I$PxZqCX};GZipobg|AlLx7oVKbsMB>T#J|rcQ&NYsb!3#M zyNuLlJ?3J0-%5xm*?gT99{-dT9-5l<@aR=TD)&}n&u!kT%shSx472@<>K+I~4|K&? zkV+GxpdtJD)*!H@zGeC~Hb0uH#-7jGt5D`gEsoE=i0Ryc8tsDGVt$`f3T=OF+$NgF zyvk;CFT3Jb{@Vm&x^`=)63j&4%#67E^Xv_{>vEGIO2dgca)f25++k%AyDU;(@3pcr z*{)4!I6GElO{X5AHOBM@N0SLeXZ@G}f#>*5QR(w^SQ_rJ%6UtvsXrwQ)G9b9t);is zfA_^_m;R*T+Ig?HTc+W2#2KQczU}9et#eogdt#EKvjSC@_}A~uQ;+U$r`3m%)M$f| z6cyH^sh=9F){ruyQ!Y}9crhi zMP(KMo#Bb`-+u!tQ+S`{g8`{*)3?*jx)7OKa>+{FIX^uDies`Vv`}cm6 zCO!ehg1~!x_FDzq^)Ksp>+S3rJ;9gS(FR@e;W8(J{tS6gPJ|uyz|*E^eWljS6Ky`2 z;*ZkZ>%U14Ex#rG`J;b6#{BMfeA4**WtynBT?|eWHAmAM9{HvQ=F802+z1nn$H|)p z_4!TH%t3YcyG!_6v_wvHo&nFl(RWQk?G0BtCSfcnHJm~!C51d%WC9FFI?Q&jIHl3^ ze?2!nZQr}8nyySC8%G@KXTyQhF@-sH))Nq)z1gpA8?kRf=o#n3Ksy4P8xumea?U+bymOpC)# z88)uo7H9TYnA_&HxhW7e(prX0J;pEo$9i5hKa7QPEO^+_Jj^MZ=nsO5a*m0(M-mDN zu2Fp^V)fPU;@!G_e&QM}^(E~kg`I0mh*aCUq!{+Eg7kqk4ya%IG?wHydRmj+i~7V| zM+K+wC18>{nTYNY=({n@s9vT*BT8MyVgggGv`7CezQIs-eC{>t?|Tks9naR&SHyTy z;`@j;PiJ3gvBqi2pYyqbR&`bG{9r{j=BJu#L&^w$tc0&rCi732B|WbiCmXTYK&C^^ zICNu1(wFX@`b|x7U87Er-KxuqBYQaV_`q&6Peni;e|xPyl_AvIsw-yVYnh;Bz6Nn07-^b| zwz}-}Ir6||ax${=CQZ4hp$D}VJhA$iw`G0AW(46OQ(yBl>FXZ2!on?o57?VI&gJ#& zJBKu2Jqh<0{C@RuybRqL?Dt=jmT}r`m5r-qq8!s}-_tI3enr^YtQgh7YC}iMKlf{7 z_K6sm)^~f1hFydyh{yfdJV#nB5_(sSk^^&_GPu2gC?q5%=ECie$JG@2eFd80UaGDD zj`Nk%2DsN@r7iN%O$WI4A4myd@}4{MS( ziQC8E<>sBW<2%#eyrF+DI)4$*zsg%*fc9d0amQ8mW3&^r-|)ej1b0_2t^NLH8DsaG zffEW~ChuZ$FyCbKh$fPb-Tf%nT_r#8@vx|e-%^6^@+|#$OtH6p0wxgPnI7B&w8WgU z(F8ENOP}VCxAhjRKAflrSZ&<0lC`M&MoPJlT(JZ1ZNCrkK52|yM~-Ke)=V{CW3hKA z?)Vnvs1y=w32G%x6a~@MTdLRaAL&y^G!A*Z0j4nL&Z#S~jV`qdj$xtnmU7KjsHaSRBJa^>M%<=IwCUArYI!q$K%&$4o9gt^N9nXmYeV~26W{Bc z`l1m)-i5Nf2o#iVMieK0@?%USI)=(K?O&Z3}H+RCUv7an9 zEUbwFQ|9V~S;RBa=~2JFhp<;xW2*)jj#Ax2@H{hCUj;Kmdk!Yo6kBDE&`Ac*qh zkMC|beV{Qb+m z3(OUvNbmM8Qk~yb+W*2n{Z#-siD6{e_67=GvjVKSa_!7mc7A?WL(p%W+q-skNO)!%b(jwB7!hF^C^ZH!y40yZ_qcA`z7Dm3~vq9(exek=5H-si>gZLmG#`V`|SF|GX{c4 zXYDnw2(p>^ev8KK(j|;gG~V@i{^%k1-a4)A(JIM@!6ukq<|#$2_Pz&+AJ=AZLfol> zizQ-wT2d;KC2dNHcg54Yi*}1RDDgtg{9vPRN>+q0RzkLFRRWjATlMD4?XQa}mbTbjW-VPag;ElC||Z zzG_W4Sy{_n-d7ss2wTF+E-NPQS~ecs)$E(8&V{$>aVj~yk?e^t+ifBg^Qh-$=mDea z&2_LC5bhyW4x$8|;92BjI%Vw?d8eXPYUcJHXYPt#K!x#W7>jG<8FthJ&AJ4i{${35 zbz-A!hc>V7WdK|2`FHO&BJ0UA`R!)sWy>+2N91O_PrI~2%=9UpN;xH}~vK0^$^bi7uri0W0U8M+f~u{A8%` z3r-LI<E@!l2sCUZ0oFO?<5KrYJZ4HIK|xFW zCPGzBK>o2+0I}cMHYr*S)~&BIqC9Ar&|P)*X1r2=lhhO(_;g`xWyJ{Q% zs+_8-!)+be(ofwisjXNVN>uaE#Zw&-b&VUBo_`KcPv`AYCn|!P^;!?Su~o}PtE<4o z9c02c&F=K4TpYnCpzRqJFwEY5e^?~Ev0;;mOcNm|+10x@qY$pKpqmle^w}=Kb#>)( zNK(^~*OG}7l|rfrx0cajWswK=Q8vPJH5buHV=z#w@f2p^B0id56vOiDrD%p7)!H{V z`-)=i^3?atPwQJ(?Zu-$PU=_h4-A@e8?$Raa5miVwC^An1(R_a+VBhYO%YhDCv}fF z^$)M%Ts<-iBCNEz^mo4{PfR$b&5e-gy)6-snFMz;jCrvh&fAiCM}Oqt-x#w$-6?et z{noF9@H*Wg>?#v?pAzHcfY?+_Jv27f(vcC;c1uTXP-OHbRC?vLS{>{<4Py}@v6(&k zdLr1~RJLiR@!JZneJT=}{S+rr*t}2uin;bsOPY{{R_wm#uxv66raLm12In z0VLtxd}>luuA*iwHhO%o2G!xpSz2zx!VbIcLL=;Un1dMku!u1gTgSD|TBvB%#@E|I zy0b;{_ey;*lb#9vE_o-1ivikR8A%N}xuuq4l}C~rC9d`B$ESzA-Y%X+-cGA&wX~&f z`M#Uzx&kj{?SLA6FU|?6d%R>~vjaTgl`jlEeHNSq8)tmv;=W8bpjVYBEN8MeMx_FW zy@MX#wSmmA(n3F@hhd%#G)l92CH>!OE$tg#OkUI+7$gvN(&>)0PASPTO_tx`Y?YI5 zNDNh*)d!ni1kz5HHD9`<`C7WC{`@csm7r9I^xGT(j!p>6GG*nlGWC1$c1&paMK`N# zbjNZ%Rha_owr6RtahB1EAGNp;t63XpH+n1-$H+RY>dFDWg=U$R^m)LWRe5GB!tlDO zAjTSgkLwxjstkF@LRd#|zHz%D4>OLq0VE9;y~n%QvczKC&S=@-SRI&C-WVJ!!fa>O z^9XguYL#abk9=%>@tt{=RzGO=2(){lR?E~xC_q(NH`ohj%jiCeLr%&xYzi4kpN-f#uHVOb_N`VKxsqqx zw|8bEN$9r<0pGSSnL$*beR=F$>DDIfc9)QG4~xL3j^7$;LdF}ZIC@$&{hNSdyc;c{ zv9aUXDk+XMDPeI)k#Uu+{Lpg1^{$5uLhb^#{>Ld%X3EWN94l@fTxpa0M>ift@h$yb zxA*)})Pm*JqPx2bCr{jQcq9HWFb+>|`)~d;S%DiU(pzRLANc5b)SS(Gmt{Ev;O}PJ zw|{z@|H8wyV~mj7`dyo7+VZ>H;O{=kpV8`Hy@7ube#URdR|yF8BIT&Tm z8!$)5J8ptDuFGAwN6CDg@6k6=2>QFEoOro30KX6cEYne-zSf-UTQU>V*kR|32(2N! zbJgnb=>_nB>cq17isQI_kQZHHmnLes_=wEG!wIF2EbEVF_mfoPEpj%;SOR`!q52!+pXDPr6Me=BOnJ8sCste`T^8@8EO`ZZd|X9^Ybu+d_TDn0 zdtVs^!U?0Id9&@4-+_$nKF}*|6H|KIS*~x~v3oTU;NnFFtoJozpT9QD-!{XkN) zHzRj)HJlwr*Dp_{u#Sk^cgn^E2qvXA>{|?RcMphn`fL}^NPYlchkr$+dMj_r%3qJl zh;LnBISzVS1st4@m%bUP=H6T*(`##(nUnbdgCwMXO>oTX z%9OwuI=-IX8Z8cndVX}#&6|92b2L)1-qLKRu5oFY!IU#Lw0ffQT3p96NRMEbw4?9j z1VTsHKq&y(_q2(x98=R-|HW#JZ)fyr?xXpYa`{e)3L&9iyAPY_K@Y3;b%lN8)v9*v zfB8FG*DHooe_b7w3I5*nnNyCE?D0a1m|P*n;akKp5wMX`>zL1L;#R39$pvSwd0RPm z_#=r3ihA7ZikmBmgRc%T@x>*tnH}bKMW%ya&_@6?1j+H?%a<#b8W1l|zMp(LM~8dP zRCl7r0yfU@!t>+yZR@e3;4fd^y$yu3n~i@|tZE11FpG`XZ1Ii~(I=dBnfS`w>J54( zrn+;>f_1?Yy3tDTX(oZcg@=9>K{P2tWSa=G1*&<;v!N9zp*jP4Uj{eXsK7 zwr>c$cqzPQbLtdx&@ftB#OoCKvHr7?*JjYHMNvG@U|F(3SKm*)V2ZbFNnY%afZ_gF z`AEZ39HWZswQhec7o6JPe_J7GlLLjW-a_pOtA@uLUGR7>9(~GDWeQI3A?TE>jP@uf z)fP6H@eA;N<_@Na*l6;6JMI(gNJjwS=QA9d<}3d`LxDrR=c^BOtr}LX`96tSLuM@=Ndg(qj(|Y+b(H2* z{8(i0M*E$08;C1r4rl0|dN;i93qpa3#5WnM1f*zHXH@EDio%A%96>9gw~ zLtyv;)oY)$_gF_kwwz2aC(xbBLCL3czbqt>;S=rTZztt_H-|gEci7yTu#QB7J)W^I zsOOsXYquc0(m1?(kvozy{0*{rGIwpB@AjluRJcU20kJzG;%ZKuV?Sb`EFZ>z>}yL_ zNJhFxqeVX0m2l+@BC2GYj=`mzaw2#rRqd^bwQW#@T&7)c>= zTpax4B#%&634Exixn97_$X2Ju=-!z4zG-UeO<}ZkCYuC2b)FbSB-=rC*CYT+>9H%imPA@1$ehV-63Avc5d2!V` zP8qqOvs|e=9uRoSv@%D1Do$EhrwAB@mYyl*&I5D9S3k1G=bf5Vyc#~#H{_mRMvus8 z@)QgLdeEgnd)-bJUcTjdoQkOcPh4aLL5by28H}-KT|jh&ChT+8LSdb`@|OPD-f7UJ zyx1Me6lW3dW=xEijD(2jUWPt|<+fMh&f1~3Rc|jzk$DeCXohg%IUg5gDBCJ%4wwV8 zL`;CTDfNi?zPGLDc0oeM(nzEAf)qVNkSpbdj7>vB4NMlS?8A6AwRSeIWNyI)ig)he zDJR~g5i5Yco{RqAnC42|-%zalB<@#4FD$jt=jmA~vpWK@~-7H2RX@wrZwA^h}O5C}plFIji!G1>a3+ zP{QHXT3w4BUV`!j$Y5^0AdhEFx^yn>&d?!7E`^<}ij?VeyG`X-O|GKA3jNx7vMHD0 z9wU`8wX9bWJYJYbOO^nL)?-R;!+bLi_Ck+IJ)PgVkQ?we zUKoEso60uTgHU=w%E2<9qReW0KPucGLEF()SG3Iv?O*SAvI=Kl3}Z3Fg*!Y4rplX* zr>pka$KNMkr`Kv7pKAB0F0s{}&56Vb2M)#w-I7Fbmr7 z$AvfgjsuF4_F3y>g*DyNr~4S0xY#Ysq+W|29>twH2#<*PE0CpskyG%k)enD!@`U~$ zF<#8*_*LEh%1+N})c8NKU2b%yX)AlYt!hjj3T~npk0Vdz$PC88rl8sP;!glV;Ue?i zWyjD$6g4Ho=-1lQ*2hk9o}0-6QX9;awpEo9k!8bRk;A;yop20eCO*ZZ8QE?A_teO& z$MYoiLSd`-ky_Z75z#(EBPwwuV@`fv^u1sqPH(LO$IiZAhd=GRcC-=y-g-HTjXGL| zZAKov)l2N{7NO;@IK^&~C{1PoZ1k-i0D<=XuHR_$9QcI%Jgl<$(UCZ6PzhM02{FN@z3qStH}4QBWxV%DpJbT$ZhMee~>^f&qP~*YWsH8#<7B z&PrDy)M4qRwNF5e4pOxI0cg1ZJM`UaedbJz39!gNSR?%M-}c7yhlPcq?4IK7&a=H# zU|#=~#(1x$cK@&0z<=(ZiYgDFgU-z5w z0&clvr$kirXRh&Iyd~nv{Bv23U z;ujKnztkC)srgDlA!6gDtn7wYCh+0io)yOdNsQ~`d$Hv%#^Z}v(+1R4)UmXS)@csEk<;PJ1Zw=I z2=?{WYncIxrmHh_#6t9RYG`DPa_V&;mrU-@kz!ot=>&QtoYE~klBAAHqP9{`IA@kb zg6XJ!%yuNbOeH0Vov+56OK*D(q}FkzfeUzFo01!|w-n?) zGuGrZLziwq!U1^Q_ndWW_<8{Z<)L^i&+$yJX=kgdzag#v9K7m8a-Tpq1}};~cyh{l zVRa;CE(u9{A+KC8!@HvwQMXa~7t`uq9SjfAL!Na7;6+mb*i{L3oZCj5*F1w<#cZGQ zom+&rzQ7*-jwpWb$|`KgU;Bdg;%BQn!8JSb@lN`Hk)HH8UCM%;a{pPscB^o=JNa3t z&}oEbA-n)xj1)_OdItEuH>G=Lia5Tmr*ZIg(uG^T3od@9MbU-F|7(Xq_3$VB^X10( zfd<7wv>vMcjOQN5MV%=eG5bkLmZC`aMFACO!f47$6QU;-NKpk*3RiDV7mIA14j{N1 zE9r z{aBpjE-dnN#6&*cO;}R;h{IXFsaW=k%*c>36iAe0IKcrA&euez%uLC|#H1z!Qeq_i z?%lSMcQ!2t2L}k01R2NcsEF|J@WdoH^l1JV7L7#t%i|9)-PquXJg}^Hg6{gffef7y%EqjJ$J}tWc#~A?4!a*w#uM>u3 z{zvlf_a@z~jluh{xQb22^w$s8N3@aIyoK9om} zN{B=vJsXN{e>@%%qmX4pcy2DHC(xzDB^&FH*2SH*_`$mu%ary~HjI^u1WKpH8}+b*DqLcn=i(iwa#pmyV!u7 zzCPA$g?Owc(arMn#Vvi&TI_|j%u<}g9+~oa!vqVv8|sQ~-wwa-%_9Ask5iGHtrNA9 ztPn%dq**W4Gz<{_qVAyN$$W&dh1m=!b?&ihe%!kTCr6nSY#U*I3dg&{+ssiHdo59| zf%IsnQjvZ5^CYfN{85Su<@JWezryb{|7t~`qoV3o{nrW46pHKaDNz}8;L0Gqosh}! z>5S=GLA~k3D(a$$q#4~LU7f7d$!1(5p_lM?3J z-|UfcpBKE4n1h$a`!q+>`|On~9xkLcSqJhon&J;H)Mh8HC!LH?#-I7^7c81T|K2hK z##K#PSxOxxt_J;{oZ18REJ5($T(Ww=#`J6RF?w8L!9G)p=Ztt^O^PF%h2z42uwbsC zaKCo$5;VTt|->pJ0rq&DWI6-4|G$%=Py!*Zn@=6XhB#vp%(`0P4nrrC7(Qh8l>U1S;(U zqsNwubG*a)#YN|#-oR1~RDj)vr>B231U#hRcTUK-!u5V7C*C(QG3N2sHvI=k%x7n} zUFYTcl=RtC`K_5~*$=pFx#^3ebtmgWYaKyFLnp+$^*Z%Ju!JgeQ)6Q7LUC%jF_pws zLzO=~n0jCuA=z&LN(aCODP7itll!c~%dTAuf9zn@IPTc3A$Mzo|3%@@989je(HfDe z`SCt+JeN>SA6S%czn6qCOK{I)vj*iF5or`&HeK#ta&P6>8VQ~SEzH(Uu*y-!H8hPS zAl6e1v^>G0O|Rq9y*3x6w66=SPOZpi&-9uJ^$cnmaV#%U>5>k0)jw{r-$ros$Jza= z7s!lo&kXs5v(j9*y3x_!ysjK5?!liCaV*RoBbL86N{%SdB_Suzb>ag2AZ~yc(>Rmd zSEW8-vZ7D4ja%5QIdy!ctZepgf%?BViraL66RBZ1AslmnxdP}sZBG2htSsiqC~va4 z-2==EhPHnI@?DSUdilR{(f++o7xer214;vEUSDv8AKRa-1b=Xa)u{Ky8T2=Ze`zY{ zu`X(E-F2%0w~RuqO_Sq|vDs25D}lBk6pDlRoM~?L0oN`G(#dKGSJ%3|f1e06_XR>q zcO1TJ3bU@acO(80dF+%qx@F5H#vS_@JW=9xX}W9(JWNwp;LWo~ONIH`u&m5X?hCxt zmzO5Waa4?I&BNbkCG>8tImPE(S4Sr{+iED|Ykj&_p&q~0$Ut2_@R*!5V6Hfb_mQ-6 zcD8cT&`@pyeEVPw(%m&`!qauZ&dl7|-+uv#inc)Qe%nz0EMPd8xLMB|upw&qqRDz! zR&R@QRcaM_r#j--**x`8)2cf(^)zp@c*A2p%56Lf^7NfL^@@86ytP%TMn!=m40=Xm Y_G`*Ou!QdeF#07qY2}wiFW!9oA26qj)c^nh literal 0 HcmV?d00001 diff --git a/samples/web-app-managed-identity/dotnet/images/vacation-planner.png b/samples/web-app-managed-identity/dotnet/images/vacation-planner.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c515161863487cdc0705e2a8e8c9c4a2bd60b1 GIT binary patch literal 85690 zcmcfoV{|25v<3>t?%3(rcG9tJ@7T6&t7CVZbewc-+qP}ncfaS1asGYdyT9&_J$6-% zwW`*d^O>k;&Wco&m-qpP3kL!M@>36Pc%=rjU=8>O?II;727LyJ z@dF(b>bJ}k@Di+pq^2_n2tn_EKhSUkub0j5p;i@4oF zt4%U*kSc@7yhhN8b!_tsj=44?LkwLjmxwXSFIN}-{8a%dQg1Q-&IyAj6qyDOGq>Cu+)iqi>1YgfUVd2C zT*2OvhqjIUf7;1pN=t7)`|e=Jb9U9y1JNz#l6d!KI@uwn2gn$ID>nM3<}->P=J~2G zC`i7oC8254pxilVwwg5w~Q~I2$%Uinn=C=2hx#(?l7=LaMBm6uu`+(m#FMsDz^XYURPb`$6~N}yA>f~oh6QnBq~)cGP|4uVfrZwzgDr=bYGPVU_O$3D1KUH z8!%F?#_I z6|hyQZC?mnn6V+orc2|>>*l0KB@q_3NFdMZs;+|(hr`9{&$T%s4ER@d%*Nq{WE)T^ zIv*oTB9wy`BL74(pVs10r>qSv_@E{Kl7Z6~VPeX%wmlM^l)T?cjcE5V=w0we8NZej z*hI)eiISQxj3GS8lFU<~Pn&G9BC&y4N{4Qn)_OR57&9W+@eF&JC1B@|WBcss?6-xc ztr880P6~qG*~P`@u&w~wxXJ9mIZGzS^VZlhI@u9?S+h3f6m)9~71`j9k{*WcNHv9( zt(4Sj%E?WhMU-gKL;nx}ED?l=siED$twQTV=9NbS1l5oQG=@rX0#<{5T9oc(8{w67-c4Dl=GYxeievpJCs+Wv5Irg zqmBin6^rUi(Fr70AJK2d+vE`27uEYD3f@LEV~)8A-(MRK+@(Bg8Z!7TxQ6yovgEs* zPc)1g^jvNf-kmrMbgB_^(?uPIuPy@0CEp?k$S5Ms$=^32O<0&F;sbSjydh>SWq7Be z0~Qf3tpZ8^x{BR+N>K#Y8UB^FF8+`gvLX8DGXlUeJ7ig&Qx*-%(kgHuq6?$ma-yi| zJNKA!EmbdRE-8rOijh$Fu}W_m=njpVz}%RdJREXHG6-}Fdr%O#6g-lOQznJxRzGj} zsKQQ7vY0o!NV_PUK24lqx>>`iAKyApQ{~iBVu_%J;K_RMM_vaOX*9Rwwt2or5EE;L z(=>vy)#c;jDe9^ncj?FR;tF7nyF~d`@*V;xjpD~pWvEtY;5_%rte8zEP~j$76H1UZ z%2TFhk}vX+3FsvBTk@Ig$;H(Jl-$`{E~XyDNgfJWz#pna12;mOLrnHCj;aPqOXa#b z=Qio`1AeD;WJaXM-(0HUp{u96*^}v}Do!w@yh3F7-4F~2&=l7QGjt`=&FjfoG%iq^ zk0^Cij>OAvqIRmAjC86+5mc)evG5;yzABOP9>~GLOe;P`_tC$I*PQQ36u2(m$U+zk zE)Qby;pQr!n#2tnpSQh4=}P>c*L2nO$sy8xRyR`JENGer&R24%cvAe3gq~*?mT1w5NpaEj zd3C`i6F*@Y`kK1+|9ieyad7y3UFUaznldzx*+J+Y5D&-1VaM8DAytw=EP!1pxjdNm zgcew&ix!Q6x7fzu=fOW3Z#NpCHtbD`SmmnwAqxcW{H_4>2vz)-l(_`wV*VR9U%7SyRkZ&FrcM{7tIsy z)YDl6I8jR&r55-1|N5ww>gXETvUsw|cstlr(_6jR>gc$eNQh?3W6a$La2*IKPOvxN zR&OoHe$w`1*3a>;v%B7k(Kx>Afn~RQO1P#QJ^@HT-i-~CGfFr1x)?i%Pn@hrW`QLz`d88UB$3Ts%^@WpJKHpSY9G3luuaiAlsATixw%)b{pcs;(^VL>dO*h_93W2MRi(apu zqrX@}ubcu-?8-toO(kME()*MfRKxDs$y&i(x9bujx<3;3&YVSGpp#26^J zi`fwTorO->lIyMM#$3jhWQd=tSwL3`RebwRYP@VmUq=cyM&s$Tcv}`Z`b=%22HGs@ zoa-(4GKLF0%jXVXgukk^KF}QO_$0zy&QjyNbbV0l>d}lDB86KeIjMwZ`3b~dd#nh{^{mWehmH~nA` z1$W#_J;qCtzCQk;krGP)oF3I~mYycoClPeBKvX}H5U87Q$}nj?KW?Awm=3PqtG{FL z*G*fJSl19h#b$Q?Z(dS;zDMhZp8?5IsNGlD+X>vQXOPRLcBGPP^cp|#781QxYa+L# z__E6|_`6Qb>cA}?&Kt)67jfQshQD>yuySEKa2XlD{VN|y(@NQLnsz>0z(Z66Y8|sy zb>+Ax5ng)@#M&6T8ggOCE;9j@E2Y3^^xsQ`xyV3Oa&O@|S^#a`yzea%!}zzTJ{!0k zP-(o-u(>Xw=HyHLz=xxUI*%Ih=I9j*LE|u#gdw?4SoPa;~{N zc+EgyGm-`IAjSs(4j{1$_N2Ja@ytV!RH6A`0E(=lnrhj)vaxkiR zfp9wo(fu+34^piaaR>%f0S02J8#!W5X2Hjn{p5GtLM}K(aj`iZq`8*H ziG(TCiFPDdE4)4I=m6~m5N}FZe)dJ}n!-ZuWl{fsZ0WlUsH*s=Lm8?P(JdIV@&6CP z5=sOy3H8XhLU>J50w?9lrmE-e<`UlNUN$fQD%5i(YBJLH%>e~CSWQ|lXyzi5&fc=z z#=x%-U+qoH{6A?t5NuQ}YTi_SMZu@I`J_4wL()JA`*0(mlDgm+`yan_w=WJ-2A%x- z#V8OEWB3o8I+^)gf z3O`N)`ZffBYX|4v4A3;DLmts+hkizOSwLk1b>NAJ%6|$sEnOK7TqJC+2|vkC<>nR7 zS0Lh$8%bQz6SU~|KpKHJ<=Wf3lRcm=I-dLi)K+;Fi4ptHTnLY<+73tHd4@8vR3`Bz z>fHEVCoa%^@1nul%}>$yokF+3B-%kdEV|zA&r1GMH={Re^nEH+!qSJp`F*&*a7Mxq z@?U%*1apLg0VV@yvcl58YC`iLE6?}bv5+_pu&@(%j3NUqnZ9EJiWq3d*XWxh@j{K3|0N6jr<8eh5o-&+dS>_{n zr*yewioAPOV#|ZWoL_AJmwpnaw7rlx7{7x4PgH_!NDTkM%j$GiBc6E|o zQ`TGrDx2GXp|;kv#OtV$Gv{)4EmaJqFO?(=hb2CG+DILU6|Cl84ZsjOAGI#4EkI0f zrsWCT#~f(euO!ezoMO9w3_$(N9vE3*xas0F`wg4`eZc-+Q-uqBJ3C~Bvo2QdHHAo< z*e>RUo1vfd)uMZNe!Mo87&8Zv-r`7aZ1mA3-byz!PeMvsT2hK_Lt~TbC6&*^Yl69U zebv=aGGUk3))Ieby|c5|0htr(Dwk)gr@cDH$Jy%cX@06rZ-S;m`DaQAP%F>~GZ{FH zBZZE|Krp2_%9wkRqP!_(fWE002wwGR3$xt9-2=0(g}>W)r*^4|J9gzei=qu7z=+@D z3b`31E8u~&N0>6FQO4lcl(50d!!662M@Z~jU!Umh9*#9m<^&ZbSa9Q0VDi7=@!J+? z(haOmHE(9-@7xrp+1pPk3U;(~yjhazny^Nix38UWXpuR#w#Qpu-xmsmJpPK`Z>Gx~ zORUZ2)u!vuBa>1Ok|yTIPbZo)?I&^8THoiby?1JnoNsX+x*v0q&;D*pL0?5}R-5=0 zO{(tU*lJLo6hX{+=X=ovvD1`rtfT)P1+9S@(*OJPby5&-tH!`$J1EfC>+w7rFS6xJ z^*1L6A)o8hPUO(%a8|)%ywd-LVhJMg9`QlH1PAItl@Y%whvwPR)Oh??=&Hw4wR%L1 z2P=8*wlama^)>liJF1IKQh}Ol$UZSV%zKjLVCEc%f5d6(Za^L{}-C3dcxh~V5?OF`jPn7tc?Cf?M2coMwlhLAOPr8xH zpBT+G*5^6%bV#>Zh^QDK+Eyt&zs3h}l#+uD&b_T<8cv#XH0E;$yJ$_$r};Li3$7MU%b(NQJ0k=52uR_RmHdF-oVtYS)Ur zO;nmNlV-1-I4YTr8|0CjI8-^sz)`U$iImQ@#mh+t(1l=MD7GvWTO9u@i&^SQ6@MMj zkEtU+Ad<9VhT%Xmvwy5POpPD0hQwWGLXehfNoH3)+p8GK6O@>x8WIg$Ge^io;leq1 zQYVW1*pjxi2~*Iq3p6I)ih%i7o#C3FYPTJxeIKo zOBmqo`22ZghdQZ`auVSgwk~Xc_}$+gRzn=CO&kmhB*v3#uQ8wbHfIx@%eQQp*1eCL zv9R1t%p2XYhgMljVnm1KG@3ro$5{5@Ds9Kw#4Aswl@><{($o+fm-O6jO^=)zjitQ@ z*i-sxptzgy%e;+)E!{1-TVxsJI~lsDEg+|`{Jc;5T0h}0zqIf;E4Q^Tt7|J2`pC@+ z9Eeb?^sr=S%3veRGpT8^2&y*Ul~wxJ&|PB-YWv?cc0?X)ur-@3dN0l`-AMYSbKyInu=(5T$Z1=AD+qa{(=VzX|vh_ELZe*QFOZLNmg zjEk@O`6i6xvSxr&q&;t+uOq^Lt8H#Y0Vq8!jBTMd^P}Z8c7&!t=*&ZS8)ZCOLSo*S z?PYhgWq_6o8{Nee>K?6i7yM-NMU0}#-VCXl++8Zn6 zb8T#U`I(|A6Y=%Oh&fyVpcM{G%2AnAiRX~=lhE!F8k^x(L()XOxnp!lRYb_vuvq-k z(x@N>^)-lK_W~h?jPk27FRB#n;aO+$s?}GtrEc0RJdyCCA-yZ!1^w&_oIJX_UR%}P z&!(Ch`ti!B^H?mN_s8-!k8vuJQlG+D=_TZ|@l}-5(~>@ya*XAUwLsrldD`R9Dhk8- z`R-F&F+@e414L7qtrQ8*kB?Rh{U6_|*ZrFVx3ypC!LF((X6XOA2n02$1St-c!@2BkKgu(XKHKL-FrWtWu&dIC2!iT-Vd#|WnK)0 z{SlQ{kK3qB;yO4%ss9d0okO)ApqsP%V>$Iil4v)Ak8pyZ^4;UjJ|335R(SM-@K*Qk zu2U6;x)D+?lixCrvw6r}-+%cBGK>-U71j=gP)vq4+d6kdVGvE(Q^C8stfOeXfj7uxcE|4r#_ zgd+Rg;|MRNFW=18++fe|P~ZgEh7Wu8J?}5X4}r+}!QZ~OpO!5UVsVn{Fn%$6{7BpK zB(OB{K;PCZ{Y3iP(H2q4!!B4^7G?lShj9t|n0qIL+jH4hf$aX5mr3&^jentnpSoKg zQ(c`?T|K;ls|jA~x&orjNcrUHY(lo=)}NFVTU<@^sl)FN_t)!79N}1TF}W38x9j`& zZEXPesQlU}ZFX}=JY|5Jd~0Xgm#$O>XX9IcT$L+ks0; zaSYkx3~dDgwWsaEoZ-+@BTt1Wvlc(tKy&<(-?{vx81fDNDs|G+(V0l>

A%9I;ra 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⁣46^_T- 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 [!NOTE] +> You can use `lstk az` to proxy Azure CLI commands to the LocalStack for Azure emulator. Alternatively, run `lstk az start-interception` to automatically intercept and redirect all `az` commands to LocalStack. To revert back to the default behavior and send commands to the Azure cloud, run `lstk az stop-interception`. + +## Deployment + +You can set up the Azure emulator by utilizing LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `scripts` folder: + +```bash +cd samples/web-app-managed-identity/dotnet/scripts +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +STORAGE_ACCOUNT_NAME="${PREFIX}storage${SUFFIX}" +CONTAINER_NAME='activities' +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check user-assigned managed identity +echo -e "\n[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,ClientId:clientId,PrincipalId:principalId}' \ + --output table \ + --only-show-errors + +# Check storage account +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage account:\n" +az storage account show \ + --name "$STORAGE_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,Kind:kind,Sku:sku.name}' \ + --output table \ + --only-show-errors + +# List storage containers +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage containers:\n" +az storage container list \ + --account-name "$STORAGE_ACCOUNT_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure CLI Documentation](https://docs.microsoft.com/en-us/cli/azure/) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-managed-identity/dotnet/scripts/api.sh b/samples/web-app-managed-identity/dotnet/scripts/api.sh new file mode 100755 index 0000000..71c0deb --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/scripts/api.sh @@ -0,0 +1,153 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +NEW_LOCATION='northeurope' +RANDOM_SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 4) +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}-${RANDOM_SUFFIX}" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +SUBSCRIPTION_ID=$(az account show --query id --output tsv) +PROXY_PORT=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') +SUB_BASE_URL="https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.ManagedIdentity/userAssignedIdentities" +RG_BASE_URL="https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities" +ENVIRONMENT=$(az account show --query environmentName --output tsv) +API_VERSION="2024-11-30" + +# Choose the appropriate CLI based on the environment +if [[ $ENVIRONMENT == "LocalStack" ]]; then + CURL="env http_proxy=http://127.0.0.1:$PROXY_PORT https_proxy=http://127.0.0.1:$PROXY_PORT curl --max-time 10 -k -s" +else + CURL="curl --max-time 10 -s" +fi + +# Create a resource group +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Get security token +TOKEN=$(az account get-access-token --resource=https://management.azure.com/ --query accessToken --output tsv) + +# Create a new user-assigned managed identity +echo "Creating user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +$CURL \ + -X PUT \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $TOKEN" \ + -d '{ + "location": "'"$LOCATION"'", + "tags": { + "environment": "test", + "mode": "REST API" + } + }' \ + "$RG_BASE_URL/$MANAGED_IDENTITY_NAME?api-version=$API_VERSION" | jq -r . + + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] created successfully." +else + echo "Failed to create user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi + +# Get the user-assigned managed identity +echo "Retrieving user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +$CURL \ + -X GET \ + -H "Authorization: Bearer $TOKEN" \ + "$RG_BASE_URL/$MANAGED_IDENTITY_NAME?api-version=$API_VERSION" | jq -r . + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] retrieved successfully." +else + echo "Failed to retrieve user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi + +# List all user-assigned managed identities in the resource group +echo "Listing all user-assigned managed identities in resource group [$RESOURCE_GROUP_NAME]..." +$CURL \ + -X GET \ + -H "Authorization: Bearer $TOKEN" \ + "$RG_BASE_URL?api-version=$API_VERSION" | jq -r . + +if [ $? -eq 0 ]; then + echo "User-assigned managed identities listed successfully." +else + echo "Failed to list user-assigned managed identities." + exit 1 +fi + +# List all user-assigned managed identities in the subscription +echo "Listing all user-assigned managed identities in the subscription..." +$CURL \ + -X GET \ + -H "Authorization: Bearer $TOKEN" \ + "$SUB_BASE_URL?api-version=$API_VERSION" | jq -r . + +if [ $? -eq 0 ]; then + echo "User-assigned managed identities in the subscription listed successfully." +else + echo "Failed to list user-assigned managed identities in the subscription." + exit 1 +fi + +# Update the user-assigned managed identity +echo "Updating user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +$CURL \ + -X PATCH \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $TOKEN" \ + -d '{ + "location": "'"$NEW_LOCATION"'", + "tags": { + "environment": "LocalStack", + "mode": "Azure REST API" + } + }' \ + "$RG_BASE_URL/$MANAGED_IDENTITY_NAME?api-version=$API_VERSION" | jq -r . + + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] updated successfully." +else + echo "Failed to update user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi + +# Delete the user-assigned managed identity +echo "Deleting user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +$CURL \ + -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + "$RG_BASE_URL/$MANAGED_IDENTITY_NAME?api-version=$API_VERSION" >/dev/null + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] deleted successfully." +else + echo "Failed to delete user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi \ No newline at end of file diff --git a/samples/web-app-managed-identity/dotnet/scripts/call-web-app.sh b/samples/web-app-managed-identity/dotnet/scripts/call-web-app.sh new file mode 100755 index 0000000..a82964c --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/scripts/call-web-app.sh @@ -0,0 +1,199 @@ +#!/bin/bash + +get_docker_container_name_by_prefix() { + local app_prefix="$1" + local container_name + + # Check if Docker is running + if ! docker info >/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 80) + echo "Getting the host port mapped to internal port 80 in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "80") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + exit 1 + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --max-time 10 --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl --max-time 10 -s "http://$container_ip/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl --max-time 10 -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl --max-time 10 -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-managed-identity/dotnet/scripts/cli.sh b/samples/web-app-managed-identity/dotnet/scripts/cli.sh new file mode 100755 index 0000000..a72c1c5 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/scripts/cli.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RANDOM_SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 4) +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}-${RANDOM_SUFFIX}" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) + +# Create a resource group +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Create a new user-assigned managed identity +echo "Creating user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +az identity create \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment="$ENVIRONMENT" \ + --only-show-errors + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] created successfully." +else + echo "Failed to create user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi + +# Get the user-assigned managed identity +echo "Retrieving user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] retrieved successfully." +else + echo "Failed to retrieve user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi + +# List all user-assigned managed identities in the resource group +echo "Listing all user-assigned managed identities in resource group [$RESOURCE_GROUP_NAME]..." +az identity list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors + +if [ $? -eq 0 ]; then + echo "User-assigned managed identities listed successfully." +else + echo "Failed to list user-assigned managed identities." + exit 1 +fi + +# Delete the user-assigned managed identity +echo "Deleting user-assigned managed identity [$MANAGED_IDENTITY_NAME]..." +az identity delete \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors + +if [ $? -eq 0 ]; then + echo "User-assigned managed identity [$MANAGED_IDENTITY_NAME] deleted successfully." +else + echo "Failed to delete user-assigned managed identity [$MANAGED_IDENTITY_NAME]." + exit 1 +fi \ No newline at end of file diff --git a/samples/web-app-managed-identity/dotnet/scripts/system-assigned.sh b/samples/web-app-managed-identity/dotnet/scripts/system-assigned.sh new file mode 100755 index 0000000..a5dc656 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/scripts/system-assigned.sh @@ -0,0 +1,272 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +STORAGE_ACCOUNT_NAME="${PREFIX}storage${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="B1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +RUNTIME="dotnetcore" +RUNTIME_VERSION="10.0" +CONTAINER_NAME='activities' +ZIPFILE="webapp_app.zip" +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +RETRY_COUNT=3 +SLEEP=5 + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Create a resource group +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Create a storage account +echo "Checking if storage account [$STORAGE_ACCOUNT_NAME] exists in the resource group [$RESOURCE_GROUP_NAME]..." +az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No storage account [$STORAGE_ACCOUNT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group." + echo "Creating storage account [$STORAGE_ACCOUNT_NAME] in the [$RESOURCE_GROUP_NAME] resource group..." + az storage account create \ + --name $STORAGE_ACCOUNT_NAME \ + --location $LOCATION \ + --resource-group $RESOURCE_GROUP_NAME \ + --sku Standard_LRS 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Storage account [$STORAGE_ACCOUNT_NAME] created successfully in the [$RESOURCE_GROUP_NAME] resource group." + else + echo "Failed to create storage account [$STORAGE_ACCOUNT_NAME] in the [$RESOURCE_GROUP_NAME] resource group." + exit 1 + fi +else + echo "Storage account [$STORAGE_ACCOUNT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group." +fi + +# Get the storage account key +echo "Getting storage account key for [$STORAGE_ACCOUNT_NAME]..." +STORAGE_ACCOUNT_KEY=$(az storage account keys list \ + --account-name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "[0].value" \ + --output tsv) + +if [ -n "$STORAGE_ACCOUNT_KEY" ]; then + echo "Storage account key retrieved successfully: [$STORAGE_ACCOUNT_KEY]" +else + echo "Failed to retrieve storage account key." + exit 1 +fi + +# Get the storage account resource ID +STORAGE_ACCOUNT_RESOURCE_ID=$(az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "id" \ + --output tsv \ + --only-show-errors) + +if [ -n "$STORAGE_ACCOUNT_RESOURCE_ID" ]; then + echo "Storage account resource ID retrieved successfully: $STORAGE_ACCOUNT_RESOURCE_ID" +else + echo "Failed to retrieve storage account resource ID." + exit 1 +fi + +# Get the storage account blob primary endpoint +AZURE_STORAGE_ACCOUNT_URL=$(az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "primaryEndpoints.blob" \ + --output tsv \ + --only-show-errors) + +if [ -n "$AZURE_STORAGE_ACCOUNT_URL" ]; then + echo "Storage account blob primary endpoint retrieved successfully: $AZURE_STORAGE_ACCOUNT_URL" +else + echo "Failed to retrieve storage account blob primary endpoint." + exit 1 +fi + +# Create blob container +echo "Creating blob container [$CONTAINER_NAME] in the [$STORAGE_ACCOUNT_NAME] storage account..." +az storage container create \ + --name $CONTAINER_NAME \ + --account-name $STORAGE_ACCOUNT_NAME \ + --account-key "$STORAGE_ACCOUNT_KEY" \ + --public-access blob 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Blob container [$CONTAINER_NAME] created successfully in the [$STORAGE_ACCOUNT_NAME] storage account." +else + echo "Failed to create blob container [$CONTAINER_NAME] in the [$STORAGE_ACCOUNT_NAME] storage account." + exit 1 +fi + +# Create App Service Plan +echo "Creating App Service Plan [$APP_SERVICE_PLAN_NAME]..." +az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "App Service Plan [$APP_SERVICE_PLAN_NAME] created successfully." +else + echo "Failed to create App Service Plan [$APP_SERVICE_PLAN_NAME]." + exit 1 +fi + +# Create the web app +echo "Creating web app [$WEB_APP_NAME]..." +az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --assign-identity '[system]' \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Retrieve the principalId of the system-assigned managed identity +MANAGED_IDENTITY_PRINCIPAL_ID=$(az webapp identity show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query principalId \ + --output tsv) + +if [ -n "$MANAGED_IDENTITY_PRINCIPAL_ID" ]; then + echo "Principal ID of the system-assigned managed identity of the web app [$WEB_APP_NAME] retrieved successfully" +else + echo "Failed to retrieve principal ID of the system-assigned managed identity of the web app [$WEB_APP_NAME]." + exit 1 +fi + +# Assign the Storage Blob Data Contributor role to the managed identity with the storage account as scope +ROLE="Storage Blob Data Contributor" +echo "Checking if the managed identity with principal ID [$MANAGED_IDENTITY_PRINCIPAL_ID] has the [$ROLE] role assignment on storage account [$STORAGE_ACCOUNT_NAME]..." +current=$(az role assignment list \ + --assignee "$MANAGED_IDENTITY_PRINCIPAL_ID" \ + --scope "$STORAGE_ACCOUNT_RESOURCE_ID" \ + --query "[?roleDefinitionName=='$ROLE'].roleDefinitionName" \ + --output tsv 2>/dev/null) + +if [[ $current == $ROLE ]]; then + echo "Managed identity already has the [$ROLE] role assignment on storage account [$STORAGE_ACCOUNT_NAME]" +else + echo "Managed identity does not have the [$ROLE] role assignment on storage account [$STORAGE_ACCOUNT_NAME]" + echo "Creating role assignment: assigning [$ROLE] role to managed identity on storage account [$STORAGE_ACCOUNT_NAME]..." + ATTEMPT=1 + while [ $ATTEMPT -le $RETRY_COUNT ]; do + echo "Attempt $ATTEMPT of $RETRY_COUNT to assign role..." + az role assignment create \ + --assignee "$MANAGED_IDENTITY_PRINCIPAL_ID" \ + --role "$ROLE" \ + --scope "$STORAGE_ACCOUNT_RESOURCE_ID" 1>/dev/null + + if [[ $? == 0 ]]; then + break + else + if [ $ATTEMPT -lt $RETRY_COUNT ]; then + echo "Role assignment failed. Waiting [$SLEEP] seconds before retry..." + sleep $SLEEP + fi + ATTEMPT=$((ATTEMPT + 1)) + fi + done + + if [[ $? == 0 ]]; then + echo "Successfully assigned [$ROLE] role to managed identity on storage account [$STORAGE_ACCOUNT_NAME]" + else + echo "Failed to assign [$ROLE] role to managed identity on storage account [$STORAGE_ACCOUNT_NAME]" + exit + fi +fi + +# Set web app settings +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + CONTAINER_NAME="$CONTAINER_NAME" \ + AZURE_STORAGE_ACCOUNT_URL="$AZURE_STORAGE_ACCOUNT_URL" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +# CD into the web app directory +cd ../src || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-managed-identity/dotnet/scripts/user-assigned.sh b/samples/web-app-managed-identity/dotnet/scripts/user-assigned.sh new file mode 100755 index 0000000..a318226 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/scripts/user-assigned.sh @@ -0,0 +1,356 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +STORAGE_ACCOUNT_NAME="${PREFIX}storage${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="B1" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +RUNTIME="dotnetcore" +RUNTIME_VERSION="10.0" +CONTAINER_NAME='activities' +ZIPFILE="webapp_app.zip" +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +SUBSCRIPTION_ID=$(az account show --query id --output tsv) +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +RETRY_COUNT=3 +SLEEP=5 + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Create a resource group +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Create a storage account +echo "Checking if storage account [$STORAGE_ACCOUNT_NAME] exists in the resource group [$RESOURCE_GROUP_NAME]..." +az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No storage account [$STORAGE_ACCOUNT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group." + echo "Creating storage account [$STORAGE_ACCOUNT_NAME] in the [$RESOURCE_GROUP_NAME] resource group..." + az storage account create \ + --name $STORAGE_ACCOUNT_NAME \ + --location "$LOCATION" \ + --resource-group $RESOURCE_GROUP_NAME \ + --sku Standard_LRS 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Storage account [$STORAGE_ACCOUNT_NAME] created successfully in the [$RESOURCE_GROUP_NAME] resource group." + else + echo "Failed to create storage account [$STORAGE_ACCOUNT_NAME] in the [$RESOURCE_GROUP_NAME] resource group." + exit 1 + fi +else + echo "Storage account [$STORAGE_ACCOUNT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group." +fi + +# Get the storage account key +echo "Getting storage account key for [$STORAGE_ACCOUNT_NAME]..." +STORAGE_ACCOUNT_KEY=$(az storage account keys list \ + --account-name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "[0].value" \ + --output tsv) + +if [ -n "$STORAGE_ACCOUNT_KEY" ]; then + echo "Storage account key retrieved successfully: [$STORAGE_ACCOUNT_KEY]" +else + echo "Failed to retrieve storage account key." + exit 1 +fi + +# Get the storage account resource ID +STORAGE_ACCOUNT_RESOURCE_ID=$(az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "id" \ + --output tsv \ + --only-show-errors) + +if [ -n "$STORAGE_ACCOUNT_RESOURCE_ID" ]; then + echo "Storage account resource ID retrieved successfully: $STORAGE_ACCOUNT_RESOURCE_ID" +else + echo "Failed to retrieve storage account resource ID." + exit 1 +fi + +# Get the storage account blob primary endpoint +AZURE_STORAGE_ACCOUNT_URL=$(az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "primaryEndpoints.blob" \ + --output tsv \ + --only-show-errors) + +if [ -n "$AZURE_STORAGE_ACCOUNT_URL" ]; then + echo "Storage account blob primary endpoint retrieved successfully: $AZURE_STORAGE_ACCOUNT_URL" +else + echo "Failed to retrieve storage account blob primary endpoint." + exit 1 +fi + +# Create blob container +echo "Creating blob container [$CONTAINER_NAME] in the [$STORAGE_ACCOUNT_NAME] storage account..." +az storage container create \ + --name $CONTAINER_NAME \ + --account-name $STORAGE_ACCOUNT_NAME \ + --account-key "$STORAGE_ACCOUNT_KEY" \ + --public-access blob 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Blob container [$CONTAINER_NAME] created successfully in the [$STORAGE_ACCOUNT_NAME] storage account." +else + echo "Failed to create blob container [$CONTAINER_NAME] in the [$STORAGE_ACCOUNT_NAME] storage account." + exit 1 +fi + +# Check if the App Service Plan already exists +echo "Checking if App Service Plan [$APP_SERVICE_PLAN_NAME] exists in the resource group [$RESOURCE_GROUP_NAME]..." +az appservice plan show \ + --name $APP_SERVICE_PLAN_NAME \ + --resource-group $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No App Service Plan [$APP_SERVICE_PLAN_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group." + # Create App Service Plan + echo "Creating App Service Plan [$APP_SERVICE_PLAN_NAME]..." + az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "App Service Plan [$APP_SERVICE_PLAN_NAME] created successfully." + else + echo "Failed to create App Service Plan [$APP_SERVICE_PLAN_NAME]." + exit 1 + fi +else + echo "App Service Plan [$APP_SERVICE_PLAN_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group." +fi + +# Check if the user-assigned managed identity already exists +echo "Checking if [$MANAGED_IDENTITY_NAME] user-assigned managed identity actually exists in the [$RESOURCE_GROUP_NAME] resource group..." + +az identity show \ + --name"$MANAGED_IDENTITY_NAME" \ + --resource-group $"$RESOURCE_GROUP_NAME" &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MANAGED_IDENTITY_NAME] user-assigned managed identity actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$MANAGED_IDENTITY_NAME] user-assigned managed identity in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the user-assigned managed identity + az identity create \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --subscription "$SUBSCRIPTION_ID" 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$MANAGED_IDENTITY_NAME] user-assigned managed identity successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$MANAGED_IDENTITY_NAME] user-assigned managed identity in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$MANAGED_IDENTITY_NAME] user-assigned managed identity already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Retrieve the clientId of the user-assigned managed identity +echo "Retrieving clientId for [$MANAGED_IDENTITY_NAME] managed identity..." +CLIENT_ID=$(az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query clientId \ + --output tsv) + +if [[ -n $CLIENT_ID ]]; then + echo "[$CLIENT_ID] clientId for the [$MANAGED_IDENTITY_NAME] managed identity successfully retrieved" +else + echo "Failed to retrieve clientId for the [$MANAGED_IDENTITY_NAME] managed identity" + exit 1 +fi + +# Retrieve the principalId of the user-assigned managed identity +echo "Retrieving principalId for [$MANAGED_IDENTITY_NAME] managed identity..." +PRINCIPAL_ID=$(az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query principalId \ + --output tsv) + +if [[ -n $PRINCIPAL_ID ]]; then + echo "[$PRINCIPAL_ID] principalId for the [$MANAGED_IDENTITY_NAME] managed identity successfully retrieved" +else + echo "Failed to retrieve principalId for the [$MANAGED_IDENTITY_NAME] managed identity" + exit 1 +fi + +# Retrieve the resource id of the user-assigned managed identity +echo "Retrieving resource id for the [$MANAGED_IDENTITY_NAME] managed identity..." +IDENTITY_ID=$(az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv) + +if [[ -n $IDENTITY_ID ]]; then + echo "Resource id for the [$MANAGED_IDENTITY_NAME] managed identity successfully retrieved" +else + echo "Failed to retrieve the resource id for the [$MANAGED_IDENTITY_NAME] managed identity" + exit 1 +fi + +# Check if the web app already exists +echo "Checking if web app [$WEB_APP_NAME] exists in the resource group [$RESOURCE_GROUP_NAME]..." +az webapp show \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No web app [$WEB_APP_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group." + # Create the web app + echo "Creating web app [$WEB_APP_NAME]..." + az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --assign-identity "${IDENTITY_ID}" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." + else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 + fi +else + echo "Web app [$WEB_APP_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group." +fi + +# Assign the Storage Blob Data Contributor role to the managed identity with the storage account as scope +ROLE="Storage Blob Data Contributor" +echo "Checking if the managed identity with principal ID [$PRINCIPAL_ID] has the [$ROLE] role assignment on storage account [$STORAGE_ACCOUNT_NAME]..." +current=$(az role assignment list \ + --assignee "$PRINCIPAL_ID" \ + --scope "$STORAGE_ACCOUNT_RESOURCE_ID" \ + --query "[?roleDefinitionName=='$ROLE'].roleDefinitionName" \ + --output tsv 2>/dev/null) + +if [[ $current == $ROLE ]]; then + echo "Managed identity already has the [$ROLE] role assignment on storage account [$STORAGE_ACCOUNT_NAME]" +else + echo "Managed identity does not have the [$ROLE] role assignment on storage account [$STORAGE_ACCOUNT_NAME]" + echo "Creating role assignment: assigning [$ROLE] role to managed identity on storage account [$STORAGE_ACCOUNT_NAME]..." + ATTEMPT=1 + while [ $ATTEMPT -le $RETRY_COUNT ]; do + echo "Attempt $ATTEMPT of $RETRY_COUNT to assign role..." + az role assignment create \ + --assignee "$PRINCIPAL_ID" \ + --role "$ROLE" \ + --scope "$STORAGE_ACCOUNT_RESOURCE_ID" 1>/dev/null + + if [[ $? == 0 ]]; then + break + else + if [ $ATTEMPT -lt $RETRY_COUNT ]; then + echo "Role assignment failed. Waiting [$SLEEP] seconds before retry..." + sleep $SLEEP + fi + ATTEMPT=$((ATTEMPT + 1)) + fi + done + + if [[ $? == 0 ]]; then + echo "Successfully assigned [$ROLE] role to managed identity on storage account [$STORAGE_ACCOUNT_NAME]" + else + echo "Failed to assign [$ROLE] role to managed identity on storage account [$STORAGE_ACCOUNT_NAME]" + exit + fi +fi + +# Set web app settings +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + AZURE_CLIENT_ID="$CLIENT_ID" \ + AZURE_STORAGE_ACCOUNT_URL="$AZURE_STORAGE_ACCOUNT_URL" \ + CONTAINER_NAME="$CONTAINER_NAME" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +# CD into the web app directory +cd ../src || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-managed-identity/dotnet/scripts/validate.sh b/samples/web-app-managed-identity/dotnet/scripts/validate.sh new file mode 100755 index 0000000..67198f8 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/scripts/validate.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +STORAGE_ACCOUNT_NAME="${PREFIX}storage${SUFFIX}" +CONTAINER_NAME='activities' +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check user-assigned managed identity +echo -e "\n[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,ClientId:clientId,PrincipalId:principalId}' \ + --output table \ + --only-show-errors + +# Check storage account +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage account:\n" +az storage account show \ + --name "$STORAGE_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,Kind:kind,Sku:sku.name}' \ + --output table \ + --only-show-errors + +# List storage containers +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage containers:\n" +az storage container list \ + --account-name "$STORAGE_ACCOUNT_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors diff --git a/samples/web-app-managed-identity/dotnet/src/Models/Activity.cs b/samples/web-app-managed-identity/dotnet/src/Models/Activity.cs new file mode 100644 index 0000000..c39b073 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Models/Activity.cs @@ -0,0 +1,4 @@ +namespace VacationPlanner.Models; + +///

A planned vacation activity: the store's identifier plus the free-text description. +public sealed record Activity(string Id, string Text); diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml b/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml new file mode 100644 index 0000000..386fa85 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml @@ -0,0 +1,2 @@ +@page "/delete/{id}" +@model DeleteModel diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs new file mode 100644 index 0000000..2d9f0e9 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. +public class DeleteModel(IActivityStore store) : PageModel +{ + public IActionResult OnGet() => RedirectToPage("/Index"); + + public async Task OnPostAsync(string id, CancellationToken cancellationToken) + { + if (!string.IsNullOrWhiteSpace(id)) + { + await store.DeleteAsync(id, cancellationToken); + TempData["Flash"] = "Activity deleted successfully."; + } + + return RedirectToPage("/Index"); + } +} diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml b/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..bd617e2 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,265 @@ +@page +@model IndexModel + + + + + + Vacation Planner + + + + + + + + + +
+
+

🌴 Vacation Planner

+

@Model.Activities.Count activit@(Model.Activities.Count != 1 ? "ies" : "y") planned

+
+
+ + +
+
+ + +
+ + + + + + + + + @foreach (var activity in Model.Activities) + { + + + + + + } + @if (Model.Activities.Count == 0) + { + + + + } + +
ActivityActions
@activity.Text + + +
+ +
+
No vacation plans yet — add your first activity!
+
+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..02cdf62 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Models; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +public class IndexModel(IActivityStore store) : PageModel +{ + public IReadOnlyList Activities { get; private set; } = []; + + /// Flash messages set by the previous request (the equivalent of Flask's flash()). + public IReadOnlyList Flashes => TempData["Flash"] is string message ? [message] : []; + + [BindProperty(Name = "activity")] + public string? Activity { get; set; } + + [BindProperty(Name = "row_id")] + public string? RowId { get; set; } + + public async Task OnGetAsync(CancellationToken cancellationToken) + { + Activities = await store.ListAsync(cancellationToken); + } + + public async Task OnPostAsync(CancellationToken cancellationToken) + { + var text = Activity?.Trim(); + var id = RowId?.Trim(); + if (!string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(id)) + { + await store.UpdateAsync(id, text, cancellationToken); + TempData["Flash"] = "Activity updated successfully."; + } + else + { + await store.AddAsync(text, cancellationToken); + TempData["Flash"] = "Activity added successfully."; + } + } + + return RedirectToPage(); + } +} diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-managed-identity/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..ec62511 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using VacationPlanner +@using VacationPlanner.Models +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-managed-identity/dotnet/src/Program.cs b/samples/web-app-managed-identity/dotnet/src/Program.cs new file mode 100644 index 0000000..49ebcb7 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Program.cs @@ -0,0 +1,31 @@ +using VacationPlanner.Services; + +var builder = WebApplication.CreateBuilder(args); + +// Code deployments built by Oryx export ASPNETCORE_URLS; custom images and local runs only set PORT. +if (Environment.GetEnvironmentVariable("ASPNETCORE_URLS") is null + && Environment.GetEnvironmentVariable("PORT") is { Length: > 0 } port) +{ + builder.WebHost.UseUrls($"http://*:{port}"); +} + +// Read and validate the configuration up front so a misconfigured deployment fails at startup. +var storageOptions = BlobStorageOptions.FromEnvironment(); + +builder.Services.AddRazorPages(); +builder.Services.AddSingleton(sp => + new BlobActivityStore(storageOptions, sp.GetRequiredService>())); +builder.Services.AddHostedService(sp => + new StoreInitializer(sp.GetRequiredService(), sp.GetRequiredService>())); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/health", async (IActivityStore store, CancellationToken cancellationToken) => + await store.IsHealthyAsync(cancellationToken) + ? Results.Json(new { status = "ok" }) + : Results.Json(new { status = "unavailable" }, statusCode: StatusCodes.Status503ServiceUnavailable)); + +app.Run(); diff --git a/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs b/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs new file mode 100644 index 0000000..6ea1fa2 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs @@ -0,0 +1,81 @@ +using System.Text; +using Azure.Identity; +using Azure.Storage.Blobs; +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// One blob per activity in a Blob Storage container; the blob name is the activity id and its content the text. +public sealed class BlobActivityStore : IActivityStore +{ + private readonly BlobContainerClient _container; + + public BlobActivityStore(BlobStorageOptions options, ILogger logger) + { + BlobServiceClient service; + if (options is { ClientId: { Length: > 0 }, ClientSecret: { Length: > 0 }, TenantId: { Length: > 0 }, AccountUrl: { Length: > 0 } }) + { + logger.LogInformation("Using ClientSecretCredential with BlobServiceClient."); + var credential = new ClientSecretCredential(options.TenantId, options.ClientId, options.ClientSecret); + service = new BlobServiceClient(new Uri(options.AccountUrl), credential); + } + else if (!string.IsNullOrEmpty(options.ConnectionString)) + { + logger.LogInformation("Using storage account connection string with BlobServiceClient."); + service = new BlobServiceClient(options.ConnectionString); + } + else if (!string.IsNullOrEmpty(options.AccountUrl)) + { + // DefaultAzureCredential picks up AZURE_CLIENT_ID for the user-assigned managed identity. + logger.LogInformation("Using DefaultAzureCredential with BlobServiceClient."); + service = new BlobServiceClient(new Uri(options.AccountUrl), new DefaultAzureCredential()); + } + else + { + throw new InvalidOperationException( + "Insufficient configuration for BlobServiceClient. Set AZURE_STORAGE_ACCOUNT_URL (managed identity) or AZURE_STORAGE_ACCOUNT_CONNECTION_STRING."); + } + + _container = service.GetBlobContainerClient(options.ContainerName); + } + + public async Task InitializeAsync(CancellationToken cancellationToken) + { + await _container.CreateIfNotExistsAsync(cancellationToken: cancellationToken); + } + + public async Task> ListAsync(CancellationToken cancellationToken) + { + var activities = new List(); + await foreach (var blob in _container.GetBlobsAsync(cancellationToken: cancellationToken)) + { + var content = await _container.GetBlobClient(blob.Name).DownloadContentAsync(cancellationToken); + activities.Add(new Activity(blob.Name, content.Value.Content.ToString())); + } + + return activities; + } + + public Task AddAsync(string text, CancellationToken cancellationToken) + { + var name = $"{DateTime.Now:yyyy-MM-dd-HH-mm-ss}-activity.txt"; + return UploadAsync(name, text, cancellationToken); + } + + public Task UpdateAsync(string id, string text, CancellationToken cancellationToken) => UploadAsync(id, text, cancellationToken); + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + await _container.GetBlobClient(id).DeleteIfExistsAsync(cancellationToken: cancellationToken); + } + + public async Task IsHealthyAsync(CancellationToken cancellationToken) + { + return await _container.ExistsAsync(cancellationToken); + } + + private async Task UploadAsync(string name, string text, CancellationToken cancellationToken) + { + await _container.GetBlobClient(name).UploadAsync(new BinaryData(Encoding.UTF8.GetBytes(text)), overwrite: true, cancellationToken); + } +} diff --git a/samples/web-app-managed-identity/dotnet/src/Services/BlobStorageOptions.cs b/samples/web-app-managed-identity/dotnet/src/Services/BlobStorageOptions.cs new file mode 100644 index 0000000..c353256 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Services/BlobStorageOptions.cs @@ -0,0 +1,19 @@ +namespace VacationPlanner.Services; + +/// Settings read from the same environment variables the Python sample uses. +public sealed record BlobStorageOptions( + string? AccountUrl, + string? ConnectionString, + string ContainerName, + string? ClientId, + string? ClientSecret, + string? TenantId) +{ + public static BlobStorageOptions FromEnvironment() => new( + AccountUrl: Environment.GetEnvironmentVariable("AZURE_STORAGE_ACCOUNT_URL"), + ConnectionString: Environment.GetEnvironmentVariable("AZURE_STORAGE_ACCOUNT_CONNECTION_STRING"), + ContainerName: Environment.GetEnvironmentVariable("CONTAINER_NAME") ?? "activities", + ClientId: Environment.GetEnvironmentVariable("AZURE_CLIENT_ID"), + ClientSecret: Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET"), + TenantId: Environment.GetEnvironmentVariable("AZURE_TENANT_ID")); +} diff --git a/samples/web-app-managed-identity/dotnet/src/Services/IActivityStore.cs b/samples/web-app-managed-identity/dotnet/src/Services/IActivityStore.cs new file mode 100644 index 0000000..3b24e5f --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Services/IActivityStore.cs @@ -0,0 +1,21 @@ +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Persistence for the planner's activities. Every call goes to the backing store; nothing is cached in-process. +public interface IActivityStore +{ + /// Creates whatever the store needs (container, table, collection) before the first request. + Task InitializeAsync(CancellationToken cancellationToken); + + Task> ListAsync(CancellationToken cancellationToken); + + Task AddAsync(string text, CancellationToken cancellationToken); + + Task UpdateAsync(string id, string text, CancellationToken cancellationToken); + + Task DeleteAsync(string id, CancellationToken cancellationToken); + + /// Cheap connectivity probe used by GET /health. + Task IsHealthyAsync(CancellationToken cancellationToken); +} diff --git a/samples/web-app-managed-identity/dotnet/src/Services/StoreInitializer.cs b/samples/web-app-managed-identity/dotnet/src/Services/StoreInitializer.cs new file mode 100644 index 0000000..c74eb50 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/Services/StoreInitializer.cs @@ -0,0 +1,33 @@ +namespace VacationPlanner.Services; + +/// +/// Runs at startup with a bounded retry, so the app fails fast +/// (and the container exits) when the backing service never becomes reachable. +/// +public sealed class StoreInitializer( + IActivityStore store, + ILogger logger, + int attempts = 1, + TimeSpan delay = default) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + for (var attempt = 1; ; attempt++) + { + try + { + await store.InitializeAsync(cancellationToken); + logger.LogInformation("Activity store initialized after {Attempts} attempt(s).", attempt); + return; + } + catch (Exception ex) when (attempt < attempts && !cancellationToken.IsCancellationRequested) + { + logger.LogWarning(ex, "Activity store not ready (attempt {Attempt}/{Attempts}); retrying in {Delay}s.", + attempt, attempts, delay.TotalSeconds); + await Task.Delay(delay, cancellationToken); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} diff --git a/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj b/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..9622602 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + VacationPlanner + true + + + + + + diff --git a/samples/web-app-managed-identity/dotnet/src/appsettings.json b/samples/web-app-managed-identity/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-managed-identity/dotnet/src/wwwroot/favicon.ico b/samples/web-app-managed-identity/dotnet/src/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b1d5cf37d81c073dbacd66df3f69d9240359dda GIT binary patch literal 36791 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 D + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `terraform` folder: + +```bash +cd samples/web-app-managed-identity/dotnet/terraform +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +STORAGE_ACCOUNT_NAME="${PREFIX}storage${SUFFIX}" +CONTAINER_NAME='activities' +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MANAGED_IDENTITY_NAME="${PREFIX}-identity-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check user-assigned managed identity +echo -e "\n[$MANAGED_IDENTITY_NAME] managed identity:\n" +az identity show \ + --name "$MANAGED_IDENTITY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,ClientId:clientId,PrincipalId:principalId}' \ + --output table \ + --only-show-errors + +# Check storage account +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage account:\n" +az storage account show \ + --name "$STORAGE_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,Kind:kind,Sku:sku.name}' \ + --output table \ + --only-show-errors + +# List storage containers +echo -e "\n[$STORAGE_ACCOUNT_NAME] storage containers:\n" +az storage container list \ + --account-name "$STORAGE_ACCOUNT_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Terraform Azure Provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-managed-identity/dotnet/terraform/deploy.sh b/samples/web-app-managed-identity/dotnet/terraform/deploy.sh new file mode 100755 index 0000000..25dbf65 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/terraform/deploy.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +MANAGED_IDENTITY_TYPE='UserAssigned' # SystemAssigned or UserAssigned +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" \ + -var "managed_identity_type=$MANAGED_IDENTITY_TYPE" + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +STORAGE_ACCOUNT_NAME=$(terraform output -raw storage_account_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) + +# Check if output values are empty +if [[ -z "$WEB_APP_NAME" || -z "$STORAGE_ACCOUNT_NAME" ]]; then + echo "Web App Name or Storage Account Name is empty. Exiting." + exit 1 +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-managed-identity/dotnet/terraform/main.tf b/samples/web-app-managed-identity/dotnet/terraform/main.tf new file mode 100644 index 0000000..65dd3fa --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/terraform/main.tf @@ -0,0 +1,118 @@ +# Local Variables +locals { + resource_group_name = "${var.prefix}-rg" + storage_account_name = "${var.prefix}storage${var.suffix}" + app_service_plan_name = "${var.prefix}-app-service-plan-${var.suffix}" + web_app_name = "${var.prefix}-webapp-${var.suffix}" + managed_identity_name = "${var.prefix}-identity-${var.suffix}" +} + +# Create a resource group +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +# Create a storage account +resource "azurerm_storage_account" "example" { + name = local.storage_account_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + account_replication_type = var.account_replication_type + account_kind = var.account_kind + account_tier = var.account_tier + tags = var.tags + + identity { + type = "SystemAssigned" + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Create storage container +resource "azurerm_storage_container" "example" { + name = var.storage_container_name + storage_account_id = azurerm_storage_account.example.id + container_access_type = "private" +} + +# Conditionally create a user assigned identity for the function app +resource "azurerm_user_assigned_identity" "identity" { + count = var.managed_identity_type == "UserAssigned" ? 1 : 0 + + name = local.managed_identity_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location +} + +# Assign Storage Blob Data Contributor role to the function app identity +resource "azurerm_role_assignment" "blob_contributor" { + scope = azurerm_storage_account.example.id + role_definition_name = "Storage Blob Data Contributor" + principal_id = var.managed_identity_type == "UserAssigned" ? azurerm_user_assigned_identity.identity[0].principal_id : azurerm_linux_web_app.example.identity[0].principal_id +} + +# Create a service plan +resource "azurerm_service_plan" "example" { + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Create a web app +resource "azurerm_linux_web_app" "example" { + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + service_plan_id = azurerm_service_plan.example.id + https_only = var.https_only + public_network_access_enabled = var.webapp_public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + identity { + type = var.managed_identity_type + identity_ids = var.managed_identity_type == "UserAssigned" ? [ + azurerm_user_assigned_identity.identity[0].id + ] : [] + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + application_stack { + dotnet_version = var.dotnet_version + } + } + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + ENABLE_ORYX_BUILD = "true" + AZURE_STORAGE_ACCOUNT_URL = azurerm_storage_account.example.primary_blob_endpoint + CONTAINER_NAME = azurerm_storage_container.example.name + AZURE_CLIENT_ID = var.managed_identity_type == "UserAssigned" ? azurerm_user_assigned_identity.identity[0].client_id : "" + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-managed-identity/dotnet/terraform/outputs.tf b/samples/web-app-managed-identity/dotnet/terraform/outputs.tf new file mode 100644 index 0000000..0817488 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/terraform/outputs.tf @@ -0,0 +1,19 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "storage_account_name" { + value = azurerm_storage_account.example.name +} + +output "app_service_plan_name" { + value = azurerm_service_plan.example.name +} + +output "web_app_name" { + value = azurerm_linux_web_app.example.name +} + +output "web_app_url" { + value = azurerm_linux_web_app.example.default_hostname +} \ No newline at end of file diff --git a/samples/web-app-managed-identity/dotnet/terraform/providers.tf b/samples/web-app-managed-identity/dotnet/terraform/providers.tf new file mode 100644 index 0000000..6682178 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/terraform/providers.tf @@ -0,0 +1,26 @@ +terraform { + required_version = ">=1.0" + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=5.1.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} diff --git a/samples/web-app-managed-identity/dotnet/terraform/terraform.tfvars b/samples/web-app-managed-identity/dotnet/terraform/terraform.tfvars new file mode 100644 index 0000000..e95f069 --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/terraform/terraform.tfvars @@ -0,0 +1,2 @@ +location = "westeurope" +dotnet_version = "10.0" \ No newline at end of file diff --git a/samples/web-app-managed-identity/dotnet/terraform/variables.tf b/samples/web-app-managed-identity/dotnet/terraform/variables.tf new file mode 100644 index 0000000..583470a --- /dev/null +++ b/samples/web-app-managed-identity/dotnet/terraform/variables.tf @@ -0,0 +1,216 @@ +variable "prefix" { + description = "(Optional) Specifies the prefix for the name of the Azure resources." + type = string + default = "webmi" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "(Optional) Specifies the suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "(Required) Specifies the location for all resources." + type = string + default = null +} + +variable "account_replication_type" { + description = "(Optional) Specifies the replication type for the storage account." + type = string + default = "LRS" + + validation { + condition = contains([ + "LRS", + "GRS", + "RAGRS", + "ZRS", + "GZRS", + "RAGZRS" + ], var.account_replication_type) + error_message = "The account_replication_type must be one of: LRS, GRS, RAGRS, ZRS, GZRS, RAGZRS." + } +} + +variable "account_kind" { + description = "(Optional) Specifies the account kind of the storage account." + default = "StorageV2" + type = string + + validation { + condition = contains(["Storage", "StorageV2"], var.account_kind) + error_message = "The account kind of the storage account is invalid." + } +} + +variable "account_tier" { + description = "(Optional) Specifies the account tier of the storage account." + default = "Standard" + type = string + + validation { + condition = contains(["Standard", "Premium"], var.account_tier) + error_message = "The account tier of the storage account is invalid." + } +} + +variable "storage_container_name" { + description = "(Optional) Specifies the name of the storage container." + type = string + default = "activities" + + validation { + condition = can(regex("^[a-z0-9]([a-z0-9-]*[a-z0-9])?$", var.storage_container_name)) + error_message = "Container name must be lowercase alphanumeric characters or hyphens, between 3-63 characters." + } +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan. Possible values include Windows, Linux, and WindowsContainer. Changing this forces a new resource to be created." + type = string + default = "Linux" + + validation { + condition = contains([ + "Windows", + "Linux", + "WindowsContainer" + ], var.os_type) + error_message = "The os_type must be either 'Windows', 'Linux', or 'WindowsContainer'." + } +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "sku_tier" { + description = "(Optional) Specifies the tier name for the hosting plan." + type = string + default = "Standard" + + validation { + condition = contains([ + "Basic", + "Standard", + "ElasticPremium", + "Premium", + "PremiumV2", + "Premium0V3", + "PremiumV3", + "PremiumMV3", + "Isolated", + "IsolatedV2", + "WorkflowStandard", + "FlexConsumption" + ], var.sku_tier) + error_message = "The sku_tier must be one of the allowed values." + } +} +variable "sku_name" { + description = "(Optional) Specifies the SKU name for the hosting plan." + type = string + default = "S1" + + validation { + condition = contains([ + "B1", "B2", "B3", + "S1", "S2", "S3", + "EP1", "EP2", "EP3", + "P1", "P2", "P3", + "P1V2", "P2V2", "P3V2", + "P0V3", "P1V3", "P2V3", "P3V3", + "P1MV3", "P2MV3", "P3MV3", "P4MV3", "P5MV3", + "I1", "I2", "I3", + "I1V2", "I2V2", "I3V2", "I4V2", "I5V2", "I6V2", + "WS1", "WS2", "WS3", + "FC1" + ], var.sku_name) + error_message = "The sku_name must be one of the allowed values." + } +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "https_only" { + description = "(Optional) Specifies whether the Linux Web App require HTTPS connections. Defaults to false." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests. Possible values include: 1.0, 1.1, 1.2 and 1.3. Defaults to 1.2." + type = string + default = "1.2" + + validation { + condition = contains([ + "1.0", + "1.1", + "1.2", + "1.3" + ], var.minimum_tls_version) + error_message = "The minimum_tls_version must be one of the allowed values." + } +} + +variable "always_on" { + description = "(Optional) Specifies whether the Linux Web App is Always On enabled. Defaults to true." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Linux Web App." + type = bool + default = false +} + +variable "webapp_public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "managed_identity_type" { + description = "Specifies the type of managed identity." + type = string + default = "SystemAssigned" + + validation { + condition = contains(["SystemAssigned", "UserAssigned"], var.managed_identity_type) + error_message = "The managed_identity_type must be either 'SystemAssigned' or 'UserAssigned'." + } +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} \ No newline at end of file diff --git a/samples/web-app-managed-identity/dotnet/visio/architecture.vsdx b/samples/web-app-managed-identity/dotnet/visio/architecture.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..1d0bd3d9d69117eacbff2e8dbbeaa973e573fa6a GIT binary patch literal 197355 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�cE^(YZR`j}I^R>%K2b)v$7Pb!lnQ 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
iap212qOr0Im1%Gx1K_h$R2o&ZWWA_`#d0$ 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

A%9I;ra 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⁣46^_T- zzg`?Zh#A`qJ-S+7h_c|-$M+tdM46TIpd~d+I~D$P%l+WXE8<{8IbP6-yLS^`d3jefdvtsjd#jQmksVt zP2vs8k_m8cC@~EOl;yOihx8HFqE8br_Qlzc?CvUccjq*0rZKgUs&WGM@ z>HF2Z6UJ@Dq;+=2stzV4>7;QQVN^*wx?XSNedSomakTfa(m(>=wO>Ld7J1pRr?h*BgkOz)%(Pq z@4cIS#SN+HV(xBxp(BDW{9Q);K6_v0xWo2BzMn8T1+D&6pdfnJ z@Vx(segc~5LmyHyVs6MXl&KK8JK+7cXX0>0KQFnvlR4va#4!Sc6M2RxF>jEy|=>y5s0+F#)W z5?}OgtqQRc&d6QHp25CSJlCo;Vz>QJGBr|3CG5X-|H1}GHf-{nl#CP`ly{MX?y0cc zq(!_;G3g;f9h2OpF8slo6k+$?E9)X(=KD+};L>_W(ru}FR$OR1^n=nx_qp2qz8p(X zj&;pqv40HiEfgv4J8;!y>{8gNQAr~=lwlJ!eOWRM6Rx%*@%HnS$R(oBnS8N8T$#t4 z%7n@0j&}b~4UhpeFqWHCl{M}sEAVkFijx8h3d)dZc71b2Y|1U`4Iy}5$RgRm9l9uU zjhl9M@zJOXt;mlWKQs5P613Z!;f=8;7@<;wth02vt}8_Q9`xisDMo@2eT@OfJzUMeR-f^&W99WCCt66t*8EaF%EG}{R^twhM2~UcM2Bwb4Xc$J^F@5fdAQ5iPvyVHCvUqe zU*-zSip3L25AR&Px@ z`4p%=BBIS37ZZ=DRP3)w;|+4C%E?J%t^$u#x#&_7y^H6A6v3?Ej=d;N1ox$JdJY8l zI}gJd0jKujSu`BUlhx^+-J_hElx1|- z+bI?g$WwTWIyy80<14Q{tN5U0rB`V-zvmX~)CA6Zs~o>|Zu36!T)?`sHN( zSzx~7;}vAh>NNrE5^B(r6aCGiaQlALIr>n)zsjNLb5o|D%WJp*cG0h8R9XzV?*t05 z*~Xolv>`!o^V+3`<>jr(IvtGeP~zsn7x=+4M+eV|Fp@q_$$(1atNkyJ+IFq~~+k8iBD!<3Eq@B?d z`N~DjMtS`-F@{rdd^wFuq}kqkVYd0)wvL>1AtI=Vyi2?hCR6#HGp%cOR9{Pr>z=V7 z=s0ZeoC=k{tR)$^nQWjr6f>9+^er)S?s=>qtLoB$BzCf<{A+WST*WFqK2Cr^ zW%Em2Z^I4x5YAsWzdVwHnoUZI_(r^Na;#XIZ>S7uXM5EWOh1F~Z6qP;7aDX`3k`x> zEpCrBQVdeR8l=u^TT*IaQ()P5(2&Lg^_xvMGemB=>MAHGCM6|>LC`kj zKB>IYC;L3I*7XhE>FX$vp=j|5Y~|D3)AOh5B&t^#mW8akkJ_^lN>8<-!<7chAO)5V z(i~}U=xA)a>L;F(eDO$ei$vQHu7_@kO*T$mD}yw7KCSO_zG**o)EZmXdwWTKE!-;i z*YQ!>HOl?AGX>RPDZ^x=CNTlK>YBQ}wE?Xud4Ib2EB=k{FSN!=m0ewW3O}EczR*iD zvZ(gnD+&lLa-q+^ujVmRzs*q)5DMP&h`p<}g-X+(To%5Q9{r|v;+fDG*s>jj$wB9% zl-AT)Z4}zC!|}na43xNxJ%USHq;=I^oJ4g9+S*X$ zF$Pa4l1MGQ-I2Vb{ql9BL8J|((%#6#BeRr^1b$^F>+kF!qV^iW)v*q#18Slt+WTKph6FyT0c3-?JrF*a?S|172Iz>!(-88;vlSBR&1Jktx2J>oX)Aq7!8elIS+=_!WaspwVw0BaYh47t9c+o5O{)5KSJ>Vt&T7m$LwlI|bs=((@W zro89SZH(7PXGbPHW?5S&%UA@{>LNCMEKPFSW&&K-a#>{f3%R&|`cAV5@!5u%;^oSe zl#JK++Z&e%T%vQ6rPH}`WzF1>64LRC)u>pZ0FjB!IOlDhZ%1^xTL;D&Zr>}d@H%6| zfu9Ow;3&_@hH?tE3W;(Dq8vy~flPnURu-!`4a%3x#O#U?Nz7?g*{D47VFXiZK?L9`u=3 zWZ(*686m$AoE(#$6?Wy6ra~VycUzY&Ov%aN6bU{r;7e}$mW7hs_m_TB$r593g3=xd zNi?b1>MG1!A}VDMr9jW?F|hb*Mu;{FlG9Q%PPpvLDxIh)o2s_2#_+adR47MsM^5<> z8R{mzF;4DZ+fa%e98M`D=NOicKC4^l(gV7Wzw`c{++v{;Z};?|wjyxJlRee_q%;L_|Li^18~!Tt z-a-*N#dNWWCymWF&Tf@_z|yhvWy5ZXQvhAvjn@1seovo+Kwma$k4Khk<%(jm7R)Ri z)`9ZKyE#Bq*rKHSpx)X>n*=RFWDz8;QCiE(xh4PV z0@sKNXO8pEX;CUoi9YpUDVN9(DGurG{U~{Sd;V4OJ*?s!8H8L%a*dn;A#C~Skl&Lg zMR$b7Qg`I2p1R<=0q2Jn4y6Q@V$t-U%~bp{;{(6(twWH)@+RUs=7~D=)sH5oE7gl~ z8dqRrLAQ&Q7l?Su0?{x}XS^_$I(4E-#OkzsSR$ZCmWNO?#+)w%L%%Q4orIGSeGieO z$FiAe_C0DG4v-;ykcOy4AMIq2Qw}|K%8O%=s^#6K|4J~1;rA8@5NE1Wdntw;gMa_y!r9lBTTBe;^N4BvR>tA^~riIaj9xO9UU)y zI$Sex7+GvgbGxGc3ZF8CWLcNgRE_gU?X@2VT2#9HD%lcbjA*L~lOAy1>AnOurOeY| zLnJ&MYA;e~M_Ms-#L#`hUh}!I?(4Ix19sJcB^@`+FhnqdgSrnT?)}s{9o^ zxY^R~h3=Dwyj3Sp`bJW$N*ohuWdQGDWPNr&Th^KJ{M=8PJFbG{y6um#a?83iDmqsT zctqG8)xrBGsp_uf73K4=YCuUe(^+YAR2M31V8G$|_`szrhH+U1f3BY3G3vGKXcwo( ztuzyLtwdfluNmaAqJrw4{L1K6z|4wSVhgomQ>QbCy+`LAFLri{1(=W(r zd+UZ#+`=Bx^V%3H$jghmkqq0|xs$FGyL))Qy`pHfiyYxQ%tIsRSHHN11U|#FeI@NX@R*{0h{Q4}|va;mH4=j=Vy8HaAj zb1N&ic@MXMue{@vgjKhWO^dKUe&n@2uGV_G{9*Zp%<0@%f((M0mqBO8Bgg+oWQ%WW z?<75|O$#5yZu@=0!KLyKtw}m?)7l?uKVs770t7^{IS-C4gF#y*U?sE1#AmXtP2ZNq z20*z8UQfEvMYxs>^Y@{x;5E$&jh3(zrL#s_URNuwZ##e#=c42|Pi-g;TB`VHuBgYnC0wOpz`-_;v%{0(-IU|VdECB;cduRLD^(LqOJ1`oU=d`%gJU7U zi_9c}4o*mnyx!M&yI^8s@X@#SHyo+6Z}NOB@IAYs%rR=qQ*LS8@u5Ndm%N75eAiZK zkO2iQZ2`>lcD-rB9_#cStAPq@PTiCl4M%=1EtTgegAt}%SZ|@zU2pQZQ@N2*u;-7B z>gqwQjoVSl67craq!yT2;z45k*}&lPSiARg`QNHmT+I26-h$ox8dIH1p1GK?HQHy{0yEwPQk*gLyQt_CuZeMn1%XsTljXe;|S10}knu+cSWE9nl zn`_d0xfeRBxPmj&4p(Jjoo*5YH+3Vvg-` zkPNs&RM*4iC9B#ly(;?Xe*gz-K&06U-UCBQ1M6Xs3B3`2V)w73#f(M1zO(b|bAu;E zb*-o(N+{d9W9wMPEAFw|;#CvXMPrdc5VHrN3Z_Ed6#?x7BdJ>{|P;wtM0`8oo2k3ArR%{|BNc zfFa`Oc#`p8z4Tr9{(PpE;)#xI*S7v2yoFK|Ir50_-vO8l;gq-R|AEf@=MOHhLP<{J zxk1`pMu7f-2qi9A|I^4H`61Q`+=787{E7KEn_yZPu6?Rc;}=i(A0g0x{xbji4T^Uf z0ss1XNR;tdRH$avt+UF&T@tZj$_A7Iv2Vb)mP_$H$q%7M@A%gL#k_JEyGryfyzV8; z*Ky*VOy~X6_XA5!sG@?M+OTINl6Yjtel6BM3G~5Ikr;afWm2-AzoCW2kD;i+M z_-Xi{hrmBZORp6By#^qTr!K8Dt!tqdEZebDh7n8ReEOAQv6zG|>JRjsgpdQyfa9O2 zPLzRjbAbY__;*nK`UikLAFymE)Kl+LUa-L}L7@HVHc~Zs3Q+Tl*;hKNlUBTK=s0zm21>q*D%if;S$Tj-Mlp^{k42ETB6-Z>b?*Fm~(*YTQjkuw{ zfB*osR4@W8vU(&8xB%`36xud}u&0z+Za|%9-jvU?mSMY!uDaTcZmH$#T0N=w-3GWc zml6rRAF(XFdW#WnDqXE30&@tTxMfS_|%q{&WLp%+(LmuY_#)9EW@RhA`td$m_fxEq+!do%}v0?sm zQsHKs=f=vq=^wxiH#4mHCs>=-AtIs&c2a&geJijz4Ey$|>C5}}ASO!2F>MVe_kAoeP`ml<}QqTAi=yWx3=4tMj8WZ0UXHCKX9kJ17|AE-z zb;|=59T+KIBWEp7y0Z8OUx8lwJR4pYz=ygV1>|)5_LlN#BDc6z2}i^sx`#du%zB^| zN~~pj|HL)dYOA>R)s{LPEoWKHI&P|iY`X%kDpF{6sGgRQM&`~NtzlcP0(Za1cP2uT zD{_$u7^rLUw{P03VzhT;_~kX}MC~5(j06Q6kXA5^Qj!SQ+~G6r>xmf8AN2s|j%ZK! zOWqh{Dz@;XkzGn*G`Oe1edEo+8+XwX^+~GBMB@SbsYA^38K~NRpD&)Rko_5x&Rck1 z#~HyB6i zMXN8=Ya~^IHCmb`m^`&H@;{{8g3^qCa*889?~s|n8)8%L2(zsv+8F%-sKyI!8SjWu87;ujeZ3y}1hNHsj!z;|7SF;=4U_=5g>y!pGbXm;9za=va=GeCstn zuSNQ-YMp0l=eL@LEj7KOU#47SVqL!{$zwfm*c{+QHj)2`=zH~XU43$&Xy|cAU%b7M z@PhF@4r?oU)37fr==mce(WMl!IHt6RGr+#hq8*c%ckt3Y8>!oCv6C-|`3%rl2FLGi zpZ^X2#nwyo6Dyun_u&wpLtHR=dg>;j`qCJhZfeX~<6d&Jia$7`FXOE1Jiq*CI67;_ zNDr)2yA@3B&yQ@%JgW+2^9Qqe){kgLm|078+fhzJ>I5zu8evy=+aVK0+INXwck{@fS(>>^etr$x zzf6PY-ixs$gGhU=O};Q|CA?|5oWM)sl2K++;|}eO)2$~w*EoSXROoIwr0H4M)P}RI z#mPlyY14reNX)Z;joOPg==keBe2kBp?>QjZHQgthr~G=Iq6z+Xc+<2+frR38<0x`h z5sGAbx2bs2_^u=Mh!0k7I)y^_z=Yirbyr!KF_6t!qT?VjxJXZ?pR9i6pMXOtI>v5s zFi~KlY0>D83b#-VL!_y03Gg`_e7SqVzp;X=YRpI`-hhhp8&~kOs)AMuy*U41B^%|i zIC&NXSD4wyRt*?#sqJ7Wl`XGsIUwuh!!U9^x6pB&*aS%<$eLDt_3}4hUHWJc^-_j) z4MO8>?lfaCVd?)HQFQ?s1teoQQ?=xmY=D1Y^*#JcO=L{8UW~x0dAAHMczwtg4-y3~ zE~7j*qj6c2^H#N^9)Cw4z0U5zV+v=pJMTxBcu)mXkYemTjj2LE$n&#@>J}#?z>Y6> z-}KF^pz-^NMXK6IH)T3+w%A7Ef@( zu8UB@`oj4ld}7x(P}B|cD~=}2pFuU_y71D{VAd4{5o%58;a>D{NI^pO;1(I9ZdeIi zx@jX{`^{;p-V(NTUV>PV=A)NtI!z59%L?wakBc#C&n)(eDfkO{UP1{f&AT`UrkAESp`|5Ti?HpJa&bxF`x~YZop#S<^ZgSCMM;x*BjZ`O=Ri#CIes&m+)FY= zd|Y{_1LD|s3FWAdHeikyN2GKQm6qa8Zysk_kchEmMCtW#>!q-FuyZkHymwu$d&8wt0Yl%(f`^73kME^P+fWD zE}J|O5^gdV!p6(d_o|^Yz7FQQSbV60Qg679lL^ribxGJEye-2lVe1w=*$azCWz@Sz z4W6+-z92Io(hlg)Hwg9I6h24+*1e+N!O7V~D&KC9HGx%NPU2aG=ku1q_hzhXhC?5I zGpP{C*+`9xpYZv-vffjnEB5Pp2A_=3&uPuo+nUIpp?g8zZVR&q3ZtrGyn`H0dA)_7 zicP*2@9#=8RtXLdK_uOIbScOB!Mm!C@vL&yW&UG7iSoQkxtMq70@y?*UeWkt55=p1 z-lAhXNDup}`mwv^cpYf5shlfItzdxb@rRtohsNB!O;Ya5>qZ-0*NHOvW_`z5 z^Rd$7M`tFSu0!pqf(}J`aplf9X{1HtGkkl&LU^$cs{qT!YT4#=rwKMNb#kVe&9t-m zw@I4TT>8t4!#ej2u-1_TJH#p2pB|p?#e>mm87rR{Y@pQ54kkZV8brV|)<7^%oj92D zR$J3zoMMdj=}ejc(BT`Gi(te!MCMzo;!sV>GsQ3Y&;9GCoURdl=KkONd0iHyaer!O zw6@n;47X|Btb@wYAT4Gn4R4_23=YH6>izrvU9vjjUEzJ_oRN$yYFdT0;fOK;V~a^Q z?M9Q>@H?|5kh>YTEb54kQkOksDOw(;y?0b!m7qOxPiU^3e`|@iXBgqbXCU9L#`&eH(|Rkf7b+6RI-|!P z=Ustk>kHFWWo24^x35<)4(T#@Pwpf=|Eqx>*_QA+3bZBHm`&KurfzM&oPS+~%IxdV zxn1~!F7G@jQ!Pc!>u`9!Nto{Q^&cY?k11~vdF2+f;mF18kNfRKpGdFtHSHvqz3r81 z^PW+h*a=wN3x9R;#h>hr0*F6uwWjJM&|DQ*>%kyrH>Gi-J}-NEcH>k&8Ewl&DQW5` z?@aYntk5NhZ4D=c!{)f9HSd8zSqiS0tTHV~79mR@eNLl7gdFmceLGI4C!ISdvo(30 ze06xc=U*r?UXLAFyyc4<-Zjybx6CxfG)h+V`MIN z{!y+^*~DEi;kNT}iYhARLT>YwbAlIPH@7ImxZei!PLcK0*8e?q$28ii3cj?J# zS6l60eX8VOXoT8>C4(EBO;#7}9MKD)ac`;h;TAZ*wSn150@O158twO=m)G3XM1rR= zLTGnD%OWg$tDGJ99s3s0ru17;d@Kx(MK91b#jlS=FgacvTJw7;%V#>Jrp~ft;I}p( zEjgW*JYnFX3y3kkPdxwq_ESZ{Zn;&BET0X5^B1~f)*oj> zXK9WIdUE^dXAQF^QY0}Q_xkMWMt|R2dyfGXy#4{S5hxh1_^XeZ4}*5hNT2=gyD^KZ z8GY?_3By2al$MSOFV1iqbLadPQB0n|yP*%R%`6zQaT=R09684?^G;9K zhktl5FBL=(d$jDW3A^}gI*o*KK9@ihtdfUl>RmgujWJw+{>v?hv;4@lKjJdf{^vgP zJiQCjtisrb8A%0zhxanA`@~zbv#*gmYE4qmdzhdm;`TnG+Y|s_*%!@WJUz9ez=^m` z*90BAj8&H0Uor?jPNGIN>i3Tk7#_JTrX20llik_}ZUE>s(6<>}t?DQ_|9bAL!3U%} zpu)tmDz&QwC~-d5Jc`(EHwZLfrN9;i0dQscDO%iN#$O!?jAWy3MIl;n ziV|BC9P8xJYf#aPN^5#ws$k#kGo>Fm*lz< zRJ#kEkS{TSJ($StL)$}jWC8^z#FE+@d%_JI^5T#F#Cv~flJxvS?KNxcyn4 + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `scripts` folder: + +```bash +cd samples/web-app-sql-database/dotnet/scripts +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +# Check resource group +az group show \ +--name local-rg \ +--output table + +# List resources +az resource list \ +--resource-group local-rg \ +--output table + +# Check Azure Web App +az webapp show \ +--name local-webapp-test \ +--resource-group local-rg \ +--output table + +# Check Azure SQL Server +az sql server show \ +--name local-sqlserver-test \ +--resource-group local-rg \ +--output table + +# Check Azure SQL Database +az sql db show \ +--name PlannerDB \ +--server local-sqlserver-test \ +--resource-group local-rg \ +--output table +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure CLI Documentation](https://docs.microsoft.com/en-us/cli/azure/) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-sql-database/dotnet/scripts/deploy.sh b/samples/web-app-sql-database/dotnet/scripts/deploy.sh new file mode 100755 index 0000000..eee4ed8 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/scripts/deploy.sh @@ -0,0 +1,481 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SQL_SERVER_NAME="${PREFIX}-sqlserver-${SUFFIX}" +FIREWALL_RULE_NAME="AllowAllIPs" +ADMIN_USER='sqladmin' +ADMIN_PASSWORD='P@ssw0rd1234!' +DATABASE_USER_NAME='testuser' +DATABASE_USER_PASSWORD='TestP@ssw0rd123' +SQL_DATABASE_NAME='PlannerDB' +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +LOGIN_NAME="Paolo" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" +RUNTIME="dotnetcore" +RUNTIME_VERSION="10.0" +DEPLOY_APP=1 +KEY_VAULT_NAME="${PREFIX}-kv-${SUFFIX}" +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" +CERT_NAME="${PREFIX}-cert-${SUFFIX}" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit +# Create a resource group +echo "Creating resource group [$RESOURCE_GROUP_NAME]..." +az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Resource group [$RESOURCE_GROUP_NAME] created successfully." +else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit 1 +fi + +# Create a sql server +echo "Checking if [$SQL_SERVER_NAME] sql server exists in the [$RESOURCE_GROUP_NAME] resource group..." +az sql server show \ + --name $SQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [ $? -eq 0 ]; then + echo "[$SQL_SERVER_NAME] sql server already exists in the [$RESOURCE_GROUP_NAME] resource group. Exiting script." +else + echo "[$SQL_SERVER_NAME] sql server does not exist in the [$RESOURCE_GROUP_NAME] resource group. Proceeding to create it." + echo "Creating [$SQL_SERVER_NAME] sql server in the [$RESOURCE_GROUP_NAME] resource group..." + az sql server create \ + --name $SQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --admin-user $ADMIN_USER \ + --admin-password $ADMIN_PASSWORD \ + --assign-identity \ + --identity-type SystemAssigned \ + --minimal-tls-version 1.2 \ + --tags environment=test \ + --only-show-errors 1>/dev/null + + if [ $? == 0 ]; then + echo "[$SQL_SERVER_NAME] sql server successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$SQL_SERVER_NAME] sql server in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +fi + +# Add firewall rule to allow all local network addresses (for testing/development) +echo "Creating firewall rule to allow all IP addresses..." +az sql server firewall-rule create \ + --name $FIREWALL_RULE_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --server $SQL_SERVER_NAME \ + --start-ip-address 0.0.0.0 \ + --end-ip-address 255.255.255.255 \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Firewall rule [AllowLocalNetwork] created successfully" +else + echo "Failed to create firewall rule" + exit 1 +fi + +# Create database if it does not exist +echo "Checking if [$SQL_DATABASE_NAME] database exists in the [$SQL_SERVER_NAME] sql server..." +az sql db show \ + --name $SQL_DATABASE_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --server $SQL_SERVER_NAME \ + --only-show-errors &>/dev/null + +if [ $? -eq 0 ]; then + echo "[$SQL_DATABASE_NAME] database already exists in the [$SQL_SERVER_NAME] sql server." +else + echo "Creating [$SQL_DATABASE_NAME] database with Provisioned compute model in the [$SQL_SERVER_NAME] sql server..." + az sql db create \ + --name $SQL_DATABASE_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --server $SQL_SERVER_NAME \ + --service-objective S0 \ + --compute-model Provisioned \ + --zone-redundant false \ + --tags environment=test \ + --only-show-errors 1>/dev/null + + if [ $? == 0 ]; then + echo "[$SQL_DATABASE_NAME] database with Provisioned compute model successfully created in the [$SQL_SERVER_NAME] sql server" + else + echo "Failed to create [$SQL_DATABASE_NAME] with Provisioned compute model database in the [$SQL_SERVER_NAME] sql server" + exit 1 + fi +fi + +# Retrieve the fullyQualifiedDomainName of the SQL server +echo "Retrieving the fullyQualifiedDomainName of the [$SQL_SERVER_NAME] SQL server..." +SQL_SERVER_FQDN=$(az sql server show \ + --name "$SQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "fullyQualifiedDomainName" \ + --output tsv) + +if [ -z "$SQL_SERVER_FQDN" ]; then + echo "Failed to retrieve the fullyQualifiedDomainName of the SQL server" + exit 1 +fi + +#if [[ $ENVIRONMENT == "LocalStack" ]]; then +# MSSQL_HOST_PORT=$(docker ps --filter "ancestor=mcr.microsoft.com/mssql/server:2022-latest" --format "{{.Ports}}" | grep -oP '0\.0\.0\.0:\K[0-9]+(?=->1433)' | head -1) +# if [ -n "$MSSQL_HOST_PORT" ]; then +# SQL_SERVER_FQDN_WITH_PORT="127.0.0.1,$MSSQL_HOST_PORT" +# echo "Using local SQL Server at [$SQL_SERVER_FQDN_WITH_PORT]" +# fi +#fi + +# Create server-level login +echo "Creating login [$DATABASE_USER_NAME] at server level..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d master \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -N -C \ + -Q "IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = '$DATABASE_USER_NAME') + CREATE LOGIN [$DATABASE_USER_NAME] WITH PASSWORD = '$DATABASE_USER_PASSWORD';" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Login [$DATABASE_USER_NAME] created successfully" +else + echo "Failed to create login [$DATABASE_USER_NAME]" + exit 1 +fi + +# Create database user +echo "Creating user [$DATABASE_USER_NAME] in database [$SQL_DATABASE_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -N -C \ + -Q "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = '$DATABASE_USER_NAME') + CREATE USER [$DATABASE_USER_NAME] FOR LOGIN [$DATABASE_USER_NAME];" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "User [$DATABASE_USER_NAME] created successfully in database [$SQL_DATABASE_NAME]" +else + echo "Failed to create user [$DATABASE_USER_NAME]" + exit 1 +fi + +# Grant permissions including DDL rights +echo "Granting permissions to [$DATABASE_USER_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -N -C \ + -Q "ALTER ROLE db_datareader ADD MEMBER [$DATABASE_USER_NAME]; + ALTER ROLE db_datawriter ADD MEMBER [$DATABASE_USER_NAME]; + ALTER ROLE db_ddladmin ADD MEMBER [$DATABASE_USER_NAME];" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Permissions granted successfully to [$DATABASE_USER_NAME]" +else + echo "Failed to grant permissions to [$DATABASE_USER_NAME]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$DATABASE_USER_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -N -C \ + -Q "SELECT SYSTEM_USER AS CurrentUser, DB_NAME() AS CurrentDatabase, GETDATE() AS CurrentTime;" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$DATABASE_USER_NAME]" +else + echo "Connection test failed with user [$DATABASE_USER_NAME]" + exit 1 +fi + +# Create table +echo "Creating test [Products] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -N -C \ + -Q "IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Activities' AND schema_id = SCHEMA_ID('dbo')) + CREATE TABLE dbo.Activities ( + -- Primary Key: UNIQUEIDENTIFIER with a default of a new sequential GUID (best for indexing) + id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWSEQUENTIALID(), + + -- Username field + username VARCHAR(32) NOT NULL, + + -- Description of the activity + activity VARCHAR(128) NOT NULL, + + -- Timestamp of the activity + timestamp DATETIME NOT NULL + );" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test [Activities] table created successfully" +else + echo "Failed to create test [Activities] table" + exit 1 +fi + +# Insert data +echo "Inserting test data into [Activities] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -N -C \ + -Q "INSERT INTO Activities (username, activity, timestamp) + VALUES + ('paolo', 'Go to Paris', GETDATE()), + ('paolo', 'Go to London', GETDATE()), + ('paolo', 'Go to Mexico', GETDATE());" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test data inserted successfully into [Activities] table" +else + echo "Failed to insert test data into [Activities] table" + exit 1 +fi + +# Query data +echo "Querying test data from [Activities] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -N -C \ + -Q "SELECT * FROM Activities;" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test data queried successfully from [Activities] table" +else + echo "Failed to query test data from [Activities] table" + exit 1 +fi + +# Create App Service Plan +echo "Creating App Service Plan [$APP_SERVICE_PLAN_NAME]..." +az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "App Service Plan [$APP_SERVICE_PLAN_NAME] created successfully." +else + echo "Failed to create App Service Plan [$APP_SERVICE_PLAN_NAME]." + exit 1 +fi + +# Create the web app +echo "Creating web app [$WEB_APP_NAME]..." +az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --assign-identity \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Get Web App principal ID +PRINCIPAL_ID=$(az webapp identity show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "principalId" \ + --output tsv) + +if [ -z "$PRINCIPAL_ID" ]; then + echo "Failed to retrieve principalId for web app [$WEB_APP_NAME]" + exit 1 +fi + +# Create Key Vault +echo "Creating Key Vault [$KEY_VAULT_NAME]..." +az keyvault create \ + --name "$KEY_VAULT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --enable-rbac-authorization false \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Key Vault [$KEY_VAULT_NAME] created successfully." +else + echo "Failed to create Key Vault [$KEY_VAULT_NAME]." + exit 1 +fi + +# Assign access policy to Web App managed identity +echo "Assigning Key Vault access policy to Web App..." +az keyvault set-policy \ + --name "$KEY_VAULT_NAME" \ + --object-id "$PRINCIPAL_ID" \ + --secret-permissions get \ + --certificate-permissions get \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Key Vault access policy assigned successfully." +else + echo "Failed to assign Key Vault access policy." + exit 1 +fi + +# Build connection string +SQL_CONNECTION_STRING="Server=tcp:${SQL_SERVER_FQDN},1433;Database=${SQL_DATABASE_NAME};User ID=${DATABASE_USER_NAME};Password=${DATABASE_USER_PASSWORD};Encrypt=yes;TrustServerCertificate=yes;Connection Timeout=30;" + +# Create secret +echo "Creating secret [$SECRET_NAME] in Key Vault..." +az keyvault secret set \ + --vault-name "$KEY_VAULT_NAME" \ + --name "$SECRET_NAME" \ + --value "$SQL_CONNECTION_STRING" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Secret [$SECRET_NAME] created successfully." +else + echo "Failed to create secret [$SECRET_NAME]." + exit 1 +fi + +# Create certificate in Key Vault +echo "Creating certificate [$CERT_NAME] in Key Vault [$KEY_VAULT_NAME]..." +az keyvault certificate create \ + --vault-name "$KEY_VAULT_NAME" \ + --name "$CERT_NAME" \ + --policy '{ + "issuerParameters": {"name": "Self"}, + "keyProperties": {"exportable": true, "keySize": 2048, "keyType": "RSA", "reuseKey": false}, + "secretProperties": {"contentType": "application/x-pkcs12"}, + "x509CertificateProperties": {"subject": "CN=sample-web-app-sql", "validityInMonths": 12} + }' \ + --only-show-errors + +if [ $? -eq 0 ]; then + echo "Certificate [$CERT_NAME] created successfully in Key Vault [$KEY_VAULT_NAME]." +else + echo "Failed to create certificate [$CERT_NAME] in Key Vault [$KEY_VAULT_NAME]." + exit 1 +fi + +# Get Key Vault URI +echo "Retrieving Key Vault URI..." +KEYVAULT_URI=$(az keyvault show \ + --name "$KEY_VAULT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "properties.vaultUri" \ + --output tsv) + +if [ -z "$KEYVAULT_URI" ]; then + echo "Failed to retrieve Key Vault URI." + exit 1 +fi +echo "Key Vault URI: [$KEYVAULT_URI]" + +# Set web app settings +# Pass Key Vault name and secret name as app settings. +# The .NET SDK will retrieve the actual connection string value from Key Vault. +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + KEY_VAULT_NAME="$KEY_VAULT_NAME" \ + SECRET_NAME="$SECRET_NAME" \ + LOGIN_NAME="$LOGIN_NAME" \ + KEYVAULT_URI="$KEYVAULT_URI" \ + CERT_NAME="$CERT_NAME" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +if [[ $DEPLOY_APP -eq 0 ]]; then + echo "Skipping web app deployment as DEPLOY_APP flag is set to 0." + exit 0 +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Get web app URL +WEB_APP_URL=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "defaultHostName" \ + --output tsv) + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-sql-database/dotnet/scripts/get-web-app-url.sh b/samples/web-app-sql-database/dotnet/scripts/get-web-app-url.sh new file mode 100755 index 0000000..870d49b --- /dev/null +++ b/samples/web-app-sql-database/dotnet/scripts/get-web-app-url.sh @@ -0,0 +1,241 @@ +#!/bin/bash + +get_docker_container_name_by_prefix() { + local app_prefix="$1" + local container_name + + # Check if Docker is running + if ! docker info >/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 80) + echo "Getting the host port mapped to internal port 80 in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "80") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + exit 1 + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --max-time 10 --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl --max-time 10 -s "http://$container_ip/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl --max-time 10 -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl --max-time 10 -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi + + echo "Validating certificate from Key Vault..." + if ! KV_RESPONSE=$(curl --max-time 10 -fsSk "https://$container_ip:8443/api/certificate"); then + echo "Failed to call https://$container_ip:8443/api/certificate (is HTTPS on port 8443 enabled?)" + exit 1 + fi + KV_THUMBPRINT=$(echo "$KV_RESPONSE" | jq -r '.thumbprint') + KV_NAME=$(echo "$KV_RESPONSE" | jq -r '.name') + KV_SUBJECT=$(echo "$KV_RESPONSE" | jq -r '.subject') + if [ -z "$KV_THUMBPRINT" ] || [ "$KV_THUMBPRINT" == "null" ]; then + echo "The certificate endpoint returned no thumbprint: $KV_RESPONSE" + exit 1 + fi + + SSL_CERT=$(echo | openssl s_client -connect "$container_ip:8443" 2>/dev/null | openssl x509) + if [ -z "$SSL_CERT" ]; then + echo "Failed to retrieve the TLS certificate served on $container_ip:8443" + exit 1 + fi + + SSL_THUMBPRINT=$(echo "$SSL_CERT" \ + | openssl x509 -fingerprint -noout -sha1 \ + | sed 's/.*=//;s/://g' \ + | tr '[:upper:]' '[:lower:]') + + if [ "$KV_THUMBPRINT" == "$SSL_THUMBPRINT" ]; then + echo "Certificate [$KV_NAME] validated: SSL cert matches Key Vault cert." + else + echo "Certificate mismatch! KV: $KV_THUMBPRINT, SSL: $SSL_THUMBPRINT" + exit 1 + fi + + SSL_SUBJECT=$(echo "$SSL_CERT" \ + | openssl x509 -noout -subject \ + | sed 's/subject=//') + + if echo "$SSL_SUBJECT" | grep -q "$KV_SUBJECT"; then + echo "Certificate subject [$KV_SUBJECT] matches SSL certificate." + else + echo "Certificate subject mismatch! KV: $KV_SUBJECT, SSL: $SSL_SUBJECT" + exit 1 + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-sql-database/dotnet/scripts/validate.sh b/samples/web-app-sql-database/dotnet/scripts/validate.sh new file mode 100755 index 0000000..19d5997 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/scripts/validate.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SQL_SERVER_NAME="${PREFIX}-sqlserver-${SUFFIX}" +SQL_DATABASE_NAME='PlannerDB' +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +KEY_VAULT_NAME="${PREFIX}-kv-${SUFFIX}" +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ +--name "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ +--name "$WEB_APP_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--query "{name:name, state:state, defaultHostName:defaultHostName}" \ +--output table + +# Check Azure SQL Server +echo -e "\n[$SQL_SERVER_NAME] SQL server:\n" +az sql server show \ +--name "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Azure SQL Database +echo -e "\n[$SQL_DATABASE_NAME] SQL database:\n" +az sql db show \ +--name "$SQL_DATABASE_NAME" \ +--server "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Azure Key Vault +echo -e "\n[$KEY_VAULT_NAME] Key Vault:\n" +az keyvault show \ +--name "$KEY_VAULT_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Key Vault secret +echo -e "\n[$SECRET_NAME] Key Vault secret:\n" +az keyvault secret show \ +--vault-name "$KEY_VAULT_NAME" \ +--name "$SECRET_NAME" \ +--query "{name:name, enabled:attributes.enabled, created:attributes.created}" \ +--output table + +# Print the list of resources in the resource group +echo -e "\nListing resources in resource group [$RESOURCE_GROUP_NAME]...\n" +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-sql-database/dotnet/src/Models/Activity.cs b/samples/web-app-sql-database/dotnet/src/Models/Activity.cs new file mode 100644 index 0000000..c39b073 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Models/Activity.cs @@ -0,0 +1,4 @@ +namespace VacationPlanner.Models; + +///

A planned vacation activity: the store's identifier plus the free-text description. +public sealed record Activity(string Id, string Text); diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml b/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml new file mode 100644 index 0000000..386fa85 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml @@ -0,0 +1,2 @@ +@page "/delete/{id}" +@model DeleteModel diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs new file mode 100644 index 0000000..8412e78 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. +public class DeleteModel(IActivityStore store) : PageModel +{ + public IActionResult OnGet() => RedirectToPage("/Index"); + + public async Task OnPostAsync(string id, CancellationToken cancellationToken) + { + if (!string.IsNullOrWhiteSpace(id)) + { + await store.DeleteAsync(id, cancellationToken); + TempData["Flash"] = "Activity deleted."; + } + + return RedirectToPage("/Index"); + } +} diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml b/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..bd617e2 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,265 @@ +@page +@model IndexModel + + + + + + Vacation Planner + + + + + + + + + +
+
+

🌴 Vacation Planner

+

@Model.Activities.Count activit@(Model.Activities.Count != 1 ? "ies" : "y") planned

+
+
+ + +
+
+ + +
+ + + + + + + + + @foreach (var activity in Model.Activities) + { + + + + + + } + @if (Model.Activities.Count == 0) + { + + + + } + +
ActivityActions
@activity.Text + + +
+ +
+
No vacation plans yet — add your first activity!
+
+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..c2d1287 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Models; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +public class IndexModel(IActivityStore store) : PageModel +{ + public IReadOnlyList Activities { get; private set; } = []; + + /// Flash messages set by the previous request (the equivalent of Flask's flash()). + public IReadOnlyList Flashes => TempData["Flash"] is string message ? [message] : []; + + [BindProperty(Name = "activity")] + public string? Activity { get; set; } + + [BindProperty(Name = "row_id")] + public string? RowId { get; set; } + + public async Task OnGetAsync(CancellationToken cancellationToken) + { + Activities = await store.ListAsync(cancellationToken); + } + + public async Task OnPostAsync(CancellationToken cancellationToken) + { + var text = Activity?.Trim(); + var id = RowId?.Trim(); + if (!string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(id)) + { + await store.UpdateAsync(id, text, cancellationToken); + TempData["Flash"] = "Activity updated."; + } + else + { + await store.AddAsync(text, cancellationToken); + TempData["Flash"] = "Activity added."; + } + } + + return RedirectToPage(); + } +} diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml b/samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml new file mode 100644 index 0000000..5e64f03 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml @@ -0,0 +1,2 @@ +@page "/update/{id}" +@model UpdateModel diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml.cs b/samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml.cs new file mode 100644 index 0000000..47a8c42 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles GET /update/{id}: bounces to the index page with the activity to edit in the query string. +public class UpdateModel(IActivityStore store) : PageModel +{ + public async Task OnGetAsync(string id, CancellationToken cancellationToken) + { + var activity = (await store.ListAsync(cancellationToken)).FirstOrDefault(a => a.Id == id); + return activity is null + ? RedirectToPage("/Index") + : RedirectToPage("/Index", new { edit_id = activity.Id, edit_activity = activity.Text }); + } +} diff --git a/samples/web-app-sql-database/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-sql-database/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..ec62511 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using VacationPlanner +@using VacationPlanner.Models +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-sql-database/dotnet/src/Program.cs b/samples/web-app-sql-database/dotnet/src/Program.cs new file mode 100644 index 0000000..bc8f65e --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Program.cs @@ -0,0 +1,68 @@ +using VacationPlanner.Services; + +var builder = WebApplication.CreateBuilder(args); +var startupLogger = LoggerFactory.Create(logging => logging.AddConsole()).CreateLogger("Startup"); + +// Code deployments built by Oryx export PORT (and ASPNETCORE_URLS); custom images and local runs set PORT. +var httpPort = int.Parse(Environment.GetEnvironmentVariable("PORT") ?? "8080"); +var vaultUri = Environment.GetEnvironmentVariable("KEYVAULT_URI"); +var certificateName = Environment.GetEnvironmentVariable("CERT_NAME"); + +// Serve HTTPS on 8443 with the certificate stored in Key Vault, next to the plain HTTP endpoint App Service proxies to. +builder.WebHost.ConfigureKestrel(kestrel => +{ + kestrel.ListenAnyIP(httpPort); + if (!string.IsNullOrEmpty(vaultUri) && !string.IsNullOrEmpty(certificateName)) + { + try + { + var certificate = KeyVaultCertificates.LoadServerCertificateAsync(vaultUri, certificateName, CancellationToken.None).GetAwaiter().GetResult(); + kestrel.ListenAnyIP(8443, listen => listen.UseHttps(certificate)); + startupLogger.LogInformation("HTTPS enabled on port 8443 with Key Vault certificate [{Certificate}]", certificateName); + } + catch (Exception ex) + { + startupLogger.LogError(ex, "Could not load certificate [{Certificate}] from Key Vault; HTTPS on 8443 is disabled", certificateName); + } + } +}); + +// Resolve the SQL connection (Key Vault secret first) up front so a misconfigured deployment fails at startup. +var sqlOptions = await SqlOptions.FromEnvironmentAsync(startupLogger, CancellationToken.None); + +builder.Services.AddRazorPages(); +builder.Services.AddSingleton(sp => + new SqlActivityStore(sqlOptions, sp.GetRequiredService>())); +builder.Services.AddHostedService(sp => + new StoreInitializer(sp.GetRequiredService(), sp.GetRequiredService>())); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/health", async (IActivityStore store, CancellationToken cancellationToken) => + await store.IsHealthyAsync(cancellationToken) + ? Results.Json(new { status = "ok" }) + : Results.Json(new { status = "unavailable" }, statusCode: StatusCodes.Status503ServiceUnavailable)); + +// Downloads the certificate from Key Vault and returns its properties, proving the Key Vault certificate integration works. +app.MapGet("/api/certificate", async (ILogger logger, CancellationToken cancellationToken) => +{ + if (string.IsNullOrEmpty(vaultUri) || string.IsNullOrEmpty(certificateName)) + { + return Results.Json(new { error = "KEYVAULT_URI not configured" }, statusCode: StatusCodes.Status500InternalServerError); + } + + try + { + return Results.Json(await KeyVaultCertificates.GetCertificateInfoAsync(vaultUri, certificateName, cancellationToken)); + } + catch (Exception ex) + { + logger.LogError(ex, "Error validating certificate"); + return Results.Json(new { error = ex.Message }, statusCode: StatusCodes.Status500InternalServerError); + } +}); + +app.Run(); diff --git a/samples/web-app-sql-database/dotnet/src/Services/IActivityStore.cs b/samples/web-app-sql-database/dotnet/src/Services/IActivityStore.cs new file mode 100644 index 0000000..3b24e5f --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Services/IActivityStore.cs @@ -0,0 +1,21 @@ +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Persistence for the planner's activities. Every call goes to the backing store; nothing is cached in-process. +public interface IActivityStore +{ + /// Creates whatever the store needs (container, table, collection) before the first request. + Task InitializeAsync(CancellationToken cancellationToken); + + Task> ListAsync(CancellationToken cancellationToken); + + Task AddAsync(string text, CancellationToken cancellationToken); + + Task UpdateAsync(string id, string text, CancellationToken cancellationToken); + + Task DeleteAsync(string id, CancellationToken cancellationToken); + + /// Cheap connectivity probe used by GET /health. + Task IsHealthyAsync(CancellationToken cancellationToken); +} diff --git a/samples/web-app-sql-database/dotnet/src/Services/KeyVaultCertificates.cs b/samples/web-app-sql-database/dotnet/src/Services/KeyVaultCertificates.cs new file mode 100644 index 0000000..db60f5c --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Services/KeyVaultCertificates.cs @@ -0,0 +1,53 @@ +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using Azure.Identity; +using Azure.Security.KeyVault.Certificates; +using Azure.Security.KeyVault.Secrets; + +namespace VacationPlanner.Services; + +/// Key Vault certificate helpers: the TLS certificate served on port 8443 and the /api/certificate probe. +public static class KeyVaultCertificates +{ + /// + /// Downloads the certificate (public part plus private key, stored by Key Vault as a linked secret) + /// so Kestrel can serve HTTPS with it. + /// + public static async Task LoadServerCertificateAsync(string vaultUri, string certificateName, CancellationToken cancellationToken) + { + var secretClient = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential()); + var secret = (await secretClient.GetSecretAsync(certificateName, cancellationToken: cancellationToken)).Value; + if (string.IsNullOrEmpty(secret.Value)) + { + throw new InvalidOperationException($"Secret [{certificateName}] has no value"); + } + + // Key Vault returns the PFX as base64, or PEM (certificate and key concatenated) as plain text. + return secret.Properties.ContentType == "application/x-pkcs12" + ? X509CertificateLoader.LoadPkcs12(Convert.FromBase64String(secret.Value), password: null) + : X509Certificate2.CreateFromPem(secret.Value, secret.Value); + } + + /// Returns the certificate's name, subject and SHA-1 thumbprint (lowercase hex), as the Python sample does. + public static async Task GetCertificateInfoAsync(string vaultUri, string certificateName, CancellationToken cancellationToken) + { + var client = new CertificateClient(new Uri(vaultUri), new DefaultAzureCredential()); + var certificate = (await client.GetCertificateAsync(certificateName, cancellationToken)).Value; + if (certificate.Cer is null) + { + throw new InvalidOperationException($"Certificate '{certificateName}' has no public bytes (cer is None)"); + } + + if (certificate.Policy is null) + { + throw new InvalidOperationException($"Certificate '{certificateName}' has no policy"); + } + + return new + { + name = certificate.Name, + subject = certificate.Policy.Subject, + thumbprint = Convert.ToHexStringLower(SHA1.HashData(certificate.Cer)), + }; + } +} diff --git a/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs b/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs new file mode 100644 index 0000000..60da5a4 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs @@ -0,0 +1,123 @@ +using Azure.Core; +using Azure.Identity; +using Microsoft.Data.SqlClient; +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// +/// Activities in the dbo.Activities table of an Azure SQL Database. The table is created by the +/// deployment scripts, so the store only reads and writes it. +/// +public sealed class SqlActivityStore(SqlOptions options, ILogger logger) : IActivityStore +{ + private readonly TokenCredential? _credential = options.UseAzureCredential ? new DefaultAzureCredential() : null; + + // Encrypt + TrustServerCertificate: the emulator's SQL Server container presents a self-signed + // certificate, so the connection is encrypted without validating the certificate chain. + private readonly string _connectionString = new SqlConnectionStringBuilder + { + DataSource = $"tcp:{options.Server},1433", + InitialCatalog = options.Database, + Encrypt = SqlConnectionEncryptOption.Mandatory, + TrustServerCertificate = true, + ConnectTimeout = 30, + UserID = options.UseAzureCredential ? "" : options.User ?? throw new InvalidOperationException("Username and password required when not using Azure credential"), + Password = options.UseAzureCredential ? "" : options.Password ?? throw new InvalidOperationException("Username and password required when not using Azure credential"), + }.ConnectionString; + + public async Task InitializeAsync(CancellationToken cancellationToken) + { + // The table is provisioned by the deployment; just prove the database is reachable. + await using var connection = await OpenAsync(cancellationToken); + logger.LogInformation("Connected to SQL Database [{Database}] on [{Server}]", options.Database, options.Server); + } + + public async Task> ListAsync(CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new SqlCommand( + "SELECT id, activity FROM dbo.Activities WHERE username = @username ORDER BY timestamp DESC", connection); + command.Parameters.AddWithValue("@username", options.Username); + + var activities = new List(); + await using var reader = await command.ExecuteReaderAsync(cancellationToken); + while (await reader.ReadAsync(cancellationToken)) + { + activities.Add(new Activity(reader.GetGuid(0).ToString(), reader.GetString(1))); + } + + return activities; + } + + public async Task AddAsync(string text, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new SqlCommand( + """ + INSERT INTO dbo.Activities (username, activity, timestamp) + OUTPUT INSERTED.id, INSERTED.username, INSERTED.activity, INSERTED.timestamp + VALUES (@username, @activity, GETDATE()) + """, connection); + command.Parameters.AddWithValue("@username", options.Username); + command.Parameters.AddWithValue("@activity", text); + var id = await command.ExecuteScalarAsync(cancellationToken); + logger.LogInformation("Activity created: {Id}", id); + } + + public async Task UpdateAsync(string id, string text, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new SqlCommand( + "UPDATE dbo.Activities SET activity = @activity, timestamp = GETDATE() WHERE id = CAST(@id AS UNIQUEIDENTIFIER)", connection); + command.Parameters.AddWithValue("@activity", text); + command.Parameters.AddWithValue("@id", id); + var rows = await command.ExecuteNonQueryAsync(cancellationToken); + if (rows == 0) + { + logger.LogWarning("No activity found with ID: {Id}", id); + } + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new SqlCommand("DELETE FROM dbo.Activities WHERE id = CAST(@id AS UNIQUEIDENTIFIER)", connection); + command.Parameters.AddWithValue("@id", id); + var rows = await command.ExecuteNonQueryAsync(cancellationToken); + if (rows == 0) + { + logger.LogWarning("No activity found with ID: {Id}", id); + } + } + + public async Task IsHealthyAsync(CancellationToken cancellationToken) + { + try + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new SqlCommand("SELECT 1", connection); + await command.ExecuteScalarAsync(cancellationToken); + return true; + } + catch (Exception ex) + { + logger.LogWarning(ex, "SQL Database health check failed"); + return false; + } + } + + private async Task OpenAsync(CancellationToken cancellationToken) + { + var connection = new SqlConnection(_connectionString); + if (_credential is not null) + { + // Passwordless: present a Microsoft Entra access token for Azure SQL Database. + var token = await _credential.GetTokenAsync(new TokenRequestContext(["https://database.windows.net/.default"]), cancellationToken); + connection.AccessToken = token.Token; + } + + await connection.OpenAsync(cancellationToken); + return connection; + } +} diff --git a/samples/web-app-sql-database/dotnet/src/Services/SqlOptions.cs b/samples/web-app-sql-database/dotnet/src/Services/SqlOptions.cs new file mode 100644 index 0000000..f1f7e62 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Services/SqlOptions.cs @@ -0,0 +1,74 @@ +using Azure.Identity; +using Azure.Security.KeyVault.Secrets; + +namespace VacationPlanner.Services; + +/// +/// Connection settings, resolved like the Python sample's SqlHelper.from_env(): the connection string +/// stored in Key Vault (KEY_VAULT_NAME + SECRET_NAME) wins; otherwise SQL_* variables +/// are used, with Microsoft Entra authentication when the AZURE_* service principal variables are set. +/// +public sealed record SqlOptions(string Server, string Database, string? User, string? Password, bool UseAzureCredential, string Username) +{ + public static async Task FromEnvironmentAsync(ILogger logger, CancellationToken cancellationToken) + { + var username = Environment.GetEnvironmentVariable("LOGIN_NAME") ?? "paolo"; + if (string.IsNullOrWhiteSpace(username)) + { + throw new InvalidOperationException("Username cannot be None or empty"); + } + + var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME"); + var secretName = Environment.GetEnvironmentVariable("SECRET_NAME"); + if (!string.IsNullOrEmpty(keyVaultName) && !string.IsNullOrEmpty(secretName)) + { + var client = new SecretClient(new Uri($"https://{keyVaultName}.vault.azure.net"), new DefaultAzureCredential()); + logger.LogInformation("Retrieving secret [{Secret}] from Key Vault [{Vault}]...", secretName, keyVaultName); + var secret = await client.GetSecretAsync(secretName, cancellationToken: cancellationToken); + if (string.IsNullOrEmpty(secret.Value.Value)) + { + throw new InvalidOperationException($"Secret [{secretName}] in Key Vault [{keyVaultName}] has no value"); + } + + logger.LogInformation("Secret [{Secret}] retrieved successfully from Key Vault [{Vault}]", secretName, keyVaultName); + return FromConnectionString(secret.Value.Value, username); + } + + var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID"); + var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET"); + var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID"); + var server = Environment.GetEnvironmentVariable("SQL_SERVER"); + var database = Environment.GetEnvironmentVariable("SQL_DATABASE"); + var user = Environment.GetEnvironmentVariable("SQL_USERNAME"); + var password = Environment.GetEnvironmentVariable("SQL_PASSWORD"); + if (string.IsNullOrEmpty(server) || string.IsNullOrEmpty(database)) + { + throw new InvalidOperationException( + "Set KEY_VAULT_NAME and SECRET_NAME, or SQL_SERVER and SQL_DATABASE (with SQL_USERNAME/SQL_PASSWORD or the AZURE_* service principal variables)."); + } + + var useAzureCredential = !string.IsNullOrEmpty(clientId) && !string.IsNullOrEmpty(clientSecret) && !string.IsNullOrEmpty(tenantId); + return new SqlOptions(server, database, user, password, useAzureCredential, username); + } + + /// Parses an ADO.NET connection string such as the one Key Vault holds (Server=tcp:host,1433;Database=…;User ID=…;Password=…). + public static SqlOptions FromConnectionString(string connectionString, string username) + { + var parts = connectionString.Split(';', StringSplitOptions.RemoveEmptyEntries) + .Select(part => part.Split('=', 2)) + .Where(kv => kv.Length == 2) + .ToDictionary(kv => kv[0].Trim(), kv => kv[1].Trim(), StringComparer.OrdinalIgnoreCase); + + var server = (parts.GetValueOrDefault("Server") ?? "").Replace("tcp:", "").Replace(",1433", ""); + var database = parts.GetValueOrDefault("Database"); + var user = parts.GetValueOrDefault("User ID"); + var password = parts.GetValueOrDefault("Password"); + if (string.IsNullOrEmpty(server) || string.IsNullOrEmpty(database) || string.IsNullOrEmpty(user) || string.IsNullOrEmpty(password)) + { + throw new InvalidOperationException( + $"Could not parse all required parameters from connection string. Found - Server: {server.Length > 0}, Database: {database is not null}, Username: {user is not null}, Password: {password is not null}"); + } + + return new SqlOptions(server, database, user, password, UseAzureCredential: false, username); + } +} diff --git a/samples/web-app-sql-database/dotnet/src/Services/StoreInitializer.cs b/samples/web-app-sql-database/dotnet/src/Services/StoreInitializer.cs new file mode 100644 index 0000000..c74eb50 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/Services/StoreInitializer.cs @@ -0,0 +1,33 @@ +namespace VacationPlanner.Services; + +/// +/// Runs at startup with a bounded retry, so the app fails fast +/// (and the container exits) when the backing service never becomes reachable. +/// +public sealed class StoreInitializer( + IActivityStore store, + ILogger logger, + int attempts = 1, + TimeSpan delay = default) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + for (var attempt = 1; ; attempt++) + { + try + { + await store.InitializeAsync(cancellationToken); + logger.LogInformation("Activity store initialized after {Attempts} attempt(s).", attempt); + return; + } + catch (Exception ex) when (attempt < attempts && !cancellationToken.IsCancellationRequested) + { + logger.LogWarning(ex, "Activity store not ready (attempt {Attempt}/{Attempts}); retrying in {Delay}s.", + attempt, attempts, delay.TotalSeconds); + await Task.Delay(delay, cancellationToken); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} diff --git a/samples/web-app-sql-database/dotnet/src/VacationPlanner.csproj b/samples/web-app-sql-database/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..b2632aa --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,14 @@ + + + net10.0 + enable + enable + VacationPlanner + + + + + + + + diff --git a/samples/web-app-sql-database/dotnet/src/appsettings.json b/samples/web-app-sql-database/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-sql-database/dotnet/src/wwwroot/favicon.ico b/samples/web-app-sql-database/dotnet/src/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b1d5cf37d81c073dbacd66df3f69d9240359dda GIT binary patch literal 36791 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 D + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `terraform` folder: + +```bash +cd samples/web-app-sql-database/dotnet/terraform +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +# Check resource group +az group show \ +--name local-rg \ +--output table + +# List resources +az resource list \ +--resource-group local-rg \ +--output table + +# Check Azure Web App +az webapp show \ +--name local-webapp-test \ +--resource-group local-rg \ +--output table + +# Check Azure SQL Server +az sql server show \ +--name local-sqlserver-test \ +--resource-group local-rg \ +--output table + +# Check Azure SQL Database +az sql db show \ +--name PlannerDB \ +--server local-sqlserver-test \ +--resource-group local-rg \ +--output table +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Terraform Azure Provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-sql-database/dotnet/terraform/deploy.sh b/samples/web-app-sql-database/dotnet/terraform/deploy.sh new file mode 100755 index 0000000..0c7c45b --- /dev/null +++ b/samples/web-app-sql-database/dotnet/terraform/deploy.sh @@ -0,0 +1,241 @@ +#!/bin/bash + +# Variables +PREFIX='websql' +SUFFIX='test' +LOCATION='westeurope' +ADMIN_USER='sqladmin' +ADMIN_PASSWORD='P@ssw0rd1234!' +DATABASE_USER_NAME='testuser' +DATABASE_USER_PASSWORD='TestP@ssw0rd123' +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" +DEPLOY_APP=1 + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" \ + -var "administrator_login=$ADMIN_USER" \ + -var "administrator_login_password=$ADMIN_PASSWORD" \ + -var "sql_database_username=$DATABASE_USER_NAME" \ + -var "sql_database_password=$DATABASE_USER_PASSWORD" + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) +SQL_SERVER_NAME=$(terraform output -raw sql_server_name) +SQL_DATABASE_NAME=$(terraform output -raw sql_database_name) + +if [[ -z "$WEB_APP_NAME" || -z "$SQL_SERVER_NAME" || -z "$SQL_DATABASE_NAME" ]]; then + echo "Web App Name, SQL Server Name, or SQL Database Name is empty. Exiting." + exit 1 +fi + +# Retrieve the fullyQualifiedDomainName of the SQL server +echo "Retrieving the fullyQualifiedDomainName of the [$SQL_SERVER_NAME] SQL server..." +SQL_SERVER_FQDN=$(az sql server show \ + --name "$SQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "fullyQualifiedDomainName" \ + --output tsv) + +if [ -z "$SQL_SERVER_FQDN" ]; then + echo "Failed to retrieve the fullyQualifiedDomainName of the SQL server" + exit 1 +fi + +# Create server-level login +echo "Creating login [$DATABASE_USER_NAME] at server level..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d master \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -C \ + -Q "IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = '$DATABASE_USER_NAME') + CREATE LOGIN [$DATABASE_USER_NAME] WITH PASSWORD = '$DATABASE_USER_PASSWORD';" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Login [$DATABASE_USER_NAME] created successfully" +else + echo "Failed to create login [$DATABASE_USER_NAME]" + exit 1 +fi + +# Create database user +echo "Creating user [$DATABASE_USER_NAME] in database [$SQL_DATABASE_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -C \ + -Q "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = '$DATABASE_USER_NAME') + CREATE USER [$DATABASE_USER_NAME] FOR LOGIN [$DATABASE_USER_NAME];" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "User [$DATABASE_USER_NAME] created successfully in database [$SQL_DATABASE_NAME]" +else + echo "Failed to create user [$DATABASE_USER_NAME]" + exit 1 +fi + +# Grant permissions including DDL rights +echo "Granting permissions to [$DATABASE_USER_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -C \ + -Q "ALTER ROLE db_datareader ADD MEMBER [$DATABASE_USER_NAME]; + ALTER ROLE db_datawriter ADD MEMBER [$DATABASE_USER_NAME]; + ALTER ROLE db_ddladmin ADD MEMBER [$DATABASE_USER_NAME];" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Permissions granted successfully to [$DATABASE_USER_NAME]" +else + echo "Failed to grant permissions to [$DATABASE_USER_NAME]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$DATABASE_USER_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -C \ + -Q "SELECT SYSTEM_USER AS CurrentUser, DB_NAME() AS CurrentDatabase, GETDATE() AS CurrentTime;" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$DATABASE_USER_NAME]" +else + echo "Connection test failed with user [$DATABASE_USER_NAME]" + exit 1 +fi + +# Create table +echo "Creating test [Products] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -C \ + -Q "IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Activities' AND schema_id = SCHEMA_ID('dbo')) + CREATE TABLE dbo.Activities ( + -- Primary Key: UNIQUEIDENTIFIER with a default of a new sequential GUID (best for indexing) + id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWSEQUENTIALID(), + + -- Username field + username VARCHAR(32) NOT NULL, + + -- Description of the activity + activity VARCHAR(128) NOT NULL, + + -- Timestamp of the activity + timestamp DATETIME NOT NULL + );" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test [Activities] table created successfully" +else + echo "Failed to create test [Activities] table" + exit 1 +fi + +# Insert data +echo "Inserting test data into [Activities] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -C \ + -Q "INSERT INTO Activities (username, activity, timestamp) + VALUES + ('paolo', 'Go to Paris', GETDATE()), + ('paolo', 'Go to London', GETDATE()), + ('paolo', 'Go to Mexico', GETDATE());" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test data inserted successfully into [Activities] table" +else + echo "Failed to insert test data into [Activities] table" + exit 1 +fi + +# Query data +echo "Querying test data from [Activities] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -C \ + -Q "SELECT * FROM Activities;" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test data queried successfully from [Activities] table" +else + echo "Failed to query test data from [Activities] table" + exit 1 +fi + +if [[ $DEPLOY_APP -eq 0 ]]; then + echo "Skipping web app deployment as DEPLOY_APP flag is set to 0." + exit 0 +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-sql-database/dotnet/terraform/main.tf b/samples/web-app-sql-database/dotnet/terraform/main.tf new file mode 100644 index 0000000..6353bc9 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/terraform/main.tf @@ -0,0 +1,204 @@ +# Local Variables +locals { + firewall_rule_name = "AllowAllIPs" + resource_group_name = "${var.prefix}-rg" + sql_server_name = "${var.prefix}-sqlserver-${var.suffix}" + app_service_plan_name = "${var.prefix}-app-service-plan-${var.suffix}" + web_app_name = "${var.prefix}-webapp-${var.suffix}" + key_vault_name = "${var.prefix}-kv-${var.suffix}" +} + +# Retrieve the current Azure client configuration +data "azurerm_client_config" "current" {} + +# Create a resource group +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +# Create a SQL server +resource "azurerm_mssql_server" "example" { + name = local.sql_server_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + administrator_login = var.administrator_login + administrator_login_password = var.administrator_login_password + minimum_tls_version = var.minimum_tls_version + public_network_access_enabled = var.public_network_access_enabled + outbound_network_restriction_enabled = var.outbound_network_restriction_enabled + version = var.sql_version + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Create a firewall rule +resource "azurerm_mssql_firewall_rule" "example" { + name = local.firewall_rule_name + server_id = azurerm_mssql_server.example.id + start_ip_address = var.start_ip_address + end_ip_address = var.end_ip_address +} + +# Create a database +resource "azurerm_mssql_database" "example" { + name = var.sql_database_name + server_id = azurerm_mssql_server.example.id + sku_name = var.sku.name + auto_pause_delay_in_minutes = var.auto_pause_delay + collation = var.collation + create_mode = var.create_mode + elastic_pool_id = var.elastic_pool_resource_id + max_size_gb = var.max_size_gb + min_capacity = var.min_capacity != "0" ? tonumber(var.min_capacity) : null + read_replica_count = var.high_availability_replica_count + read_scale = var.read_scale == "Enabled" ? true : false + zone_redundant = var.sql_database_zone_redundant + license_type = var.license_type + ledger_enabled = var.is_ledger_on + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Create a service plan +resource "azurerm_service_plan" "example" { + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Create a web app +resource "azurerm_linux_web_app" "example" { + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + service_plan_id = azurerm_service_plan.example.id + https_only = var.https_only + public_network_access_enabled = var.webapp_public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + identity { + type = "SystemAssigned" + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + application_stack { + dotnet_version = var.dotnet_version + } + } + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + ENABLE_ORYX_BUILD = "true" + KEY_VAULT_NAME = azurerm_key_vault.example.name + SECRET_NAME = azurerm_key_vault_secret.sql_connection_string.name + KEYVAULT_URI = azurerm_key_vault.example.vault_uri + CERT_NAME = azurerm_key_vault_certificate.example.name + LOGIN_NAME = var.login_name + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Create a Key Vault +resource "azurerm_key_vault" "example" { + name = local.key_vault_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + tenant_id = data.azurerm_client_config.current.tenant_id + sku_name = "standard" + rbac_authorization_enabled = false + soft_delete_retention_days = 7 + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Grant the Web App managed identity access to Key Vault secrets and certificates +resource "azurerm_key_vault_access_policy" "web_app" { + key_vault_id = azurerm_key_vault.example.id + tenant_id = data.azurerm_client_config.current.tenant_id + object_id = azurerm_linux_web_app.example.identity[0].principal_id + + secret_permissions = [ + "Get", + "List", + ] + + certificate_permissions = [ + "Get", + ] +} + +# Create a Key Vault secret for SQL connection string +resource "azurerm_key_vault_secret" "sql_connection_string" { + name = var.secret_name + value = "Server=tcp:${azurerm_mssql_server.example.fully_qualified_domain_name},1433;Database=${azurerm_mssql_database.example.name};User ID=${var.sql_database_username};Password=${var.sql_database_password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;" + key_vault_id = azurerm_key_vault.example.id +} + +# Create a self-signed certificate in Key Vault +resource "azurerm_key_vault_certificate" "example" { + name = var.cert_name + key_vault_id = azurerm_key_vault.example.id + + certificate_policy { + issuer_parameters { + name = "Self" + } + + key_properties { + exportable = true + key_size = 2048 + key_type = "RSA" + reuse_key = false + } + + secret_properties { + content_type = "application/x-pkcs12" + } + + x509_certificate_properties { + subject = "CN=${var.cert_subject}" + validity_in_months = 12 + + key_usage = [ + "digitalSignature", + "keyEncipherment", + ] + } + } +} diff --git a/samples/web-app-sql-database/dotnet/terraform/outputs.tf b/samples/web-app-sql-database/dotnet/terraform/outputs.tf new file mode 100644 index 0000000..7d14b48 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/terraform/outputs.tf @@ -0,0 +1,35 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "sql_server_name" { + value = azurerm_mssql_server.example.name +} + +output "sql_database_name" { + value = azurerm_mssql_database.example.name +} + +output "app_service_plan_name" { + value = azurerm_service_plan.example.name +} + +output "web_app_name" { + value = azurerm_linux_web_app.example.name +} + +output "web_app_url" { + value = azurerm_linux_web_app.example.default_hostname +} + +output "key_vault_name" { + value = azurerm_key_vault.example.name +} + +output "key_vault_url" { + value = azurerm_key_vault.example.vault_uri +} + +output "sql_connection_string_secret_uri" { + value = azurerm_key_vault_secret.sql_connection_string.id +} \ No newline at end of file diff --git a/samples/web-app-sql-database/dotnet/terraform/providers.tf b/samples/web-app-sql-database/dotnet/terraform/providers.tf new file mode 100644 index 0000000..6682178 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/terraform/providers.tf @@ -0,0 +1,26 @@ +terraform { + required_version = ">=1.0" + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=5.1.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} diff --git a/samples/web-app-sql-database/dotnet/terraform/terraform.tfvars b/samples/web-app-sql-database/dotnet/terraform/terraform.tfvars new file mode 100644 index 0000000..e95f069 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/terraform/terraform.tfvars @@ -0,0 +1,2 @@ +location = "westeurope" +dotnet_version = "10.0" \ No newline at end of file diff --git a/samples/web-app-sql-database/dotnet/terraform/variables.tf b/samples/web-app-sql-database/dotnet/terraform/variables.tf new file mode 100644 index 0000000..4de94d2 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/terraform/variables.tf @@ -0,0 +1,359 @@ +variable "prefix" { + description = "(Optional) Specifies the prefix for the name of the Azure resources." + type = string + default = "websql" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "(Optional) Specifies the suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "(Required) Specifies the location for all resources." + type = string + default = null +} + +variable "administrator_login" { + description = "(Required) Specifies the administrator login for the SQL server." + type = string + default = "sqladmin" +} + +variable "administrator_login_password" { + description = "(Required) Specifies the administrator login password for the SQL server." + type = string + default = "P@ssw0rd1234!" +} + +variable "sql_version" { + description = "(Optional) Specifies the version of the SQL server." + type = string + default = "12.0" +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled for the SQL server." + type = bool + default = true +} + +variable "outbound_network_restriction_enabled" { + description = "(Optional) Specifies whether to restrict outbound network access for the SQL server." + type = bool + default = false +} + +variable "start_ip_address" { + description = "(Required) The starting IP address to allow through the firewall for this rule." + type = string + default = "0.0.0.0" +} + +variable "end_ip_address" { + description = "(Required) The ending IP address to allow through the firewall for this rule." + type = string + default = "255.255.255.255" +} + +variable "sql_database_name" { + description = "(Optional) Specifies the name of the SQL database." + type = string + default = "PlannerDB" +} + +variable "sku" { + description = "Specifies the SKU for the database." + type = object({ + name = string + tier = string + capacity = number + }) + default = { + name = "S0" + tier = "Standard" + capacity = 10 + } +} + +variable "auto_pause_delay" { + description = "Time in minutes after which database is automatically paused. A value of -1 means that automatic pause is disabled." + type = number + default = -1 +} + +variable "availability_zone" { + description = "Specifies the availability zone. Valid values are 1, 2, 3, or -1 for no preference." + type = number + default = -1 + validation { + condition = contains([-1, 1, 2, 3], var.availability_zone) + error_message = "Availability zone must be -1, 1, 2, or 3." + } +} + +variable "catalog_collation" { + description = "Specifies the collation of the metadata catalog." + type = string + default = "DATABASE_DEFAULT" +} + +variable "collation" { + description = "Specifies the collation of the database." + type = string + default = "SQL_Latin1_General_CP1_CI_AS" +} + +variable "create_mode" { + description = "The create mode of the database." + type = string + default = "Default" + validation { + condition = contains([ + "Default", + "Copy", + "OnlineSecondary", + "PointInTimeRestore", + "Recovery", + "Restore", + "RestoreExternalBackup", + "RestoreExternalBackupSecondary", + "RestoreLongTermRetentionBackup", + "Secondary" + ], var.create_mode) + error_message = "Invalid create mode specified." + } +} + +variable "elastic_pool_resource_id" { + description = "The ID of the elastic pool containing this database." + type = string + default = null +} + +variable "high_availability_replica_count" { + description = "The number of readonly secondary replicas associated with the database." + type = number + default = 0 +} + +variable "is_ledger_on" { + description = "Whether or not this database is a ledger database." + type = bool + default = false +} + +variable "license_type" { + description = "Specifies the license type to apply for this database." + type = string + default = null + validation { + condition = var.license_type == null || try(contains(["LicenseIncluded", "BasePrice"], var.license_type), false) + error_message = "License type must be 'LicenseIncluded' or 'BasePrice'." + } +} + +variable "min_capacity" { + description = "Minimal capacity that database will always have allocated." + type = string + default = "0" +} + +variable "read_scale" { + description = "If enabled, connections that have application intent set to readonly can be routed to a readonly secondary replica." + type = string + default = "Disabled" + validation { + condition = contains(["Enabled", "Disabled"], var.read_scale) + error_message = "Read scale must be 'Enabled' or 'Disabled'." + } +} + +variable "sql_database_zone_redundant" { + description = "Whether or not this database is zone redundant." + type = bool + default = false +} + +variable "max_size_gb" { + description = "The max size of the database in gigabytes." + type = number + default = null +} + +variable "sql_database_username" { + description = "(Required) The administrator username of the SQL Server (set at server level)." + type = string + default = "testuser" + sensitive = true +} + +variable "sql_database_password" { + description = "(Required) The administrator password of the SQL Server (set at server level)." + type = string + default = "TestP@ssw0rd123" + sensitive = true +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan. Possible values include Windows, Linux, and WindowsContainer. Changing this forces a new resource to be created." + type = string + default = "Linux" + + validation { + condition = contains([ + "Windows", + "Linux", + "WindowsContainer" + ], var.os_type) + error_message = "The os_type must be either 'Windows', 'Linux', or 'WindowsContainer'." + } +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "sku_tier" { + description = "(Optional) Specifies the tier name for the hosting plan." + type = string + default = "Standard" + + validation { + condition = contains([ + "Basic", + "Standard", + "ElasticPremium", + "Premium", + "PremiumV2", + "Premium0V3", + "PremiumV3", + "PremiumMV3", + "Isolated", + "IsolatedV2", + "WorkflowStandard", + "FlexConsumption" + ], var.sku_tier) + error_message = "The sku_tier must be one of the allowed values." + } +} +variable "sku_name" { + description = "(Optional) Specifies the SKU name for the hosting plan." + type = string + default = "S1" + + validation { + condition = contains([ + "B1", "B2", "B3", + "S1", "S2", "S3", + "EP1", "EP2", "EP3", + "P1", "P2", "P3", + "P1V2", "P2V2", "P3V2", + "P0V3", "P1V3", "P2V3", "P3V3", + "P1MV3", "P2MV3", "P3MV3", "P4MV3", "P5MV3", + "I1", "I2", "I3", + "I1V2", "I2V2", "I3V2", "I4V2", "I5V2", "I6V2", + "WS1", "WS2", "WS3", + "FC1" + ], var.sku_name) + error_message = "The sku_name must be one of the allowed values." + } +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "https_only" { + description = "(Optional) Specifies whether the Linux Web App require HTTPS connections. Defaults to false." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests. Possible values include: 1.0, 1.1, 1.2 and 1.3. Defaults to 1.2." + type = string + default = "1.2" + + validation { + condition = contains([ + "1.0", + "1.1", + "1.2", + "1.3" + ], var.minimum_tls_version) + error_message = "The minimum_tls_version must be one of the allowed values." + } +} + +variable "always_on" { + description = "(Optional) Specifies whether the Linux Web App is Always On enabled. Defaults to true." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Linux Web App." + type = bool + default = false +} + +variable "webapp_public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "login_name" { + description = "(Required) Specifies the login name for the application." + type = string + default = "paolo" +} + +variable "secret_name" { + description = "(Optional) Specifies the name of the Key Vault secret for the SQL connection string." + type = string + default = "sql-connection-string" +} + +variable "cert_name" { + description = "(Optional) Specifies the name of the Key Vault certificate." + type = string + default = "webapp-cert" +} + +variable "cert_subject" { + description = "(Optional) Specifies the subject of the self-signed certificate." + type = string + default = "sample-web-app-sql" +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} \ No newline at end of file diff --git a/samples/web-app-sql-database/dotnet/visio/architecture.vsdx b/samples/web-app-sql-database/dotnet/visio/architecture.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..cd408e92b3ccf8f3a949f79c90e14ff97df99418 GIT binary patch literal 211016 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�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͊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 +Tgr3*CwbFX|FCCDavR@rhO$w za}hNS+e|3DSWH|5s%RenI+1UrKBHwFMitw;7e2oCq{MN>gSbw( zv>G^$Sil^jljCh{O~={nRIu79=msx-g0k%+$O#?8q(zhrEsSOcuG3^K+3g%7a|y|Q zF;&-lB9!V<6`={%6^R-AY0qqt`TGbDo4fy3bbS@yNC}%AhW3vbn9i9(C>ZxBie$YQ z+tZK?Z00CsfO~R6-C1G0(jN>-rrP|2Jo@=@`KUy^;rUIlm}s52aGZ}uuFVV43GOux z1KguAXRo-e(Vgs=PeH`3F<2u)beSlbr}`L+23gkb4Z5RORV@5+#~7>}>N2XX%auO0 zcA~iIm;L-kVL4ilV3p`Txdbk;?9GZLbVIap5b#XI5lM3N*bSxE8N&dEyiSeFQA@8c z^AQNV3L;SPa_;*a(NYv5pPJ-v1(G#QQ;dUI5h`#T-Om|>Lp2Zm=iEiO*@qXynu6bQ zyPavmz=V58G+TyanI}D+U-HQiqSZibZ+@_EJA2kdBkFz9x<_8W2P!BiC6-dkOHd>3 zMaJ^r5>~`IH`n&sBy?EY#eg0muh^7yjh8D37AsMOK%tOmxCnoBA!XYS3fx)%=W$Ga z9~1n&R|<2uF2jb{5-?W_k0ADin$iaj7CNX_4z0!)R`emVZ;owLSBq~}+JOu{BWR-- z?yJ(C5K^UpgELVsqG8NA&u6$PS3us!L9wGCSPEl8Uu;gUK{sBbuCPWQhhM`=zA_&9 zKxFc0R74lL%MKb=xjY&jC8J^)hg;wfN5q#iP}C6sZ^D=q3snOO>V3Ie(IgoL3c)cc zO(il~eWBJkdZW35=b4X< zmJ0+dc`_u=^jQ8BuT_nAo$Cyr*C8Sa#{k!)%+%5?>yEnp_TqaEs9503g!46V7td}Z zf!=qZmJEQG?G&Q+sBC21xIBKuSUz|8sK5h4RdLViEJacjjBGNL!k`##88qs1)<2L4 z!zu_w3dyl#KkbLhB)-MkX0NBxxgs91;%I`xM*Pr2S~RH0_3ICgAAkB}Phj#q8Qz=4 z+2>M^bKxWq#ag&Uyt|(E`LSvaei}a^`XOXImdqO@u7^R3pm^{+)v8Z|wVdgCW~VR? zC&QS+fxj~+l_kYFyR$sLI{)S+GEVP-#p51do^G7c(gtaT_G>~|cb}dW4xb2t%VSl{_&7V0l-m2<39uJvr`?b1RGoi8-%d%ex@ z?>t)H2nig~y`>N+)B0pre>s9K75L_e!Jf92CWMFr5=2xPhu5TbYhmX~aT(6URzM^` zbbjX*#^r_a17KtLd_JC|5w`=t)vyjiD<#0|D3a@=TMqbSwU9cO97DkS=?wYS`f=rpVdrJ6-unW>VmmJCcPiC#m-DS2#bDSDB zr_P6nw0Q-f{ccdX2yf-px))wd0gm$o{q9;L8?ZL9&D zMfJS$2|e4olp*GdIaC4b1X^eF*icUFU>%VlI^IJG)k*TijRKSMfdn5A= zoHY%y+0@4o!Om_59(3i7l~gH<^j?G+h-v^7j>?hd`nKam57O@f=X@qC8k z@N~o~n`|Z$iDAaOw75|oSPwvdKyz7EabM?BNTomR_jP8yk4{R&HZ7H$5(2bQpI;(o z@+SvF3{iyQ5t=s!I1u_n;~Y>9_TvQueAGQwux-vF1DE*mK<3Cxe$=hQA(mt%61llp13J+-GESxegsk z<5cR}saG>+^vosfvY;RO)}YP_v<28WP(vfDXoFHtG;GG6nkh#MvarbPXO`4=@#<=$ zZ>HxHeId)<*0YgS-hrr&ZDj8d5L7DU{O$}!pQ2kKDlxu=QE|aT;*JO+CtR+$2)KYf z-ribWBB8NGq&(=AuOxxna|h5S;oi1-HPW!}qr&z)5%9&37h_*uoD--GG~-z`1-zRe zn8$5cW6CfUc7!EiSFyS{ULJ6kt85!SaO{MhibCM!jVZ=`70CgF+JF*0@46s8JU3*( z({*o}H@%v6lN+^CC;oWaqvore3@C(vBK*;Lw~lAhAYevK4NRTd&T~;?PZ}2w8fQzyX6;);OQ!$&c^3 zaA(f)+cLWSfiM%BlEUEad(HLCY;W~fs={*npE{c828q8IN?#-h{U|GR3W;7Ealpm< zY;@OVz`Wt}`o6pze3w!I8ytQ?z2%Y3c$8YR3g#z@WG-e()-sMT$zgE$)RCYr={7XU zLXF^EUj8Y0eWF8p7v1|%E2Dh{Ye4Rk@obKC$QW^;$ykNk;M9~{g|W=mTl_>_ zYUNtj6jHlDM|5i8)1it%bY`Y$b762&e5raNZX)*-KMF3H?c4Ik0* z`3-PWbx)0fuBX9DwJed$`t!;;EFfS{6>|01;d5!Ho{7lN);xOK(nvTIG*~IPjfS-3 zk}FH23cB~ywaw0P*3s(60F&|om*uH^yX%mnGe&B?#~%Y8;I3)2V~qvtW>UF(p8@K!H(b_7@ZF)h<&er)~v#rkDCAfa#;FUKV#9w1Z$s# zUVX@S=m*3eN(zWXLriQd}sV;Ii>sOG&p`n3WO0R>?ZI=!LjAfpP*7}GkT&+ z)n#xB8`EMA8!2t{=c^b$IJio88KIv-!mFnn2UT(^R(qz|3pflHX zHjfTRB4D%fTKt+C*O|t3GHDmcHmbZrO9Km9egd@?g+^7UVv?i?=|z&;oDYC=_i4kgoT&vA9Nv1bsN{7}&`=6nz;z~N=3G{>`##@iudD?a z_t)sJIA%lp5Ndf@?pSxI#Deg5+js1r#uDSpA4}!@1$%nZN;$5ZB;3CL_7;T#Q*pff zq-hA)0RYhc`z>-dH?c9H|JUb#g}SiU95+VqcvWA)QMP~W^QjcK*h|&Bq)>1kjUYlM zY6JiP``0&>eTJ*>k*D;GNq-UX1_dz>D&)&*S&{Dtu>g2_zFlYI?OxIAqm|tvpqnI` z2`hRKM+s%dJV+)^h3;R;lC0$`s8M9(vdrw~yRvC-TeGq)1L6Sl-&ZN=fCjX5I}tm*jp)cJxd?WU4=$mRlu?VmTo=aw-afnU@+Z*R0gnl-Pu`Wmdth` z6=3b2enb~gG;sms0uL->*Iu*rzbw1w1>6W0czE{$xxsSn{uJfy(=Tai{`$*+q$bLQ z@?ES|e{7je25MO<(T>KENQ<3n94cpUmWOlJ{@(F&eI@K7Lc`4midDq4F)XTg zyl_6np%3F|xDXTu;tfrsrwBf1)SDAd7`A4~h$1^M8~wC=cVz*C)$$O#VL#AkIy$1juTvCNNivnV3HQih z1Oe}4GB?q{A|Ppkb4ed7ohREpP(gIjdJx&{R&?S7pw}7x@2?xb&w}g@NOxi2>=rKc z?U@5>S0r{8hNNx%HuTBD1bdfE^#|ig{k`8{e0oJ=fxstv9eA)OXpmBz_T+hPUC^6T z5nfUQuO5t&@%D&*#{{r;au~Z&;>kpCndo{9lioB)qohCFyYUQ@Qs7Zn?q2_4?>G$r zW}c!uw3Zq4Fd(`+kF!--kLh=Hp^bHol?T2({}q}LTtQk`7#udw4~a=tqm-;_j%MaS z`tr~^dUNnw_^xC@S*+6P;w>2hPpTEEjq|bj_n~AxKoieB1c(iDJ?A%tyT|we7X*KO zJVfCrb7RJBG~xlHma2K5u*X4m&KwZG@KUDu;psw?{6L6_YVWy2I`ke1o%D9*#DzRe z8$JQk?UJwW(^=;57a*#tBUjOry#prP$PJ;4?Q8dRdhKS| z4bPEh(p6LUL@SK|l8oYO@c^re$Yq6vrv7EQPz7%s|u zg~KKNL`%N(0@6!;lvShr0?joAHtG-)Jvh-no7L>my5dHhVT2w4Ub*GhjsoJMsSbGH zug<%NmSS(@v_h&Q_QCq~&^}0I^~6d)-6_orSXh2h`8UQ2mX3jx9){+d?u+JLsl+N` z$umqC!>f~8c;m)Zq!+0L2HT4P^Uz^2GT2Xo+93(@iYK+Am6{loy91d_=8<0RmeaZs zhAdUt8YSi|Ua=cA)mhk#te=`?c%ssXMH{Gp1}0dyTcpp)WtjG#Sl(`J=RlH0Hi#u3yc;F3(Uhve-b1+SU-y{f3iL7#IVTLb<1jU z_*x^FA`ts6)4LI00;q|2pfEn32oK9kW3`f9MBX_=A*Q>^ox?3_`#^G5Eu%kE{`u;G zfZ5N-utj>`f?2_C9Q}>3P;|{Ty!a;@87Vs_nDocITP|ZNmrG#DgRkt48ZBaK##1@% z2u{0^18W+l_6sr_-D8O+8~P3Wq4ssF)3 z+sbI&T^m+(A#at1NRl-Zq8TfeaLpG%vKsj%59>7Ys-F^!Qxj0fH`@e3`u-`ohEMI| zi5cyyZr{}8t`plQ=?2#n3GH62(qO<&*N(zI81x90G9=Ra{;>%mY<){<5xVk2V?QuT z*`#dMUO(AN0i62F*S_Q$p@!h>uBZWjR&wqx-Sy4uXr*z%8Qr(N5g2^@Q%8^qg;SR- zqLgzLo`yKmSv3g@(iz6|oHRi66E^AEi{;*Jrjz z`~+G-iR6Awm6o63QXq|HE!4=5<1me9>5*gtwo5_Pd86smrMc=4Y|lsOrR$LBOUO*M zU4I5_F>DQMZw77d)@<5lZxqQ|v%k7JX@}4Gg*YWd?t5fuJz>n&Fae znVvO+&x#YyE!<|L|JvnhqeV zka{?-qSi3AKEy{)7AfDL<+@1ywV-Qsp0MvNUNvqF8lTOn?GBIT2dOvw?nGg!{+ppB zBHPuc(7)j^yd`6Fp`X!MzMR^gx)BFy++O=}lwHI8=Tt##e#3FiAZ9u>rvZf0d3L>s zCI&(i0uHQW>_ls-)-!XHPcbr%Z(%bJ;|E0gwD3rIBR0fD{o+v|9$6c^^>SXM-4O${ zZT!;83$y6%maq>4*&WeN9*hp|RN z5%OxUfA@;AS)3sD^{I}4yw3Y``{@(fg-`KT^{7y#rB?I~6u1%PDW8C`i zjM@)f-P3~5(*DpbbNO?%+ZUAlD&3%syhIeXTi0C)!{hf8nnlK3PQsB}Pd}wH0Des6 ze0lJxcrhwO`k?OL;j+%x_Ny(we;b>y7&ugX{9#4h|HO*_3QS!7J63G`hZT$d#fp0d z01C})P524pCx!Ry9%K52X7&ieFr-?AO|C?I61}-4B{$b+fZN~qtPyQt4D|UlxcBqi z2`Bx|iLwRGe1~?`zh*o#ydZ_qUO%Q|oUQ?fg!K}P<(pso!k&Sh zRe%Rg@agP<$<22y{m;5K2TID*%h~N&1$3VFya!f%y7XGW1d<@_7xXt+Rdf}tR^b#} z)<&+ls*gcXcmT_HQ}CwrcH6Qg`;c>?^sf3gnyabcK;`|Z+^fLpJJO4=|8>zLUMCht zw%`G|Kop16jn`~`F?F?yk)5EarguL`3yT2#%C2tdt(AvXG6t`XLj@1kyM)k9cnZ# z9{j(fBAb@~#Bu>+qGoDpqn{l}Fvw^65#SFhVx%aJr^HRzhms-i>Y#|bc?740kSd%= zva(Qm3cCx=isI1v#4=T4qs5;?r9{ zSuA99^Tfn=sk&}5QE_u;V=39nkgPHf#E;Gj!#K766LL0Z~S_87!CAymZ}S80TlS8#A)W* z(YZ_NIW6uV>rM?Wg>LqGHJ;?kVtb=#nA$CZKT-DayZGOGv!&qc!UWB;Q}(Ch9r}_hmPc^ zJfbE@hPT3R=&YPa_tm5-YLAw@@a6!s8Tw~hmfYV+S@muIvqs46Q?All44f{QLo zusj>dq$ggsZY)+#H9;-xw-wEte^EUE{7Spvx`KLDU7IWj`en1X1t;@4@Y3QOH0*$( zB^nn1!0wF8EoRpSdy%1{+t1jrnrHr;gwqU6?VEERDw`MF>SU+*MT`%*2c*{eB^bm- z#2$;vu66FFYBC;*GU?c0Y{U*b0;U}TUIvVpPXJz_C=Pny94-VVb#Pi_vp|@j4j}rD z(fySyoR5`gvXRJ(QCbKt1DMwW%Og9;O$>U9jztg1R%R4*;25Gw;?=<%+EeAAq)x?x zMCzx6t!*tG66jN8uapFN1d<()$_))IGlWcL3Ja|bs%TyfLD6a{kC60LYN7A7G+bDZ zZCajTdz8|M#^|el10`N_Uf{UmvdMJR5A7@(n`Qe$U|+IdW1m3N=N##*huEG}@8*Cf zwKCC3!K*?;1xy%c2^^tJ^BANsT)U;N`D}9BgKZIM+$r-fQY=RN@1(eRM`3tA^P@^k zWwDoCM;%y$A#z^f-=li`! zrTIXR2r{%EAQy+KR=?W(v4gnk$tY#;dq4CL&f-Eby)jg zKrQXeqltWq47MEO=or+lV*^WwMk1@Y_tKyJi5ZPmv&f8;p$FT)L_6G*Bs7OH8iHXv z<=gSQ5YXe)N>E2bcM!J0aXO4T)9>v}=a3&s=c_PVK7a^bW-K6ke<3H1c$53J1i za~p(5wAasWQg-I$wsc?4=HYNCo}EC)6b_yLkmSD^>@YVHD42-W8gopmn@A&Bv)+P^ zC8#d3pmJQZpZ^t(JsK$_Tm5F~e9sq1xvvQN;^or!uNNlD&|S0Vo%*ZNhak)G6ejH3 zmtZ5#V7+r^BFSpAplh}fsrh{oH*Tw~^P<0Y*?#LAS(TVH zHo%Q5@P8)7W&jplHB?adG#KD*Z3k3ny$66IVRrRon~4;a0#pHI5fpGm_G(GG2Wv=1 zkQ9^O2X4dmfy3Rez&u!s&hfNrODX3=U|UVN6F@fzHo%o50o39RFoH=g@@c4B_P9;W zc&EytsO19?HR@;C&Cm#l%@<8>22~2nf+Z-=vr-)SdipU1JGm}22hWeW@1Qe#e%xYK z;88_!9ot?jGp>4)p9AXk5|S@n?ujq38{6@Cb#*5!Ys0lUiUT!f(stC0AC6}7AB;un z@8YT^&Qm$}1+;ybE7avB5rH?B_9ACzvrO^UqV`P!jid{8C|w@JNts`J51soQGinn- zBBzoI;SjfTM1p!pY^_!EdI8`Lt)vG@G}HIw8B$qj%gw^15XP){MD3 z+f;p5u>%wD?*?0^?_Hs6aVDRoK3|xO@ceC(Xe(WTQkboz&w&AVg@kbTZfd9I=t0UsOP8z9b?56omc* zpfBccE~COBp%q=n?UoR%ZXDLjE2>-DIW^A511@HKn@tZX?f*rJu0E~TlVKgM-OVmv z?6Yx?d_rDeg;w1@yFyB> zk@L3^iFDk8A>67E#@v`>$evL9ssA^i2=>1Q#iei4@W!e3op_UfKrspY2Nd_~{eM95 z=m!*S{sG0W#;bvU4~iVVAwJJPph)2&Y1b+YxL_9OA=8T1c( zR~mzJ!pzMk#|fSS&!Oo30XY6P{H!7@LYhx&FZ{0hz!JcMS6i68DywRXwl@d?-MfAF z-bMHJJ~4nf6JYF{RS*x4bonoCfh80C7K-)i6Qx_+52-j);#-lKf}hA?i2hX{cY28h z)PDoTn~d(f^#2Bm-Ue%l<%+i;=7{2FKJZ$L&OyVdfSis;i*_ZGnfy}rK)9&6+&b|1u1h`}-sa+D{%r->!VV0sTS;!si!M7yap z>pz?w#Q;6cQ}ja50s|fv+RWTI+x3c^p4Qdbbz7-}@ie46u*LRkQsa||(4?LROG-PV z6}9p`eut8t(Dn0lzzc&7wG<$dE;qSsiDd>66^m4hPopLAL?9_l5Jw5jvXN#q%w#4F z(Nyz(Gs8v*MA8U%Jjqis;uWYyAfb(0yL+tn;tAb9m;6$! zJ=W3LQabbv9PL$mUpu?fM1LnwPMhO}J}L8Ym<#z^@8uSdNDA%B!^MBr9~=2j6NTvZ zCxzy=0eW3+yYI~n)Y}C%-m6pzpy7Gq>RoZOkJYHHiVTWY%wzjT0 zBB`;8A>TbGTtJr|ar%~FC&m9alj4Z?Qro{s@#KFbQsnAf%l*Hf z6rcYeB1N~S|1XiE9r?c_MW+8#q&S8SWI*xxYQMQs4Zo80YQHi~t`ER);s^YxQA4B2 zns`QOt{nano*)T=vP_HII!boML&VW)^@l(oi{a#kde9D`zx(2bR>UL&;V~9rubo(= z)ha}yJLwlwT@8Ys!w*HaE@eHN81B5jw?DAE_q!6>dI@Q5wqC^Whm?J>3m4iff5y^u zyratf;dwDPMoj}1;b)>1pCz#^V3#|3Jh8$5g8p|YdKx=XO3$Ba3j?|T%0C<187Vm0 z**pCtpIvMWZGTx<)0xVE#2Ys_ zxHV*~Z2M009y^-hv%BFJQh1p?UweE^-#l~gymR+B`JQZ&h$|+;dXH3_NlxNS+`j+# zeVZ(?MkacF2ew5f7SMQTD0Yi_!0kwSe-Em66jO|E%yzxoh-y+$!LDSUu~X5X=oRo3 z^W^f3Kd&rqmGIQ?rC1pb8+b$!;u}YLwW>laD~gKvEGIjm)W3 zJQ-m_>TgBzWvg!P{{>hMG)ooA1VPxBTru!q7SUVltlA4-2s4rJE zZ(v}+wxy%4?rsy+NtJ~yUupNSc~s$auHgKG7!e7$#O<6H3m5m%od-eb)hoy9jp%i!@;Pt`5sANI z%W!iuTh2_HU{x$S9cSGyHJ7jFjIW1x2uP0|Ww>WAd9JrR|=6jiuqD=Qd zgDJe=H?c+T@+A+m#oA({(raNTOhbd;nkl`t-Nr6fXX{U0R{Y=3_^O?#xGH|y)Q4e~+b7!#3r0giiAoqS^0u8dz6&%b%VBcejv1mb z;NakxLz0l`68nN~S?|(2Qzwfz*$Q^03VzN~k8hr#Tr+vV0D5pRGe6F$U#CUIKG@x> zchRCScjT={6dC}j35l1iEG#HPVKgCQ_W|3ZR0_&USGHcWsDE})%C61fErB`dLSJT3 zj4?+Hc7~pE&6F<^)?iKe@&8tyUDY2_=VurHjnN>hCR?j0D=X{j(!Jq>tVbc60QX#z zGGpERQCx^feva`Hf2QHJC^}`f>8KPEK&y-S0qSD`JRRKdZXNJpz`YV9GDgLCVX_AN z)+=FNczk?xadwu-BN>gY5Fi3t&yUu_E+Rh~Mw&;b*DGXLUD$U@bxT2inNEG(xW6B;Vk zAJpy~D2&KjF0vW?#ulhrZ^$h$m<)$0l}Idztk${dqGppKYOK#e50H%CC$S;sA7V@# zq^6shEr996kzqs;0@kkGd%HT0-Q)h4TJFNn(fC!392OM!YM_U~RMB8(fikZ6b3hLEMQfXx+Jtk8f|@CS*=i0J7|jIv|&QL9TEKxza#w^J!fw?}YXfns>7cBu3;FunKDFSjQ;{lzDkn zFiM&O%(q%GS||Rt_V-cA^ey<(mS;&NiQyFjOqlR?Pc}S{XXiufOk!GUpwhtYVY~J; zIgXQutIyQDn zPJxDT^QIFE;?3I*K5}!KO*jp}Ss#mjFO>$QV90tAbwk(1Q^W9lsemW;hevCdY$1Sf zn3W1(e2Hys{K-yI9IGoE9>W{AClBCg&P#lI7c}pkRd9f})5x|A@Cg$8JW?+rvbFY! z>v~qj$0&^^f%|mOkS$~?wURYNy*Jm_mzT*^8tq9jGg6KS zo2L=}$lrs?NS{Az-CnpzW@#RMl7V?_-pYlE&nU_CCf6=EtNmS8Kz9LffUOxxVi>?I za%_fXT*qynj!>h&l5_9PGj>pu^D&Bw30~n%r94KWLrr94Wa|;i^5PF0hKI*5uMS2nNi<=+fIA0iWTv(qkCUu0I9w*eT0NJWu4mir&NU+5W85ag zxF#87wU%v9D;Jk0$bdR3O_;}!%mm4NmagC2ZrA5a708Grs@;Y|k$;%Yw5*Xj+Kh1r z8q8*nkB_UhTc-0XjTwWh9JKJ&rKF{y-=d{W6Aa$|o~ca&lZVa3?MJ{T-|4D&Y+hz^ zI*m_E9H>BS9~m`N+l>aUMg1w1qD?MDKl9k)oZoS^Uy}AaBN$J z3MYz!wnmA`mW3LaPIe`$(=#xpBFUSOO@;^&a@+A?2ZxP-NTg!_6~a^+Y#7mKNM|Z? zahDsR6NSM9??|Au=Xl0k06DWtrIiPNuzC2CaOB{9bSf(C!#+EENPJ5!GinH3JY zupy%mMm399f};}{aRmz51q)(t-#tgTt&CrE zA?9N?66h>)nxz9@@?jGM`+|QEo)undZ1lJYZk^J!BO|dIE~#{jFzsd<8aRR$g6u8b z6F{%nyCr3!{uLMmk|4eLh-;px+6HJ$VqyXfS)=h-B1?iXCVdqbF_k14S19J8ho&YV zkc3NHa>>{j(m( zqimasr#XU<(|Pb{0{fbDG@^Ms@XJrVm_afI-ZeaIFdrZZlV|Nr+pR&n**c;EppF(k zYPR>I{UqDV^?K7nPMB6(gOrriYp1rU%Qfty75XF&#B)C~`$Y(h14Ax@4VEFt^PCc| z#RXR&f{Z2FQj~-Oeh?CD>Zh#OG$keF&w|2)+-|jQ$F}#wlyFFeCzRj9`|^z#_*>-# z=dWb{2*o;-&g=GzR-+;TV^J>Hypck;%T>UxO{$1>a{0lLH;u2;psjD6&rxc5ex>dX zcjw*jGZ^H@A&qH{q3XlS0g>njkW2?~Zn?zpP)O(s)0557SrQxEfdO!-s|mlyar_g! z&7PUyJyeaM`glnkdyLB@a`{xkADQDWj=Hvt+giN|`<63uT<`dBt_#e?#f4kfV_a4U zw&Wn{XA^}nmLWATbHPEhn+%GXM5@q1Xw~M(FseYPCJ>og7KGCU1`uLw!t0S$K#C}7 zAM7_|CiZ-@h5O zsz>nsa9{*q)~#x$#>UpZci5c`9|l#Uei3O1*_3Eq@jKaODn8sDFIWBa@OO!zc)X_x z9SY(y3veG%OVs?ALGWx*iN@S3bJRFm3+& zY;M>{%kr`->dBjwK+c#pG#@0{mFNm!yCp3twQcP-NMwGkWcCq?957rTwa3H?k6>Ar^;XWa6) zTz~Go&i$$kKPby!3R#wlqrZ@BetUcxG#y4j-ln9q?OB3 zsmK8}!Qg=tM{_&8s3j>TrPLtx@XR+3*U->zMiKxmd$(VmE_x;5b75{D66CL`$$)~2 z5{mAWx24+{qU6dxe98GaCq*80fb$W-b#K_0Omd)`u>U|nVw!O3tIVehY79)tMpzR3 z6+ws(`6j;HVv=4F%;J_X;b$gDYJX?B8HWR5aO;w1Z`D3@! zm$&VW1mGXeEqU*mt_3XK_cs8T!|77x7TwD>cz#b;9TKOX03{_4IJqa)xKSmzXm zJ%TOisIV=o^-(tR9;C%A>XH~2!h4;&t7oi^T`;2&#$^B#b>z2&M(`C0-~FJE)%jfC z_q(zzOIg`n?q;3ZXlZ#>4RA^`;3&j)NxkOte&2caHz8?X$CF~RD#J)sOrcwAItqy= z&`qLPN|7iK=V6e2Xm;9p$?jjJfqi^T4s=U2rTl5{P~hxyQA;t(&Sf1~=9{PGInV0M zea(|AfE{UZL!=QWyLcJ_!C|4Y9-+IQ1kuWk)1{dAI6+wMhlnWNz}E5w_#W$MhqBH# z*hDEc6~923f)lcqo+&aatDrR&fCmy`wy2Ai@N8Nus|-2cT8AR=5DRPbTBu$q7%uE8 z;wM#EhqClErsnJ}?J8D|gfS9e_N$YYe9Nw-#A|%CZdtOx3tp8>OeC<};{;6p!hp#i zo?=CXItzOmDk7WZP61>ZK9DLvi7E<5ftrYWZypliFaO)~Q|H@F zl!X<}c@PYbrPSxmZ91ubdLo^KgAkz862Prhz3FHYpQ@%ZBx)}~1@g@=g z5p4EQ`*-+q_5u%bKhMM+uKpUe;gj6&$XBDa_95-sJR>YBbgkbMD9{Zl=vl$OrRi}>I7afIo&M{)j z6twWX+>MA|&5u3N@9+>k03M<@@$DTRGH}O}UNq4UjeKBsw}v#1!?SP{cV&cso8LTH z3k9E~ISk3)s!#NnPP!-?Hoj8zZZFP9@lKW}3gNi0N0m*SX0X&oJ`y)pP0g7=-fT1- z^q0C>|M>2aCM7$BG#GaxV9PDNqu=CnLR-H{Y|Q%BrM6Dt|7-UD_0}vCY)IYwqxEOy zp=6;+x7V)|x7^)_%KiO9MycxZ8=>_Y%*B@)mk*0rP?fc1qLApP9#;s47*xZ~5Ah-m zItUW=+h|-D`lj-kOP>PRk#J|T?=I$}Qg%aR$Yo+(nF;f&J=xJN%b%rnCMwOofgj0F2R?ldlRRF;XpBX(H^Cl5S2VAd z_^Wg@+Qc`XK~Yvy|0P#{xI;XA@dN?c1#L?dTn%3q*UmJHu)XM>L$x}lVFKqTh;nSU ziW`llV)X&TKDf*>J*L>ov`;iA^^%`Gh)}F_r(t{Ge7Ui_1A`wRWQrt;uyVBNp%4!^ zCwlkYV{i(hLN!fD|EgNAN`|7J2C_t+bd0nyg5LIG3P*NF;{&(FgPAgL-RKJjq9m={ zJawHV$%9@8DUo&Jocq7A_`=C@Q_cAYDzkq4t1h(JLD~Bj(nZP;y2*96Dr?^^7#7aF z%r>jSTsU%_9$oE;mbm}9XHk~T-vTDVY_YkAF>MmG$ToV?^sPoU9nYs7MU}$r_eHTfd0Xh-u4>Yd_gcDV@SuvEq?4$=D0Ch%S{TQC1kBS>>o&Yol(K z7MG4liEl#Y0|-Tw%lU6%f|eYuv%1S#>|a^KZn$`O>0>s2f-KXQ2Kf5x=%n zu%;w97Xo&q`ggVS^yRaHlhryRrd}Mqcu5kz&*?^YXSJIkBzBSPHnIYR%*f7m>@9_-w)$5D5IFFMUcwNz1I_bb=C({hCp^7F;r4PqDf7B8VHi^I9RA2FOZKRULOja7Yci23nev`u1 zDfhQ@$}Qul{Kn-=KwWFfnbk6EFvFjmNE^r!dj` zzy6M}j2-3C7C;g-!P~j#W0RX&VE6V>zsHc$W>ZazY+ulKjkH|eAc{5eyJG z7`jOiYLT2-Ha7tg=pdqI`2*u?)eNsS6)Bn3o~8CX45V9*W=)uOGsOMIiRcYRdk~=m z5w%tCoY-rb?>~Uyo26E-yW^Dlw+9(E8u(5e`O9phWugOgg5|QBhPLl~TM>N1HVjm3ZiYgm02I z^3v+pg0wpUD*^gPJ}ru&vK5%|&nH;TAA+@K_Je_uLqq+4z*E>5Kv!4ob;>Za2?}s5vN{9foOJH@tCm#-A z6a!N(2nhx@P-cR%f?!}ZQHak5fOj+)yq$!mBN!NQ_xlID*IY#z3=H>9QbbV2_3KIc z57!SS9fNoBzbYJ*B}Y6_TX&)CD=^Q5b9R8^4>=>Zi+CkZ) zmSZ_XtJ@T)P`6XXH%i*($THGc$2FR#v6-iSN?8F(ej1jUssE9Ao4`E5Ejw$90nxU; zcNL5pn5Xhzj}-K@!Ww?uJ}p742^aMAQ~z>?bwQvDOy`w zOG`_;xHQQX)oIW%B#oZk!9sxFt8H_GI$Yw=r;#puodH}-as#N}7GXC!z_7Aj zcSjOvRaI3ZA|i;0i0~s|+JrCM+v8Zbz1G!_k(Rj+#B(TAsW-#y^uR8Pv;%|;OiWCK zg@u3oXcf!rW^ADup-C=C|015Yq?7jaEyXkMwv==a?u=WT{1IoOT za9vx4h@6mXY1bVNg z&5QyxEZcH&LSy$%9ZwwGL*e=3#dr#OJ~MfQDVxtu9Y^;(YVUb%U$1~Oo{kMApFKJe z(*pS-*w5UW8NtjKKSk`y z!1GQE_GU@K0?HHA-1eT7f_K|F?&$TOv;jxA4=Xr6+@Q#D$5(5H_e=a&QKC3OMwM3! zgldNDy>mJXZx^6c)GVQD!}io}kKx=fsy)tsabJni@PFR!O0E)fg&fI2{U>}s%bxgmYUX~JJH}^R;w5d-t#yfyq_l6bj+SGV;nfi z_2~~Nua9U*Ur6}+JvMWPlJUkmz$i& zdg(m7<4@L&KO6aGR^KI&odS91ec1m zGY-1h{$b^9LKQG3@u!)g5NKaO1crDUqZS2$_SIR>2U4Q(T%0frf*$gIl#4ICC!ZfX z{VVQ@HE$0J3%R+!89(A3w1DZ#v}6cg@L8i*-@jBnSL{=iEW}ZR2EgCb>(~G}=Kw)+UkhJxyvy`NdBi_a zxVKAmBNXCbA(!0d=|n$8B;`qu9Mk`qw_DD6=C2JM)fWE%m5az?KfE=N*_gSx z-BDbR=RVqA5!#yoL7Nn}IlM;07!{f>VG04z?ew79#^M1*sdZ=7x%$miQ0N{>Lh`*e zrB(1}vPiN42NNPUM;ulVa9d440h?DBn2QRamkRkj>|qBoe}Vsd1W3kuP{xcYR{#e{ zoZun^TxE+=cJ8z_BB{R%lh!^@5EQ?Wlqgcq*=BEzOZO56A@MAMw>ZMg8;u7F+VhsW zZ+OERul&M1KN5ea@6*)BM-D|Y3TD%>K9n(i$^g{xNRr*1ZmgMPb-s<&D-mi(-U=b8 zAV%A35*_OwEV0IsNqU8-SSD=?lf003&>Le&FHfKdl7ELn;S&sUYbTRv3AUwTd%1@Y zzjeR%>{`U`i36Bhf*|Aw=wsI~qf+@NqGglP1WaeympPG2*{M(!nF0Fm3yes)GdxK+O*< z9qVH#mOr(boNZKx7^p96- ztO-2NKMXMNfipJAXce}hTz^XTtuXv5WhKuKrH;!FKqgSi@OGegCM0vmnNCySn=p!8 zO1IGgnK)+_@fQ3g97_#a%Xp<{91qm~dAZDj;@hdz?Q&KaMPl+heDuRc_%@=j$&> zHVkX`>ra&1Ok=d_GlNmFq#&5}j7o18d@${Vp5g#kR%9Rt&>k!(klG!Do~_u#M+Y}f zmPk;rSrPttQ$<w)Ht zDMmfTwD5u7KUuaj4jx?!!I37{M~nM9UJaUmxeB+9quqInwZ!HbHn+IPue17(X(7!u}?13_G8D zP5%bcBk_XR&AN(^uSQ_ES`>`(Ni&=^yb#E#T!esO;q~D0Wfm6~Sf`7Oy3+?glJEuE zz^O++;^qjDOrQJIZug~-bux!Pl-qeO9c1X93)Gu6=^DsQiEtpXodp)uN(AkWm4+8Z zn@Pg*S@S%SG22BU5|EUu5OLk+%c7kLJd1FrH~uZ=m9(4B$w9E;^G~QQ2|=zSQK%Ky z+^SVg;Zl*^Ns{1EsbajxPMJZkMz~7kmFR){kK*Tlxt3>9yS0f;`dMCRT|lTX=tSu$ zIm_Pj8~6JzlT5EiN~VtN)m7dc(KXmMyev6mH|MY!oBMB$Y#tOL)RNJ7dC&IPw?>Jr ziuk~Z9&TR@dyYmW1Y6!VEIeqRqVA_~za|gzfb|)}u?y!Y$V?+;O|sYEZH(18Ft3n7 zF2|Mhm6-$Y-_xuc;;#^RmOod^Leyu|(@1>Z_~NieuRA+o*SHOprc8g&&j+V%-ndhl z4RkHfZdTM)o26bzCX&o;AZ*JgBE8yUI~IiuD?8n0>g;1ck;U-&h@-2eIF>JmZ|{WeaMqoARwxi~d7wYF9{{f!C9kt-vP zP1wZ&vhC)A+FRe3nzF!X7^8W$BuBHQ-gL8PH^Onl^JAgUbHo9#vJ9*-&dtrq%F1SB zWW2n*e2Rk~w9lHvfrH9rA;(2}eDP`m$Yl8m)?jJXlP&{1I-)15G@7ev+4$>66XzJT zpc>UWO&Qu4`;77KM|Ir>?=W$2k`fXmDPrGO!7CXm)GTW>z5(|!)odF6+W3qNl8C)_ z<-yKSy6Gl!m1oM9z*m%#n#~n$mmc)gMx5=mO7R$uEe%BMZ6ep@MP0)&RB~!}R^JTP zMnpuEmXiAX`E$OKxwdwiQ~^FAVZBy`P1Ew(-K=TA=s7QFKTRQ)0^ZM#gAg}}#&JD{ zM0>W@yT)og_pu$(@-AQJ2W`RbpTwQ(s{Q6>7k{&(0 zm&ND#c)VD*H<{IGx7pJlhU4hq;Na+Zb#;Y^fPgTl6ws5nRRb5;6B`>lGow_aK^G%| zPe8D|wB+vY4g&)-W(tbj-d^>pO+)t*tXV$64Ki<7Iz6@drNa<6oUc?OLRL~VZ2J)_~tV~UjCP-OYT2f+2p3+tUmlnd#%1TLrucxL4t_daJeQpK(brSJAM<7P3 z06;bYvn-aB@`i?n_V)JHR_(m${Tp|?vx6IV$yh>sd_P%pqQh`@ ze0&U4-NAukL;()8)Vc;xcWPyG2Ts8Gfl^qp5f0*MiI|ApoBJpB9^JI8+7!*2H!TC= zGi=O)AK~8qwP^O{?hf%!Rq(%yylwS|Jv=-Bas(g({>`up^74cWl+3@R`uc)r$Q5;> zLn2`2O@|mH4;$BN(6ObBA2_wFp4!oCRFRX?nRYoSVD8*KwSTP|+_wLv!x70%h>|vL zTBE^))Y@VIsq>i%^U{@*lT%bwbb}l}Mdr`i+S>9mHxm=sE3^-lRo&t-wF04$Jy!-t zWUCHC)Sxh0z~mmeWNc3V-!U);pHV3$Tqv(-ii4|%wy%tWXf{m*gZ63T-zn*l84_q2 z^g48Obm%aC0<8d4eoJd>gH{C~Nm>7EP#O@J7f&xxg7E+s%nG&o-*irLOawr>@$vEZRiQW9nY3=YZp$mqksEuaa<=rc(u#?K#NRce5M$yPLRuxS z({B_pfyuBF-AA4NU@9gq4%=2r`pkwv>5%L!HU`v*LHS=ay01v@$9_LEO*UXj@xj~7 znvuCR&y&GL8Kdr~Nhc#tUu#L|m;_V*pax0~4#9BbU=lum5ye_@IArexFT>enwHOL- z4nhPCXzF&uzb(|mw^<_V&Ep%~kRhl`x`Q%Z$vo(JG#oGt`auZlDJ^*G?d-mXf1|6^ zDpG$xBO$2&oC}|x1Z8t^LM4C1_?esjOL+5hO{#B0V~=yB_{XTbhg8;IZT9mKJsugU zQfbqF{`{GrH)Fz$#)FrTF;&1Um>3T{GA@W7d~$fYb=;fC001aD`)`qh^CcyKpa30< zv$Hc`kO7`pK&)+={3ius@GhjwO|M1GV5Z1GAP@jZ<>r1GTWfclS~mzZ2$Cw8Il37N zhoVpeRi3RP&JSlt4|4x9g0+4BD7>OF=#qO_e&2m~{ z%G@q~7dg+*9!wt;G&S8$mKp$)S7G5N;Hmii+v#S18qPsy<0>pH%pCOI6T`yB0QEIy zYPAG4&&lOFw4L$LOVTBwX<+a%86GUGGc7G`$H8q-V`+IA=(|Pm@B*i>!4^F_1W3Wk zUVx6s9JFG?&O%-ZG*;~(vHua>)Ekg-BhvQX!wxw&xOv)B%n+jtZ?#Acz9*D!_X1(v zLzxa6Py-SY6BB_ELro13k`ZGTz;rh|3ptPv3_{5;)r(f9b(&T4cXxL#E-vcA4#s@< z*%B0`B_-xoR#59{KJqQmco%Z-A|;9zVElBuRfF1wsH7wkj50SrFHI3!S|dS$QKIrb zZUCAO(7kEV2N_&TAcf2xK+VQzRWueA6`ejmtPmjbF%;y7ARv^Ml^p>CQ(78OE8X=B z?I@U@ndqH;7D4kz{q`$XY_t4@0+Yi2?4=g2*i&cOzgn`L>6%dv6 z^{V-!anriq&Fo;29x9QpeLAKwndq}yP+M0QN4x{$4j7T62Dk5?x*7Z5#h)e> z&;{TbRjcMvk&v#VM9bz-P*4nUVLl;uOW;kBc?dy`u}&}Ba}Z*O^?&=~XKyjC(N)+* z-88yms3Qfm(U8iRk37MK1DF(Rip+vWmk5ieQFn4DOo889_Fig_Eq513gFPK?P|CPz z>nh5p=L0+nr=AeKLL0IBRhSoP1brDk4}|6I3!nAxzI#;%0h6o#IX~Q$uQk|tHsyh3 zcMePj7Ew@-Ji+E2karD){fG<)T!AYQbyV<;8gc=X_hf==^R3-TXp@0C1%2(?eX_?r z2b%}9fep2l@&<*-lVEJVH{JCgGTfjZ>p~ltyy(#u_^-iZup&rpGy^axr~*HQ zo0fKnqQaX`W#(l2R-t(~|GYBjwuJSO-ymy>}<|em`Y( zn3dRlNK#e$`;>brhaJd~g*i)+brzO{6Js1Eq?+duIztw9*T3A1;r)1i*V!)q7j(7uFmf25XkL?JdzD3T@l zmS;H8oX+c85wdbJcNOglv*f5Fk2z1DToqP$@yJ6$R$>pb)SYO`GrBm*TGZ56NQtA5 z3}oK;I*`d<%lseyQTnAtfz7ywAXZEvjoa`+yfd{h>ntZBYueTzh47*5eTSF?C79a4 zh>$dZk5}$BcdYb&KY={V z`FV|6!=_*ze8f4$bvG^<|4aAz^(%=gYbJ4KfNIKd*qaKyrX#C-90aQhg)SoDa3Zoa zi!fF7wL+xR>Wk|0`D@`Cc_Lwy|3IJZp>KrQa6VnBp;~7e=3;U3c&sE(i)2?)R}Yr6 z2oKbAu!e1NRjsFD-O_FM4hNWD@vo8E01~!Wb8jF>6w1QBBRRL$H|`wTlt?28b_Z%V zMJPJ+$`8NJfp`u$np^JaQD8*dG@lLV2!)u(4yxKcCxc zfp`WH!!!Qu?+!uPh`na(7T)M+9noK^oSKNWJVUnzSDrAjL|s>QweDy> zYf;f4QQgrXT*5CBl{_>+=U0>TaxzSCv{=?+aCC524z>F}>1f!C*} z&eyB6_5B6e4QNCj8)e$fZL*2IV0&R<+o?h2yL|S29S&aVLs6E^D!VQ}R5kNhd%M$= zqZ$sJ+L(BMZlv})l5SnX79;FEoSiR%J(AB6Aahsy1<0(GTughrudXvjyV5CL=n;@S z&Cd&YmmZ3h7MXPXM8tPK;95IH_8l8z4+j)>nvo1@59yt^iP3n-=hc z?E&ls-nh5LJhF;k^W4%08#WlXYMUdCQ2O--w=*^7|J<;m^TgXxIxyb?RE7qzzFIbJ zP=1X+YB^uYTt(lh3_Gu5{!tl*oflILK-QNk4y0Z7@bVc#dj%XqM-5$7nel}ombC=T zZP%mqnCqyvF=tJ7+z!1!#rRg;Zs%1E9s>v@O{)1e&Zw2iEKOqtohQV2dbfqEi{X!9 zMC$XRF=U(d#ct=@lb*1g43_{w%??0NV?ucQ+cU=4K5$iqgO(-UvHZ}%V~X6|S~Y3d zqvkWGFiOuP?-OsQtQqyEIN|%#z%9CA7yFb&sqgkF$3v~nZDFHUK@DM})_%*B8S*4a ziwa1;ZnI1G%{#0X*;Gb}){~t0&nf1sAtc#kSEC^2)v(T-)v=y}Vbe`!uOQHE8gI^- zq-U<%I%K!SD6o!eX5qLlIJEAL5v~-B2D!<~e~Y)@NAEy;Igk9J8MD zx`#enTYdEM=;Z?JCCphR@Ekpvy=g_Gi;X zfB7nOMtnH8ZYz^PQNN%~aLK)f*gV+~po3ZCGpF~zi~f_(?lLnV(PLG#8cl$r>0xas z35J|enyo`25M!?Q#fb-oAywr={6I89{kC>OoPC-aqVo6>59Wt)>0T^Zb?3zpiaEOt z%DOY$*b~^8zg)f~rM{I5l}q`XOi6lwIs0OB+jWI(Yo9OXpZ(M5(uSvXZSMSrnG=u2 zeD()*Qqjz7AzXYjSt7P=U9j1rZnLMju9@09eyo41Yi5_c1|3gNQd=-(b^JndAuSAU zW?1ZfJEq6qH{M@3i8x7dX=3*?xo$dPZ({FxI@}BrGu%BVOEeLQskDgA>uF%ub;cZ? z%TrL|QJuHe_P4ZGs}qksvaCnCrkJn#h606ixZj({*atq3^wZL@A__Y|dc<7N=y zN^so&<`0w-0Qdtt)xNhPQ9n6UQYizj;rJr0{Y2MXpsA<MRk}0yv5zIv&Mwu?5 zpgTy}Ar~==dz@CaLFM6_FMajRf-eNQ5S1N{=)dR#T`!RaW0B^NWK==)>$3!AzE*sn z#7C$w)<}u?53xzfj{h8K0dOF>fGa3I$=~OZZZA%m&k*9GSb8Q@gNV=Gz>+fx_Nd)y zp}^GhZ7=PCaetDIXx(Q%+!ww8xqpsgJ;YeOhF2W49ECGP!1HWa z$weJDcPaV3SyG$n=lPK!3+L)uwxml3g3F8r;ldu&dR}L1S6|`=u|}O9qk!?!Om$vJ zNs3hhI`*RO;fi^ZTDq4=BB|7|we2$G(&M&T*aM_a$56U8(>MC&^-tZ=-cB<_tEih! zq|l+@RIs$?l!I{A!)!9b$hym{71fent&B=TWU_SLhqm#_zXCa0LubE~VBhCSq%X!& z!y2PS`&>Ob>bV(?Rk z@dA93xja_XibeyyAP}+Es%z}N;~>BO%RH?JN1L-yA1tR5ilwsd)TQ?-H>Ikk60c$zXwVBXWo_>l(3BXKQdN&1+jaAd;G4IIzq@L!BZnE z_H~&~>$vRE51?VECG5!0H1UlR>zslx^LbOu@xNobnoUR zDXYP4$_$+z49W|3(Nc4R;jN4E9@?Q1Yn8i4?MH));-<4d!T$brMw?IT z9gHjopJ>YJhwfkxxlKqZADWZ%AFRCX+|WlS1WGO9@&mB4g*-d|;{<+ZzK z(qX_qzAKs}V@K}4*a_8)Tq8&`vThiUefpl;J8T)RmFa77)arpkiLK<9fOBi~K+) zEqiL_2;HpeX7w3v_>*UbTWH`$#0xQW$j4AiPFu_64h7IhCyRR@GdW@Q+EfF|=B;^a zkZmA-u-X0*Zzk{T6;T49Y8KdDpXY2_ns#l%hir`#uif%4BXjbAE4Iz`wkCey;PHe= zH8b~G6{amLfTh19GS)H<7HYP{uUSP17NuN2$}1iCyD6!aaPYcumRhl&d3xkfELv){ zpF_(XYCfv=H>eSvrpCb48;P&2v*a#>l`5~A`6{i&Y%k172V0f7Vm%_PzdBiN)}EzJ zvOBA5MAcfN4ay^A!8X1M`w4Q@dKoq;4-GeWx0IU2YvI1=$|#Xgw}avj~|qS&6P+CtA#ll zQ~^;WcRXBa;aXEfE4ML#Tm-0_ipb3HI;kyyx_OWe>Fqf(ll!i2vL^uQreF+~$+|fn zRerq|;p|~+uS&VY9 zap@Pl_@T5WkRm-p|I+C>HwS2-@?mWqt)XAD*TYy~;DSt}-5pChbU!J72|DBv&~#TV z)PQC}G4#r*8c;pMB1R6)WYHBGcG}NKN5viT1_1B?4nC{??9;g)G;vdZ!nJ+o-@4xX zP2Z#Ii{IRvTp7|uu%f*3gInk*8t2`grEwtAU3MSnCj8wgK5U?nzggj|^yjb}+6yYm zDN$rltV4<9g$bj0IE1lKbUjSNv!^hcARw}WpKn}}5AHm)>CBO7dU5gW`g{a5P)R5vacOD!FRu~AAnA`D`$M4#M}83gE?$Y2DQ)2$*qCA?yOni7fWxl%yTgd&}gac%Xv z`lzvLg-CpL9TYF`ic;XkVRn1Hq0_flR83-XkHu2@B3UZ+d+%ydJ#tkZ4X@9FpYPFq zOzACPgsUBUn&*`Ikp-vP~Y_xSFaEiE?yEf{Pfa7#3` zv)|;?|A4@o{)50LHtSA5Jlm%r_bXW6-C}w2Dp(Er@;b7^8I!|#E`m-J)aXXxwx%4v z%z3Xqg+5<`t1mkB3k0+_n>{ee)*ZKXjK_*mV;L_>A~D*_x7;mSPxSI}PyA%Uj(R-M zO?2F__u&lMk(ZUn*vJ=B)cQV5%%D#^z(e`eg;(WPvimJo!PLqT)>NP}ZE46sja`$$ z(?5@R0Xn!hlUeH&wY0OR*O1e<$U_XO%d#+oeaCQoNlRwJ#!xF!l_=Lj4n9T@e-QvD zbDNCMj2GE`ioQM~zPl)G?oIffb}Em5`*Ue$b=DoF6*6j*mm))fCmVrV9yRe;o_rX2FIu}{wT;hq$3zZRuvS0;^_q_p818=DgMx(OD|Pc zr;z%?O~#!zF+p~+i|{=fw<}B`^-~H&@|LAM*;trvC^h-t7@4MyFrxUyv2~Ib#%`BA z_Z1`WcrvO3*dd@ve*B;mNRcO2&tM8_P~Hr<{XUu|1MvgX7DDipt=iJURJn%NLLY?7%$Z>-M-gaHY2deW1+u>mPPh!TYOJ$BW^Pf{y6Ov)nG4Ebm+s;y>rcTVm&FJ ztvphA*B`t~dh-)&EqXreV>A5N^+$C(D^Mh|Y?3ZA0}ozm*+?e3c7BPaowgij2%UmlRQV1B=sHskOnLP>|0yRS;YKXjQ?YJY>cx2;y~g&Ts4sJN zJX9Kc7F>(_PnH=r>Zu~@{j9iWHdqDHY;7*TgSn;ZDJX9jCfj3QbxqG-?%FZXsjw8^^HXV1d)t4DW+}SD$KKFs{ zR>N)5`U(A$tT16G={)t8&Cq^0Se6Q@=1^&HJ-T(-Bkm5&TMY5e1Xc z919_6n_%DL)EIK^LKBOaJ=a7cR#9V@qAa8tsQ$gz5&s-|%CItu(HV3EgkI)gK-gl zFm3z3PUzA5DfGCqCTkO0y|Y(Q4UPo5ytc(}U%Vv&&Zf_4nqco~cXk8y4Tw(v27LW* zGpQa!hlL)1IuC{d149RlssD)=<6>@OZ0q9qPFZNBJZ!Vfgw~F;&%ZyQ+@KMLC9D*^ zRHB_N7*1WREg;Z6R4=PS1|8cN*LfBlk6CaaI@PAhVY@5){bhx1A_Y#8b5wETap+_D zF82ruCs)Z!5hmw+{~+pOVl7dpgxR7(&+o+3-^}85)Upbwo|M;iDhj=w5J)2|DS3HH zt36l7o)q+nHqw^elYifsL~i#*#<6cjrhL{oH&d^EbufDWtCi0HI$%$2TJwq@uq#qo5QIKQ4##DU8g+aDR zZ9?K_?PGdFP37Gxs9rAc~8nh^?4kd{ndn{h8G6$Rnq#xrN|#{1xZWaUg?MO9qO@$qviP|2*cX&KYm#)WK%6E5VkAsc3O6E zV94zg6(reouYk<`|E2MV_Bh-Hz@mxwe`C@77gGJ005IB*T>Qt`n0$>X zivRL9cE98?Zb#*sXiT4Ne0F9$}WVzR7NH%SJbY~!i8A^EDeO-~Y{ zIWWn^Ktz8uFNyCM^#ru!zAfNf&EL7J9uh1Db4$ zh5ia@-{~1Ca8=<3;kuGuTVW8i3UUKV+hIxOC(tz-z`K6d1#sMf;+REbgDy_IDoomJGaJSn3^ zWpAvfW1W=0KrFL22q3VIKeXR%z6iUC$Z+95HdOG(6B+6CZS&C9nm^d2(?8-d@4gBn z$w3z~(0Xot-jL|?^LJ{%y++bizuEnBF+K&GYAmlPtd}S%i7bSkR`m@!6^dNAwoM_y zN&TUH7nQ>RFV>2+`nU@nd6~`UBMsUr6I7+jAPUjFy=;T&{;5}@-0empwrY1P63xo&?FsUXPYH8mstb_mGVND*r=on zBg9>46(1)<`ybajBfzyj@lY)8`@gu>3&AJxGZ0Dk6uG#6THq&3k}zgCn$Acx^GuAm z@$6RF$v~1+#kzL;I#v=U1vy^gQW7@Db+s=+pFZ~C&DecSlsBYE7uVyE@IU$hbN`G^ z83MTnvxfxAy26cxgFV0BB^TcLmRThQ*s?RynSJ=Q3X&AL_BNiKPPxB`&zCt3=sf|R z8?8e7zD@N_1{B>E@V}^cbFSqef<{K63Mf-W%~cTA09WrP>MaEiZbBAAUF~^mx@PKK zslV>~Hq66uuHY7Kf6?KVOpP6HHSOvG1{+8`Oh2Ma#F%}X@1`LiFslDN?H7Ex#K~O% z?G-x088tM0k|5p-Et=AMs2B_1P4O9FEj_GEJ7@)%NZecSbGP&6)p!fJ;jLfUWpd%* ze96yR{oz=zaj7rfd-VbTyT*!{reDBl`Cs2G-D(tv!~)P1q*PPs(-o8cZ%-n|T!_{Z zy99cLk($!9O=jVlrBa)%MUMo>LPA)a@Rvy9IGRv62e=g(>aTqVfcvb{Fc6j#58%%P zCKW9`?qQ>{3Cq|S!BL}5)HVp#?ycLU#8#~I3zN&4R2G?Mp^-L^xyHDuIFFG9L#KBu zr~9`9UyGJ9dQpO{92fY|BEO7{GRYP}54 zJpBtC7V>{ntzSk;-288<^$*#x1lKB%j1Vt{hT*Z_{4_rSfvV+l%f9KT(XnDs1c2~2 z>=na&eT^7gWmFNp6ad z#mVY0Ld0`0vH2Q@usPvItyQ(BqhsFeGb)Q7DYbUb3#2ksVz1?Tr(z4>ZxP79`I#joYRCh2?XVF`%h4w_Mtlz5ImwAxmxvRQz^SKM~~lSXuOac*Tbz=i13LG%^{YW z7oA;qe@QK-Rddw{Yq39;H+!?PONe^(_5IS~|I^-?KT_5Far_`l%D$$OEqh3hC+kyP z5)myTd$!!vMRrMc$(|6GvS!Ivkw~&7OG(LkWnV*-B|G1tJlx~lzu@~EKivC+dEL)^ z&U-#HXJ*c4Xoi!Aom6BxiYIk(=|#Ja>Ek>|1}w8V_V~w&+*i;zFt(V&?u$+I&nK>$ z#~Qy+O!D#IFY-^(j-;$wUVFv%*^*!5j>S0NFQSwh0wvPJT}e}<`~vjzV}dC|qd%zc zf_H59Emm-r3=0MeVX0q7CsbnxE_F(`YknXzbklHX@8z1SHE%i6T}M{o*}_KLPW+wh z(eRweYhk14(v0kKnf*Q3j-cM&JA*~?LWY|!*-m6RJ)z2Rc5g_C5fTXgUW09;j2GbY z_e$H_!t=m6-<#F5R=oD-qOs%&lddHq_L*za)yx?qr|pfsdZe;3UXDt^JDdB;tD7(v z8ks7NGB%0HX=P-QFNB}-84)WV)p(Wqomj#9`_1o6mxRLYKM7RI<&S7!XJH+!~oCikIM!^)3{>*wiji$3b_^u<^yg|xQXVy~OD)~EHf z&04N?ja}E;6X+pyC#myItOYn5L}F>AZ>9n8Z%jr3Rf` z2~qb+?P;_9r>}jPRnVmo{@g&NzjNRF!yn?asSnV;w$&{^%3yj=x|3<(1Th`WOWH%@ zi9B}$z^dd%2F>H8q;uAj_Mf~cskB_`3P7%PEs$%y?}_EaN3HaEv6R7zi!z2;qbuXL zB*(9{+&L_9AR9No&^+ID{8+P)x@M56G$oFa>mTDx>+2MBl%tV5^-S+Ou+#0+d!ZUC zO0{YU$GT)9r9J0 zi|;y1Z$4jgWl&M)+=ZwSH`{=`y5Whc=S7A+;Wc+c6g8E#k56-dvDtB^_wSp18U}97 zzj{i*1IhM5qSLRbgHc2f!~h;>=pYKBfAeRWSlO7ZJ+g2l?jYiihrqx5e_!5VC#>4V zcKb|_EF9R~v0qy`)IqVA{qO!pqB3kkg(dcFfeuDFH0ss-?BfC48F!}QyEoP2YRt2( z3~{_JzO+HPdwH*rzAqI_4azz?)^a#1;Jp3dJN%Y7emJZ~Qvd9O2nz7Q(vmfi6e z?GdiFOM)dvA%1WAWuKfvo5kL%2y?Pdh)^<1D||4b+*~?z@>%bp_(uAJ6CQ}YvUPp;e8Ak-f6km!AFe_YI z;Nz@6^Oxdj%rLc`qExuNMbhNcxnHg&W(R&KYGK{qNE7Meo_Wm&7Sskfi)gyu>3yX~ zF=EXV>@JvFNtKY6o_Ln+>L~Yj9eaxTU*`U{uTD=HWZ#$pi$vSyJmdYD)fQ;g z63CeWPtNwXc2=1G1ijgaGwOv1W<|KyHh@nkd)PeiO8HrCk z2bDWa$4W$T7fr`37;Ns@syW5YQYnkwPK~%xilYCBx;)DvCidR>M61XS(QjY(LGn)m znY1hSP?yoEhy{;Nct&(fF#BJ=ir&d9|5WP#?fPm7>a>;xQ`MODK3 zqK2p{RkbNlUA24DB_&1!_MvAK$!D}`JcsxkZ62~;!yKi2QyHSD%p`#NLFbYy3G$LA zno1tQpw;UVj*P`vL!8*ewp)_Q|9G5>qvpQ+G;m}%X2ycfikIf0~?6sd> zY!_!@G`J`;M_tL6`8vP-_~NTk`8+{a_zJN(CCj1Mf_qep+20f1OvD`;R=eCmF|p#Q zPC4l{E)|@VGc{Dt?Aj1=|41dF;HthDb!d^ zm9@zGhNjgGbk@DH3#gugY7-1)CML8%YAmJNPFN#SR#^?Zvhdkq$|8bTmzqf6{DB&E z`fuHX5)7uKIO~Hh21RX?6iO+^A`j#yq+Vh4oZns&G!YE zCk5x3dX=oY9M`U=jN%qpbR=3i{A1e5i=wU(Jh5d;&$vjgE~{nO_f%w%?vejm?dWb0 zwE5P~sXLZsSz^xxgnQG(UNzG& zu8HM7<>7|jeI<~R)i_x!q5OFF1dHe4Phpii2XNkHwFWuv+K=z{SXK8$pJHx29&K2! zd#)}$FUtIzrci{ijfuTvf{K_&NWMZ{QU>jw&~8;m9r}6M!9v-%*w*tw zbmxQyU0vKKsydNP7c(^OM-@1cq<`svwyrcr3@tJ-4DBv%My7)5f<3muu_ z&i&|bp~mKR(ihLB9!`0}&qqrC&YJ6xk4&6^VM^rXj550Wo;~9(Jkt92SONwUUCKo6 zPZfOjNbZmgoXJ zkK7W1cUl%hr3`jo5ol)X)9Ap>?kZy)3Sg!XFEzUGYrw=c6>H=lh6^RL5vU?1Y!up3H@U!=*0sj1HUq^b${?nSKi9f z&dk!zP{Y~U%vOIb#++5b2c%vqe{m4>p9UZ_;rx&Wy=*RvQZvmWNT+;V=MaS z6A7cz$gs-2W;^f)(-sKWP@=VgSv#}+_sQ++bMo+-968MyC;?pX5afy3kB7+B*+Beu z#Mb&CI>oD03A1*>ksCN(o(B)bt+#>NsMK%dmZ~8VLn@-j3IJ&rpmN|5`}H@7zw7s# zxBh+2QHZqF-JgmSsUXPi1ehhpqu~rTXdCwZ{#-wJ3GT5052r~-AP-k?8)jFCdZ^fHZtb07!v2NbXrtBsL`-F zoWq$wfU~{}9_}5S6!$7SEd-rC2j}qT5#X%vae{M7lsm49fi`&@Bsjva*X_3iIP2L& z;hd@W+zBqy5cGqQ2*w$#C%{=>D1dWF(_@c}f~Ix@48-y6iKZm_v-E{8p2HGIel{du zH6Q_PRlyC;c}-1#vwlu2+@3ZcTWwch3rY&kndK(HK~%Gg&8%n(h-7Y-aQ|eA5a1xn zIUc8TqEG;W7^mU(6kR01LDX|f3pG_6i0OZWQ!eoRoC#vf?K)rw8C1R3QNlqMqM%_nqtpoIw!F@bCM@ zG6Eb#JFf{}?hX|u{jb#L}=?z zh=2Oi(((KC@X!qeEb<@)c(HjRk3!&>n6=ax^m-Au zlp!z>!xsEtr%lGY_r%b@)6{s!Ji&(q@O0~&47*kYJGRIU^hxX2_8gR(jHJE|20SAr z+z$Bblba0T Date: Mon, 7 Sep 2026 17:11:07 +0200 Subject: [PATCH 04/13] Add the .NET 10 port of the MySQL flexible server web app sample MySqlConnector store with the same idempotent DDL, md5 ids, 30x2s startup retry and TLS-without-verification semantics (MYSQL_SSL) as the Python sample; artifacts switch to DOTNETCORE|10.0 with a source zip for the Oryx build, dotnet_version in Terraform and 'dotnetcore' in Bicep. Co-Authored-By: Claude Fable 5.1 --- .../dotnet/README.md | 107 ++ .../dotnet/bicep/README.md | 101 ++ .../dotnet/bicep/deploy.sh | 325 +++++ .../dotnet/bicep/main.bicep | 308 +++++ .../dotnet/bicep/main.bicepparam | 19 + .../bicep/modules/app-service-plan.bicep | 154 +++ .../dotnet/bicep/modules/log-analytics.bicep | 45 + .../bicep/modules/mysql-flexible-server.bicep | 169 +++ .../bicep/modules/private-dns-zone.bicep | 41 + .../bicep/modules/private-endpoint.bicep | 72 ++ .../bicep/modules/virtual-network.bicep | 238 ++++ .../dotnet/bicep/modules/web-app.bicep | 214 ++++ .../dotnet/images/architecture.png | Bin 0 -> 229633 bytes .../dotnet/images/vacation-planner.png | Bin 0 -> 85690 bytes .../dotnet/scripts/README.md | 71 ++ .../dotnet/scripts/call-web-app.sh | 201 +++ .../dotnet/scripts/deploy.sh | 1133 +++++++++++++++++ .../dotnet/scripts/validate.sh | 135 ++ .../dotnet/src/Models/Activity.cs | 4 + .../dotnet/src/Pages/Delete.cshtml | 2 + .../dotnet/src/Pages/Delete.cshtml.cs | 22 + .../dotnet/src/Pages/Index.cshtml | 265 ++++ .../dotnet/src/Pages/Index.cshtml.cs | 46 + .../dotnet/src/Pages/_ViewImports.cshtml | 4 + .../dotnet/src/Program.cs | 35 + .../dotnet/src/Services/ActivityId.cs | 15 + .../dotnet/src/Services/IActivityStore.cs | 21 + .../dotnet/src/Services/MySqlActivityStore.cs | 117 ++ .../dotnet/src/Services/MySqlOptions.cs | 30 + .../dotnet/src/Services/StoreInitializer.cs | 33 + .../dotnet/src/VacationPlanner.csproj | 11 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/favicon.ico | Bin 0 -> 36791 bytes .../dotnet/src/wwwroot/style.css | 341 +++++ .../dotnet/terraform/README.md | 69 + .../dotnet/terraform/deploy.sh | 278 ++++ .../dotnet/terraform/main.tf | 198 +++ .../modules/app_service_plan/main.tf | 25 + .../modules/app_service_plan/outputs.tf | 19 + .../modules/app_service_plan/variables.tf | 42 + .../terraform/modules/log_analytics/main.tf | 14 + .../terraform/modules/log_analytics/output.tf | 30 + .../modules/log_analytics/variables.tf | 37 + .../modules/mysql_flexible_server/main.tf | 55 + .../modules/mysql_flexible_server/outputs.tf | 15 + .../mysql_flexible_server/variables.tf | 81 ++ .../terraform/modules/nat_gateway/main.tf | 42 + .../terraform/modules/nat_gateway/output.tf | 14 + .../modules/nat_gateway/variables.tf | 43 + .../modules/network_security_group/main.tf | 53 + .../modules/network_security_group/outputs.tf | 9 + .../network_security_group/variables.tf | 51 + .../modules/private_dns_zone/main.tf | 25 + .../modules/private_dns_zone/outputs.tf | 9 + .../modules/private_dns_zone/variables.tf | 20 + .../modules/private_endpoint/main.tf | 26 + .../modules/private_endpoint/outputs.tf | 19 + .../modules/private_endpoint/variables.tf | 61 + .../terraform/modules/virtual_network/main.tf | 58 + .../modules/virtual_network/outputs.tf | 19 + .../modules/virtual_network/variables.tf | 40 + .../dotnet/terraform/modules/web_app/main.tf | 71 ++ .../terraform/modules/web_app/outputs.tf | 24 + .../terraform/modules/web_app/variables.tf | 89 ++ .../dotnet/terraform/outputs.tf | 27 + .../dotnet/terraform/providers.tf | 24 + .../dotnet/terraform/terraform.tfvars | 3 + .../dotnet/terraform/variables.tf | 196 +++ 68 files changed, 6074 insertions(+) create mode 100644 samples/web-app-mysql-flexible-server/dotnet/README.md create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/README.md create mode 100755 samples/web-app-mysql-flexible-server/dotnet/bicep/deploy.sh create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicepparam create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/log-analytics.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/mysql-flexible-server.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/virtual-network.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/bicep/modules/web-app.bicep create mode 100644 samples/web-app-mysql-flexible-server/dotnet/images/architecture.png create mode 100644 samples/web-app-mysql-flexible-server/dotnet/images/vacation-planner.png create mode 100644 samples/web-app-mysql-flexible-server/dotnet/scripts/README.md create mode 100755 samples/web-app-mysql-flexible-server/dotnet/scripts/call-web-app.sh create mode 100755 samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh create mode 100755 samples/web-app-mysql-flexible-server/dotnet/scripts/validate.sh create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Models/Activity.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Program.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Services/ActivityId.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Services/IActivityStore.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlOptions.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/Services/StoreInitializer.cs create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/appsettings.json create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/wwwroot/favicon.ico create mode 100644 samples/web-app-mysql-flexible-server/dotnet/src/wwwroot/style.css create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/README.md create mode 100755 samples/web-app-mysql-flexible-server/dotnet/terraform/deploy.sh create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/main.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/providers.tf create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/terraform.tfvars create mode 100644 samples/web-app-mysql-flexible-server/dotnet/terraform/variables.tf diff --git a/samples/web-app-mysql-flexible-server/dotnet/README.md b/samples/web-app-mysql-flexible-server/dotnet/README.md new file mode 100644 index 0000000..847b8bb --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/README.md @@ -0,0 +1,107 @@ +# Azure Web App with Azure Database for MySQL flexible server + +This sample demonstrates an ASP.NET Core Razor Pages single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` table of the `plannerdb` database on an [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview). The server is reached through a [Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`) with the `privatelink.mysql.database.azure.com` Private DNS Zone, while a permissive server-level firewall rule lets the deploy machine run the post-create mysql bootstrap that creates the application user and seeds the schema. + +## Architecture + +![Architecture Diagram](./images/architecture.png) + +The web app enables users to plan and manage vacation activities; all data is persisted in MySQL. The solution is composed of the following Azure resources: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Delegated to `Microsoft.Web/serverFarms` for regional VNet integration of the Web App. + - *pe-subnet*: Hosts the Private Endpoint to the MySQL flexible server. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.mysql.database.azure.com`, linked to the VNet. The Private Endpoint's DNS-zone group auto-registers the `A` record for the server, so the Web App resolves the server's private IP through the VNet. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`): Secures access to the MySQL flexible server from the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Deterministic outbound connectivity for both subnets. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): One NSG per subnet. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics. +8. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): Public-access server hosting the `plannerdb` database. Burstable `Standard_B1ms`, version 8.0.21, 32 GiB storage, 7-day backup retention, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) is created so the deploy machine can run the post-create mysql bootstrap; the Web App itself reaches the server through the Private Endpoint. +9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `plannerdb`: Created at provisioning time; the post-deploy mysql step creates the `activities` table and seeds the demo rows. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core *Vacation Planner* app with regional VNet integration into *app-subnet*. The Web App connects to MySQL using a dedicated application user (`testuser`) — the server-admin login is never used at runtime. +12. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): *(Optional)* Configures continuous deployment from a public GitHub repository. + +The deploy scripts follow the same pattern as the sibling [`web-app-postgresql-flexible-server`](../../web-app-postgresql-flexible-server/dotnet/) sample: after provisioning, they (i) connect as the server admin via the public endpoint + firewall rule, (ii) create the application user `testuser` with its own password, (iii) grant privileges on `plannerdb`, (iv) create the `activities` table, (v) seed sample rows, and (vi) write `MYSQL_USER=testuser` + `MYSQL_PASSWORD` onto the Web App's app settings. The server-admin login is never written into the Web App's runtime configuration. + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/) +- [MySqlConnector](https://mysqlconnector.net/) +- [MySQL client tools](https://dev.mysql.com/downloads/) (`mysql`) — required by the deploy scripts to create the application user and seed data +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep), if you plan to install the sample via Bicep +- [Terraform](https://developer.hashicorp.com/terraform/downloads), if you plan to install the sample via Terraform + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN`. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain yours. Pull and start the emulator: + +```bash +docker pull localstack/localstack-azure + +export LOCALSTACK_AUTH_TOKEN= +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All three variants provision the same topology: VNet + pe-subnet hosting a Private Endpoint targeting a public-access MySQL flexible server, with a Private DNS Zone linked to the VNet. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process pulls and builds Docker images (LocalStack itself plus the `mysql:8` backing container for the flexible-server emulator). This is a one-time operation — subsequent deployments are much faster. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the *Vacation Planner* UI with the seeded activities and can add, edit, and remove activities. + +![Vacation Planner UI](./images/vacation-planner.png) + +You can use the `scripts/call-web-app.sh` Bash script to call the web app from outside the emulator. The script demonstrates four call paths: + +1. **Through the LocalStack for Azure emulator** via the default hostname. +2. **Via localhost and host port** mapped to the container's port `80`. +3. **Via container IP address** on port `80`. +4. **Via the default hostname** `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## MySQL Tooling + +You can use [MySQL Workbench](https://www.mysql.com/products/workbench/) to explore and manage the deployed database. Connect using: + +| Field | Value | +| -------- | ------------------------------------------------------------------------------ | +| Host | `localhost` | +| Port | (see `docker ps` for the host-mapped port of the backing `mysql:8` container) | +| Database | `plannerdb` | +| Username | `testuser` *(or `myadmin` for admin operations)* | +| Password | `TestP@ssw0rd123` *(or `P@ssw0rd1234!` for the admin)* | + +Or use the [`mysql`](https://dev.mysql.com/doc/refman/8.0/en/mysql.html) command-line client: + +```bash +MYSQL_PWD='TestP@ssw0rd123' mysql -h localhost -P -u testuser plannerdb +mysql> SELECT id, username, activity, created_at FROM activities; +``` + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure Database for MySQL — flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/) +- [Quickstart: Deploy an ASP.NET web app to Azure App Service](https://learn.microsoft.com/en-us/azure/app-service/quickstart-dotnetcore?pivots=development-environment-cli) +- [MySqlConnector documentation](https://mysqlconnector.net/) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/README.md b/samples/web-app-mysql-flexible-server/dotnet/bicep/README.md new file mode 100644 index 0000000..3d4519b --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/README.md @@ -0,0 +1,101 @@ +# Bicep Deployment + +This directory contains the Bicep template and a deployment script for provisioning the sample's Azure resources. For details about the sample application, see [Azure Web App with Azure Database for MySQL flexible server](../README.md). + +## Prerequisites + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [Visual Studio Code](https://code.visualstudio.com/) + [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep) +- [Docker](https://docs.docker.com/get-docker/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) + [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [MySQL client (`mysql`)](https://dev.mysql.com/downloads/) +- [`jq`](https://jqlang.org/) + +```bash +brew install localstack/tap/lstk # or: npm install -g @localstack/lstk +``` + +## Architecture Overview + +The [`deploy.sh`](deploy.sh) script creates the resource group while the Bicep modules create: + +1. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) with two subnets: + - *app-subnet*: delegated to `Microsoft.Web/serverFarms` for the Web App's regional VNet integration. + - *pe-subnet*: hosts the Private Endpoint to the MySQL flexible server. +2. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.mysql.database.azure.com`, linked to the VNet. +3. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`). +4. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview). +5. [Network Security Groups](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): one per subnet. +6. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview). +7. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): public-access mode, Burstable `Standard_B1ms`, version 8.0.21, 32 GiB, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) lets the deploy machine reach the server for the post-create mysql bootstrap. +8. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `plannerdb` (utf8mb4 / `utf8mb4_unicode_ci`). +9. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). +10. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration into *app-subnet*. The Bicep template sets `MYSQL_HOST`, `MYSQL_PORT`, and `MYSQL_DATABASE` on the Web App but **does not** set `MYSQL_USER` or `MYSQL_PASSWORD` — those are written by `deploy.sh` after the mysql client creates the application user. + +## Configuration + +Update [`main.bicepparam`](main.bicepparam) before deploying. The defaults are: + +```bicep +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param databaseName = 'plannerdb' +param username = 'paolo' + +param mysqlAdminLogin = 'myadmin' +param mysqlAdminPassword = readEnvironmentVariable('MYSQL_ADMIN_PASSWORD', '') +param mysqlVersion = '8.0.21' +param mysqlSkuTier = 'Burstable' +param mysqlSkuName = 'Standard_B1ms' +param mysqlStorageSizeGB = 32 +param mysqlBackupRetentionDays = 7 +``` + +`mysqlAdminPassword` is read from the `MYSQL_ADMIN_PASSWORD` env var. `deploy.sh` sets a default (`P@ssw0rd1234!`) if not provided; override for non-dev deployments. + +## Deployment + +```bash +# default values +bash deploy.sh + +# override admin and app-user secrets +MYSQL_ADMIN_PASSWORD='' \ +MYSQL_APP_PASSWORD='' \ +bash deploy.sh +``` + +The script will: + +1. Ensure the resource group exists. +2. Validate `main.bicep`. +3. Deploy the template, passing `mysqlAdminPassword`. +4. Use the `mysql` client (connected via the public endpoint + firewall rule) to create the `testuser` user, the `activities` table, and the demo rows. +5. Set the Web App's `MYSQL_USER`/`MYSQL_PASSWORD` to `testuser` / `` — the server admin login is never written to the Web App. +6. Zip the application source under `../src` and deploy it. + +## Verification + +```bash +MYSQL_PWD='TestP@ssw0rd123' mysql -h -P -u testuser plannerdb \ + -e "SELECT id, username, activity, created_at FROM activities;" +``` + +`` is `3306` in real Azure, or the port suffix of the server's FQDN in LocalStack: + +```bash +az mysql flexible-server show \ + --resource-group local-rg --name local-mysqlflex-test \ + --query fullyQualifiedDomainName --output tsv +``` + +## Related Documentation + +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/deploy.sh b/samples/web-app-mysql-flexible-server/dotnet/bicep/deploy.sh new file mode 100755 index 0000000..6eacd28 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/deploy.sh @@ -0,0 +1,325 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +TEMPLATE="main.bicep" +PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOCATION="westeurope" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +MYSQL_ADMIN_USER="${MYSQL_ADMIN_USER:-myadmin}" +MYSQL_ADMIN_PASSWORD="${MYSQL_ADMIN_PASSWORD:-P@ssw0rd1234!}" +MYSQL_APP_USER="${MYSQL_APP_USER:-testuser}" +MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-TestP@ssw0rd123}" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1> /dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + mysqlAdminPassword="$MYSQL_ADMIN_PASSWORD" \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + mysqlAdminPassword="$MYSQL_ADMIN_PASSWORD" \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + mysqlAdminPassword="$MYSQL_ADMIN_PASSWORD" \ + --query 'properties.outputs' -o json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + WEB_APP_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.webAppName.value') + MYSQL_SERVER_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.mysqlServerName.value') + MYSQL_FQDN_FULL=$(echo "$DEPLOYMENT_JSON" | jq -r '.mysqlFqdn.value') + DATABASE_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.databaseName.value') + echo "Deployment details:" + echo "Web App Name: $WEB_APP_NAME" + echo "MySQL Server Name: $MYSQL_SERVER_NAME" + echo "MySQL FQDN: $MYSQL_FQDN_FULL" + echo "Database Name: $DATABASE_NAME" +else + echo "Failed to deploy Bicep template [$TEMPLATE]" + exit 1 +fi + +if [[ -z "$WEB_APP_NAME" || -z "$MYSQL_SERVER_NAME" ]]; then + echo "Web App Name or MySQL Server Name is empty. Exiting." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so MYSQL_PORT defaults to 3306. +MYSQL_FQDN="${MYSQL_FQDN_FULL%%:*}" +if [[ "$MYSQL_FQDN_FULL" == *:* ]]; then + MYSQL_PORT="${MYSQL_FQDN_FULL##*:}" +else + MYSQL_PORT=3306 +fi +echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" + +# Check if the MySQL CLI is installed +MYSQL_CHECK=$(command -v mysql) +if [[ -z "$MYSQL_CHECK" ]]; then + echo "[mysql] CLI is not installed. Install it with: sudo apt install -y mysql-client" >&2 + exit 1 +fi + +# Create application user [$MYSQL_APP_USER] on the MySQL flexible server +echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + -e "CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; + GRANT ALL PRIVILEGES ON \`$DATABASE_NAME\`.* TO '$MYSQL_APP_USER'@'%'; + FLUSH PRIVILEGES;" + +if [ $? -eq 0 ]; then + echo "Login [$MYSQL_APP_USER] created successfully" +else + echo "Failed to create login [$MYSQL_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$MYSQL_APP_USER]..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT CURRENT_USER() AS user_name, DATABASE() AS db_name, NOW() AS server_time;" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$MYSQL_APP_USER]" +else + echo "Connection test failed with user [$MYSQL_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$DATABASE_NAME] database..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + );" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "INSERT IGNORE INTO activities (id, username, activity) VALUES + (MD5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (MD5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (MD5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (MD5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (MD5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (MD5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (MD5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (MD5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (MD5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade');" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Set MYSQL_USER + MYSQL_PASSWORD on the web app to point at the application user +echo "Setting MYSQL_USER=[$MYSQL_APP_USER] and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app..." +az webapp config appsettings set \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --settings MYSQL_USER="$MYSQL_APP_USER" MYSQL_PASSWORD="$MYSQL_APP_PASSWORD" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "MYSQL_USER and MYSQL_PASSWORD set successfully on the [$WEB_APP_NAME] web app" +else + echo "Failed to set MYSQL_USER and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app" + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table + +# Ping the web app to confirm the deployment is reachable +echo "Getting the default hostname of the [$WEB_APP_NAME] web app..." +WEB_APP_HOSTNAME=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query defaultHostName \ + --output tsv \ + --only-show-errors) +WEB_APP_URL="http://${WEB_APP_HOSTNAME}" +echo "You can visit your app at: $WEB_APP_URL" + +echo "Pinging [$WEB_APP_URL] to verify the web app responds..." +HTTP_CODE="000" +for attempt in $(seq 1 12); do + HTTP_CODE=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$WEB_APP_URL" || echo "000") + if [ "$HTTP_CODE" = "200" ]; then + echo "Web app responded with HTTP 200. Deployment verified successfully." + break + fi + echo "Web app not ready yet (attempt $attempt/12, HTTP $HTTP_CODE)..." + sleep 5 +done + +if [ "$HTTP_CODE" != "200" ]; then + echo "Web app did not return HTTP 200 after 12 attempts (last code: $HTTP_CODE). Deployment verification failed." + exit 1 +fi diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicep new file mode 100644 index 0000000..aad79d2 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicep @@ -0,0 +1,308 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed(['app','linux']) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed(['dotnet','dotnetcore','python','java','node']) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the kind of the web app resource.') +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed(['1.2','1.3']) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed(['Enabled','Disabled']) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the username for the application (used to scope activities).') +param username string = 'paolo' + +// +// MySQL flexible server +// +@description('Administrator login for the MySQL flexible server. Only used by the post-deploy mysql bootstrap; the Web App never authenticates with this account.') +param mysqlAdminLogin string = 'myadmin' + +@description('Administrator login password for the MySQL flexible server.') +@secure() +param mysqlAdminPassword string + +@description('MySQL major version.') +@allowed(['5.7','8.0.21']) +param mysqlVersion string = '8.0.21' + +@description('Compute tier for the MySQL flexible server.') +@allowed(['Burstable','GeneralPurpose','MemoryOptimized']) +param mysqlSkuTier string = 'Burstable' + +@description('Compute SKU name for the MySQL flexible server.') +param mysqlSkuName string = 'Standard_B1ms' + +@description('Storage size in GB for the MySQL flexible server.') +@minValue(20) +@maxValue(16384) +param mysqlStorageSizeGB int = 32 + +@description('Backup retention in days for the MySQL flexible server.') +@minValue(1) +@maxValue(35) +param mysqlBackupRetentionDays int = 7 + +@description('Name of the application database to create on the MySQL flexible server.') +param databaseName string = 'plannerdb' + +// +// Networking +// +@description('Specifies the name of the virtual network.') +param virtualNetworkName string = '' + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'app-subnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet that hosts the private endpoint to the MySQL flexible server.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the private-endpoint subnet.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the NSG associated to the private-endpoint subnet.') +param peSubnetNsgName string = '' + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string = '' + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the name of the private endpoint targeting the MySQL flexible server.') +param mysqlPrivateEndpointName string = '' + +// +// Observability +// +@description('Specifies the name of the Azure Log Analytics resource.') +param logAnalyticsName string = '' + +@description('Specifies the service tier of the workspace.') +@allowed(['Free','Standalone','PerNode','PerGB2018']) +param logAnalyticsSku string = 'PerNode' + +@description('Specifies the workspace data retention in days.') +param logAnalyticsRetentionInDays int = 60 + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +//******************************************** +// Variables +//******************************************** +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var mysqlServerName = '${prefix}-mysqlflex-${suffix}' +var privateDnsZoneName = 'privatelink.mysql.database.azure.com' + +// The MySQL flexible-server emulator embeds the LS-side TCP-proxy port directly in +// fullyQualifiedDomainName (e.g. ".mysql.database.localhost.localstack.cloud:4515"). +// Real Azure returns just the bare host on 3306. Split on `:` so the Web App always gets the +// right host + port without any post-deploy shell logic. +var mysqlFqdnParts = split(mysqlServer.outputs.fqdn, ':') +var mysqlHost = mysqlFqdnParts[0] +var mysqlPort = length(mysqlFqdnParts) > 1 ? mysqlFqdnParts[1] : '3306' + +//******************************************** +// Modules and Resources +//******************************************** +module workspace 'modules/log-analytics.bicep' = { + name: 'workspace' + params: { + name: empty(logAnalyticsName) ? toLower('${prefix}-log-analytics-${suffix}') : logAnalyticsName + location: location + tags: tags + sku: logAnalyticsSku + retentionInDays: logAnalyticsRetentionInDays + } +} + +module network 'modules/virtual-network.bicep' = { + name: 'network' + params: { + virtualNetworkName: empty(virtualNetworkName) ? toLower('${prefix}-vnet-${suffix}') : virtualNetworkName + virtualNetworkAddressPrefixes: virtualNetworkAddressPrefixes + webAppSubnetName: webAppSubnetName + webAppSubnetAddressPrefix: webAppSubnetAddressPrefix + webAppSubnetNsgName: empty(webAppSubnetNsgName) ? toLower('${prefix}-webapp-subnet-nsg-${suffix}') : webAppSubnetNsgName + peSubnetName: peSubnetName + peSubnetAddressPrefix: peSubnetAddressPrefix + peSubnetNsgName: empty(peSubnetNsgName) ? toLower('${prefix}-pe-subnet-nsg-${suffix}') : peSubnetNsgName + natGatewayName: empty(natGatewayName) ? toLower('${prefix}-nat-gateway-${suffix}') : natGatewayName + natGatewayZones: natGatewayZones + natGatewayPublicIpPrefixName: toLower('${prefix}-nat-gateway-pip-prefix-${suffix}') + natGatewayPublicIpPrefixLength: natGatewayPublicIpPrefixLength + natGatewayIdleTimeoutMins: natGatewayIdleTimeoutMins + delegationServiceName: 'Microsoft.Web/serverfarms' + workspaceId: workspace.outputs.id + location: location + tags: tags + } +} + +module mysqlServer 'modules/mysql-flexible-server.bicep' = { + name: 'mysqlServer' + params: { + name: mysqlServerName + location: location + administratorLogin: mysqlAdminLogin + administratorLoginPassword: mysqlAdminPassword + version: mysqlVersion + skuTier: mysqlSkuTier + skuName: mysqlSkuName + storageSizeGB: mysqlStorageSizeGB + backupRetentionDays: mysqlBackupRetentionDays + databaseName: databaseName + workspaceId: workspace.outputs.id + tags: tags + } +} + +module privateDnsZone 'modules/private-dns-zone.bicep' = { + name: 'privateDnsZone' + params: { + name: privateDnsZoneName + vnetId: network.outputs.virtualNetworkId + tags: tags + } +} + +module privateEndpoint 'modules/private-endpoint.bicep' = { + name: 'privateEndpoint' + params: { + name: empty(mysqlPrivateEndpointName) + ? toLower('${prefix}-mysql-pe-${suffix}') + : mysqlPrivateEndpointName + privateLinkServiceId: mysqlServer.outputs.id + privateDnsZoneId: privateDnsZone.outputs.id + vnetId: network.outputs.virtualNetworkId + subnetId: network.outputs.peSubnetId + groupIds: [ + 'mysqlServer' + ] + location: location + tags: tags + } +} + +module appServicePlan 'modules/app-service-plan.bicep' = { + name: 'appServicePlan' + params: { + name: appServicePlanName + location: location + skuName: skuName + skuTier: skuTier + kind: appServicePlanKind + reserved: reserved + zoneRedundant: zoneRedundant + workspaceId: workspace.outputs.id + tags: tags + } +} + +module webApp 'modules/web-app.bicep' = { + name: webAppName + params: { + name: webAppName + location: location + kind: webAppKind + httpsOnly: httpsOnly + runtimeName: runtimeName + runtimeVersion: runtimeVersion + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + repoUrl: repoUrl + virtualNetworkName: network.outputs.virtualNetworkName + subnetName: network.outputs.webAppSubnetName + hostingPlanName: appServicePlan.outputs.name + mysqlHost: mysqlHost + mysqlPort: mysqlPort + mysqlDatabase: mysqlServer.outputs.databaseName + username: username + workspaceId: workspace.outputs.id + tags: tags + } +} + +//******************************************** +// Outputs +//******************************************** +output webAppName string = webApp.outputs.name +output webAppDefaultHostName string = webApp.outputs.defaultHostName +output mysqlServerName string = mysqlServer.outputs.name +output mysqlFqdn string = mysqlServer.outputs.fqdn +output databaseName string = mysqlServer.outputs.databaseName diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicepparam b/samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicepparam new file mode 100644 index 0000000..5584e03 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/main.bicepparam @@ -0,0 +1,19 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param databaseName = 'plannerdb' +param username = 'paolo' + +// MySQL flexible server +param mysqlAdminLogin = 'myadmin' +// Password is supplied at deploy time via the MYSQL_ADMIN_PASSWORD env var +// (see deploy.sh — it passes it as --parameters mysqlAdminPassword=...). Do not commit it here. +param mysqlAdminPassword = readEnvironmentVariable('MYSQL_ADMIN_PASSWORD', '') +param mysqlVersion = '8.0.21' +param mysqlSkuTier = 'Burstable' +param mysqlSkuName = 'Standard_B1ms' +param mysqlStorageSizeGB = 32 +param mysqlBackupRetentionDays = 7 diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep new file mode 100644 index 0000000..4b5cfb3 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep @@ -0,0 +1,154 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the App Service Plan.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param kind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** + +var diagnosticSettingsName = 'default' +var logCategories = [] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: name + location: location + tags: tags + kind: kind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: zoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: appServicePlan + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = appServicePlan.id +output name string = appServicePlan.name diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/log-analytics.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/log-analytics.bicep new file mode 100644 index 0000000..2618829 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/log-analytics.bicep @@ -0,0 +1,45 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Log Analytics workspace.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param sku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param retentionInDays int = 60 + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** +resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' = { + name: name + tags: tags + location: location + properties: { + sku: { + name: sku + } + retentionInDays: retentionInDays + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = workspace.id +output name string = workspace.name +output customerId string = workspace.properties.customerId diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/mysql-flexible-server.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/mysql-flexible-server.bicep new file mode 100644 index 0000000..c018353 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/mysql-flexible-server.bicep @@ -0,0 +1,169 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Azure Database for MySQL flexible server.') +param name string + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the administrator login for the MySQL server.') +param administratorLogin string = 'myadmin' + +@description('Specifies the administrator login password for the MySQL server.') +@secure() +param administratorLoginPassword string + +@description('Specifies the MySQL major version.') +@allowed([ + '5.7' + '8.0.21' +]) +param version string = '8.0.21' + +@description('Specifies the compute tier of the server.') +@allowed([ + 'Burstable' + 'GeneralPurpose' + 'MemoryOptimized' +]) +param skuTier string = 'Burstable' + +@description('Specifies the compute SKU name of the server.') +param skuName string = 'Standard_B1ms' + +@description('Specifies the storage size in GB.') +@minValue(20) +@maxValue(16384) +param storageSizeGB int = 32 + +@description('Specifies the backup retention period in days.') +@minValue(1) +@maxValue(35) +param backupRetentionDays int = 7 + +@description('Specifies the name of the database to create on the server.') +param databaseName string = 'plannerdb' + +@description('Specifies the database charset.') +param databaseCharset string = 'utf8mb4' + +@description('Specifies the database collation.') +param databaseCollation string = 'utf8mb4_unicode_ci' + +@description('Name of the server-level firewall rule that allows the deploy machine and Azure services to reach the server. Defaults to a permissive allow-all rule appropriate for the sample.') +param firewallRuleName string = 'AllowAllIPs' + +@description('Start IP of the firewall rule.') +param firewallStartIp string = '0.0.0.0' + +@description('End IP of the firewall rule.') +param firewallEndIp string = '255.255.255.255' + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var logCategories = [ + 'MySqlSlowLogs' + 'MySqlAuditLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var metrics = [for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** +// Server is created in public-access mode and fronted by a Private Endpoint (see the +// private-endpoint module in main.bicep). The firewall rule lets the deploy machine reach the +// public endpoint just long enough to run the post-deploy mysql bootstrap that creates the +// application user and seed data; the Web App itself reaches the server over the private +// endpoint via the linked Private DNS Zone. +resource server 'Microsoft.DBforMySQL/flexibleServers@2023-12-30' = { + name: toLower(name) + location: location + tags: tags + sku: { + name: skuName + tier: skuTier + } + properties: { + administratorLogin: administratorLogin + administratorLoginPassword: administratorLoginPassword + version: version + createMode: 'Default' + storage: { + storageSizeGB: storageSizeGB + } + backup: { + backupRetentionDays: backupRetentionDays + geoRedundantBackup: 'Disabled' + } + highAvailability: { + mode: 'Disabled' + } + network: { + publicNetworkAccess: 'Enabled' + } + } +} + +resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2023-12-30' = { + parent: server + name: databaseName + properties: { + charset: databaseCharset + collation: databaseCollation + } +} + +resource firewallRule 'Microsoft.DBforMySQL/flexibleServers/firewallRules@2023-12-30' = { + parent: server + name: firewallRuleName + properties: { + startIpAddress: firewallStartIp + endIpAddress: firewallEndIp + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { + name: diagnosticSettingsName + scope: server + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = server.id +output name string = server.name +output fqdn string = server.properties.fullyQualifiedDomainName +output databaseId string = database.id +output databaseName string = database.name diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep new file mode 100644 index 0000000..d849259 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep @@ -0,0 +1,41 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private DNS zone.') +param name string + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private DNS Zones +resource privateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = { + name: name + location: 'global' + tags: tags +} + +// Virtual Network Links +resource privateDnsZoneVirtualNetworkLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2024-06-01' = { + parent: privateDnsZone + name: 'link-to-vnet' + location: 'global' + properties: { + registrationEnabled: false + virtualNetwork: { + id: vnetId + } + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateDnsZone.id +output name string = privateDnsZone.name diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep new file mode 100644 index 0000000..8fd35b8 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep @@ -0,0 +1,72 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private endpoint.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource ID of the subnet where private endpoints will be created.') +param subnetId string + +@description('Specifies the group IDs for the private link service connection.') +param groupIds array + +@description('Specifies the resource ID of the target resource.') +param privateLinkServiceId string + +@description('Specifies the resource ID of the private DNS zone.') +param privateDnsZoneId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private Endpoints +resource privateEndpoint 'Microsoft.Network/privateEndpoints@2025-05-01' = { + name: name + location: location + tags: tags + properties: { + privateLinkServiceConnections: [ + { + name: '${name}-pls-connection' + properties: { + privateLinkServiceId: privateLinkServiceId + groupIds: groupIds + } + } + ] + subnet: { + id: subnetId + } + } +} + +resource privateDnsZoneGroupName 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2025-05-01' = { + parent: privateEndpoint + name: 'private-dns-zone-group' + properties: { + privateDnsZoneConfigs: [ + { + name: 'dnsConfig' + properties: { + privateDnsZoneId: privateDnsZoneId + } + } + ] + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateEndpoint.id +output name string = privateEndpoint.name diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/virtual-network.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/virtual-network.bicep new file mode 100644 index 0000000..9cf440d --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/virtual-network.bicep @@ -0,0 +1,238 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'functionAppSubnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet that hosts the private endpoint to the MySQL flexible server.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet that hosts the private endpoint to the MySQL flexible server.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated with the private-endpoint subnet.') +param peSubnetNsgName string = '' + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the name of the public IP prefix for the Azure NAT Gateway.') +param natGatewayPublicIpPrefixName string + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the delegation service name.') +param delegationServiceName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var nsgLogCategories = [ + 'NetworkSecurityGroupEvent' + 'NetworkSecurityGroupRuleCounter' +] +var nsgLogs = [for category in nsgLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetLogCategories = [ + 'VMProtectionAlerts' +] +var vnetMetricCategories = [ + 'AllMetrics' +] +var vnetLogs = [for category in vnetLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetMetrics = [for category in vnetMetricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** + +// Virtual Network +resource vnet 'Microsoft.Network/virtualNetworks@2024-03-01' = { + name: virtualNetworkName + location: location + tags: tags + properties: { + addressSpace: { + addressPrefixes: [ + virtualNetworkAddressPrefixes + ] + } + subnets: [ + { + name: webAppSubnetName + properties: { + addressPrefix: webAppSubnetAddressPrefix + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + networkSecurityGroup: { + id: webAppSubnetNsg.id + } + natGateway: { + id: natGateway.id + } + delegations: [ + { + name: 'delegation' + properties: { + serviceName: delegationServiceName + } + } + ] + } + } + { + name: peSubnetName + properties: { + addressPrefix: peSubnetAddressPrefix + networkSecurityGroup: { + id: peSubnetNsg.id + } + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + natGateway: { + id: natGateway.id + } + } + } + ] + } +} + +resource webAppSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: webAppSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +resource peSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: peSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [] + } +} + +// NAT Gateway +resource natGatewayPublicIpPrefix 'Microsoft.Network/publicIPPrefixes@2025-05-01' = { + name: natGatewayPublicIpPrefixName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIPAddressVersion: 'IPv4' + prefixLength: natGatewayPublicIpPrefixLength + } +} + +resource natGateway 'Microsoft.Network/natGateways@2025-05-01' = { + name: natGatewayName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIpPrefixes: [ + { + id: natGatewayPublicIpPrefix.id + } + ] + idleTimeoutInMinutes: natGatewayIdleTimeoutMins + } +} + +resource peSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: peSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource webAppSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webAppSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource vnetDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: vnet + properties: { + workspaceId: workspaceId + logs: vnetLogs + metrics: vnetMetrics + } +} + +//******************************************** +// Outputs +//******************************************** +output virtualNetworkId string = vnet.id +output virtualNetworkName string = vnet.name +output webAppSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, webAppSubnetName) +output webAppSubnetName string = webAppSubnetName +output peSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, peSubnetName) +output peSubnetName string = peSubnetName diff --git a/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/web-app.bicep b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/web-app.bicep new file mode 100644 index 0000000..bdda325 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/bicep/modules/web-app.bicep @@ -0,0 +1,214 @@ +//******************************************** +// Parameters +//******************************************** + +@description('Specifies a globally unique name the Azure Web App.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param kind string = 'app,linux' + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'dotnetcore' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = true + +@description('Specifies the name of the hosting plan.') +param hostingPlanName string + +@description('Specifies the FQDN of the MySQL flexible server (e.g. .mysql.database.azure.com).') +param mysqlHost string + +@description('Specifies the TCP port the MySQL server listens on. 3306 in real Azure; in the emulator the FQDN encodes the dynamically allocated proxy port and main.bicep splits it.') +param mysqlPort string = '3306' + +@description('Specifies the name of the database to connect to.') +param mysqlDatabase string = 'sampledb' + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param subnetName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the username for the application.') +param username string = 'paolo' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** + +// Generates a unique container name for deployments. +var diagnosticSettingsName = 'default' +var logCategories = [ + 'AppServiceHTTPLogs' + 'AppServiceConsoleLogs' + 'AppServiceAppLogs' + 'AppServiceAuditLogs' + 'AppServiceIPSecAuditLogs' + 'AppServicePlatformLogs' + 'AppServiceAuthenticationLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' existing = { + name: virtualNetworkName +} + +resource subnet 'Microsoft.Network/virtualNetworks/subnets@2024-05-01' existing = { + parent: virtualNetwork + name: subnetName +} + +resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' existing = { + name: hostingPlanName +} + +resource webApp 'Microsoft.Web/sites@2025-03-01' = { + name: name + location: location + tags: tags + kind: kind + properties: { + httpsOnly: httpsOnly + serverFarmId: hostingPlan.id + virtualNetworkSubnetId: subnet.id + outboundVnetRouting: { + allTraffic: true + } + siteConfig: { + linuxFxVersion: toUpper('${runtimeName}|${runtimeVersion}') + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: 'SystemAssigned' + } +} + + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + // MYSQL_USER and MYSQL_PASSWORD are NOT set here. The post-deploy script connects to the + // server via the firewall-allowed public endpoint to (a) create the application user + // `testuser` and (b) write `MYSQL_USER` / `MYSQL_PASSWORD` onto this Web App via `az webapp + // config appsettings set`. The server-admin login is never exposed to the Web App at runtime. + MYSQL_HOST: mysqlHost + MYSQL_PORT: mysqlPort + MYSQL_DATABASE: mysqlDatabase + MYSQL_SSL: 'true' + WEBSITES_PORT: '8000' + LOGIN_NAME: username + } +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webApp + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = webApp.id +output name string = webApp.name +output defaultHostName string = webApp.properties.defaultHostName diff --git a/samples/web-app-mysql-flexible-server/dotnet/images/architecture.png b/samples/web-app-mysql-flexible-server/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..10dcc6ff3e484c86e0cd0774467781cd374fc67c GIT binary patch literal 229633 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�`(rSBW6m}wiq492IsbF>7u&lzXDrfOZ<1*_ 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

jb!v~DIVEn$^7CPt4yr8WO} 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 literal 0 HcmV?d00001 diff --git a/samples/web-app-mysql-flexible-server/dotnet/images/vacation-planner.png b/samples/web-app-mysql-flexible-server/dotnet/images/vacation-planner.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c515161863487cdc0705e2a8e8c9c4a2bd60b1 GIT binary patch literal 85690 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

A%9I;ra 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⁣46^_T- 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/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Web app port + local web_app_port=8000 + + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 8000) + echo "Getting the host port mapped to internal port $web_app_port in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "$web_app_port") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --max-time 10 --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl --max-time 10 -s "http://$container_ip:$web_app_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl --max-time 10 -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl --max-time 10 -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh b/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh new file mode 100755 index 0000000..652ac44 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh @@ -0,0 +1,1133 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +DIAGNOSTIC_SETTINGS_NAME='default' +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +VIRTUAL_NETWORK_ADDRESS_PREFIX="10.0.0.0/8" +WEB_APP_SUBNET_NAME="app-subnet" +WEB_APP_SUBNET_PREFIX="10.0.0.0/24" +PE_SUBNET_NAME="pe-subnet" +PE_SUBNET_PREFIX="10.0.1.0/24" +VIRTUAL_NETWORK_LINK_NAME="link-to-vnet" +PRIVATE_DNS_ZONE_NAME="privatelink.mysql.database.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mysql-pe-${SUFFIX}" +PRIVATE_ENDPOINT_GROUP="mysqlServer" +PRIVATE_DNS_ZONE_GROUP_NAME="default" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MYSQL_SERVER_NAME="${PREFIX}-mysqlflex-${SUFFIX}" +MYSQL_VERSION="8.0.21" +MYSQL_SKU_NAME="Standard_B1ms" +MYSQL_SKU_TIER="Burstable" +MYSQL_STORAGE_SIZE_GB=32 +MYSQL_BACKUP_RETENTION_DAYS=7 +MYSQL_DATABASE_NAME="${MYSQL_DATABASE_NAME:-plannerdb}" +MYSQL_ADMIN_USER="${MYSQL_ADMIN_USER:-myadmin}" +MYSQL_ADMIN_PASSWORD="${MYSQL_ADMIN_PASSWORD:-P@ssw0rd1234!}" +MYSQL_APP_USER="${MYSQL_APP_USER:-testuser}" +MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-TestP@ssw0rd123}" +FIREWALL_RULE_NAME="AllowAllIPs" +RUNTIME="dotnetcore" +RUNTIME_VERSION="10.0" +LOGIN_NAME="paolo" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit +# Create a resource group +echo "Creating resource group [$RESOURCE_GROUP_NAME]..." +az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Resource group [$RESOURCE_GROUP_NAME] created successfully." +else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit 1 +fi + +# Check if the MySQL flexible server already exists +echo "Checking if [$MYSQL_SERVER_NAME] MySQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az mysql flexible-server show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MYSQL_SERVER_NAME] MySQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a MySQL flexible server with public network access + az mysql flexible-server create \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --tier $MYSQL_SKU_TIER \ + --sku-name $MYSQL_SKU_NAME \ + --version $MYSQL_VERSION \ + --storage-size $MYSQL_STORAGE_SIZE_GB \ + --backup-retention $MYSQL_BACKUP_RETENTION_DAYS \ + --geo-redundant-backup Disabled \ + --admin-user $MYSQL_ADMIN_USER \ + --admin-password "$MYSQL_ADMIN_PASSWORD" \ + --public-access Enabled \ + --high-availability Disabled \ + --yes \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$MYSQL_SERVER_NAME] MySQL flexible server successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$MYSQL_SERVER_NAME] MySQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Retrieve the resource id of the MySQL flexible server +echo "Getting [$MYSQL_SERVER_NAME] MySQL flexible server resource id in the [$RESOURCE_GROUP_NAME] resource group..." +MYSQL_SERVER_ID=$(az mysql flexible-server show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query id \ + --output tsv \ + --only-show-errors) + +if [ -n "$MYSQL_SERVER_ID" ]; then + echo "MySQL flexible server resource id retrieved successfully: $MYSQL_SERVER_ID" +else + echo "Failed to retrieve MySQL flexible server resource id." + exit 1 +fi + +# Retrieve the fullyQualifiedDomainName of the MySQL flexible server +echo "Getting [$MYSQL_SERVER_NAME] MySQL flexible server FQDN in the [$RESOURCE_GROUP_NAME] resource group..." +MYSQL_FQDN_FULL=$(az mysql flexible-server show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "fullyQualifiedDomainName" \ + --output tsv \ + --only-show-errors) + +if [ -n "$MYSQL_FQDN_FULL" ]; then + echo "MySQL flexible server FQDN retrieved successfully: $MYSQL_FQDN_FULL" +else + echo "Failed to retrieve MySQL flexible server FQDN." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so MYSQL_PORT defaults to 3306. +MYSQL_FQDN="${MYSQL_FQDN_FULL%%:*}" +if [[ "$MYSQL_FQDN_FULL" == *:* ]]; then + MYSQL_PORT="${MYSQL_FQDN_FULL##*:}" +else + MYSQL_PORT=3306 +fi +echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" + +# Check if the server-level firewall rule already exists +echo "Checking if [$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +az mysql flexible-server firewall-rule show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" + echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server..." + + # Create a permissive firewall rule so the deploy machine can run the mysql bootstrap + az mysql flexible-server firewall-rule create \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$MYSQL_SERVER_NAME] MySQL flexible server" + else + echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server" + exit 1 + fi +else + echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" +fi + +# Check if the MySQL database already exists +echo "Checking if [$MYSQL_DATABASE_NAME] database already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +az mysql flexible-server db show \ + --server-name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --database-name $MYSQL_DATABASE_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MYSQL_DATABASE_NAME] database already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" + echo "Creating [$MYSQL_DATABASE_NAME] database on the [$MYSQL_SERVER_NAME] MySQL flexible server..." + + # Create the application database + az mysql flexible-server db create \ + --server-name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --database-name $MYSQL_DATABASE_NAME \ + --charset utf8mb4 \ + --collation utf8mb4_unicode_ci \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$MYSQL_DATABASE_NAME] database successfully created on the [$MYSQL_SERVER_NAME] MySQL flexible server" + else + echo "Failed to create [$MYSQL_DATABASE_NAME] database on the [$MYSQL_SERVER_NAME] MySQL flexible server" + exit 1 + fi +else + echo "[$MYSQL_DATABASE_NAME] database already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" +fi + +# Check if the network security group for the web app subnet already exists +echo "Checking if [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the network security group for the web app subnet + az network nsg create \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the web app subnet +echo "Getting [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_SUBNET_NSG_ID=$(az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_SUBNET_NSG_ID ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id retrieved successfully: $WEB_APP_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the network security group for the private endpoint subnet already exists +echo "Checking if [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the network security group for the private endpoint subnet + az network nsg create \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the private endpoint subnet +echo "Getting [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +PE_SUBNET_NSG_ID=$(az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $PE_SUBNET_NSG_ID ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id retrieved successfully: $PE_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the public IP prefix for the NAT Gateway already exists +echo "Checking if [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the public IP prefix for the NAT Gateway + az network public-ip prefix create \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --length 31 \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the NAT Gateway already exists +echo "Checking if [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the NAT Gateway + az network nat gateway create \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --public-ip-prefixes "$PIP_PREFIX_NAME" \ + --idle-timeout 4 \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$NAT_GATEWAY_NAME] NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$NAT_GATEWAY_NAME] NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the virtual network + az network vnet create \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --address-prefixes "$VIRTUAL_NETWORK_ADDRESS_PREFIX" \ + --subnet-name "$WEB_APP_SUBNET_NAME" \ + --subnet-prefix "$WEB_APP_SUBNET_PREFIX" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + echo "Associating [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group..." + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + az network vnet subnet update \ + --name "$WEB_APP_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --nat-gateway "$NAT_GATEWAY_NAME" \ + --network-security-group "$WEB_APP_SUBNET_NSG_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NAME] subnet successfully associated with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + else + echo "Failed to associate [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + exit 1 + fi +else + echo "[$VIRTUAL_NETWORK_NAME] virtual network already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the subnet already exists +echo "Checking if [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network..." +az network vnet subnet show \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network" + echo "Creating [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the subnet + az network vnet subnet create \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --address-prefix "$PE_SUBNET_PREFIX" \ + --network-security-group "$PE_SUBNET_NSG_NAME" \ + --private-endpoint-network-policies "Disabled" \ + --private-link-service-network-policies "Disabled" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NAME] subnet successfully created in the [$VIRTUAL_NETWORK_NAME] virtual network" + else + echo "Failed to create [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$PE_SUBNET_NAME] subnet already exists in the [$VIRTUAL_NETWORK_NAME] virtual network" +fi + +# Retrieve the virtual network resource id +echo "Getting [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group..." +VIRTUAL_NETWORK_ID=$(az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors \ + --query id \ + --output tsv) + +if [[ -n $VIRTUAL_NETWORK_ID ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network resource id retrieved successfully: $VIRTUAL_NETWORK_ID" +else + echo "Failed to retrieve [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit +fi + +# Check if the private DNS Zone already exists +echo "Checking if [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the private DNS Zone + az network private-dns zone create \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network link between the private DNS zone and the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists..." +az network private-dns link vnet show \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists" + + echo "Creating [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network + az network private-dns link vnet create \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --virtual-network "$VIRTUAL_NETWORK_ID" \ + --registration-enabled false \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network already exists" +fi + +# Check if the private endpoint already exists +echo "Checking if private endpoint [$PRIVATE_ENDPOINT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group..." +privateEndpointId=$(az network private-endpoint list \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --query "[?name=='$PRIVATE_ENDPOINT_NAME'].id" \ + --output tsv) + +if [[ -z $privateEndpointId ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] does not exist in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_ENDPOINT_NAME] private endpoint for the [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a private endpoint for the MySQL flexible server + az network private-endpoint create \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --subnet "$PE_SUBNET_NAME" \ + --private-connection-resource-id "$MYSQL_SERVER_ID" \ + --group-id "$PRIVATE_ENDPOINT_GROUP" \ + --connection-name "mysql-connection" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] successfully created for the [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create a private endpoint for the [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the private DNS zone group is already created for the MySQL flexible server private endpoint +echo "Checking if the private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists..." +NAME=$(az network private-endpoint dns-zone-group show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --query name \ + --output tsv \ + --only-show-errors 2>/dev/null) + +if [[ -z $NAME ]]; then + echo "No private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint actually exists" + echo "Creating private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint..." + + # Create the private DNS zone group for the MySQL flexible server private endpoint + az network private-endpoint dns-zone-group create \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --private-dns-zone "$PRIVATE_DNS_ZONE_NAME" \ + --zone-name "mysql-zone" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint successfully created" + else + echo "Failed to create private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint" + exit + fi +else + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists" +fi + +echo "Waiting for the [$MYSQL_SERVER_NAME] MySQL flexible server to accept connections..." +MYSQL_READY=0 +for attempt in $(seq 1 30); do + if MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + --ssl-mode=REQUIRED \ + --connect-timeout=5 \ + -e "SELECT 1;" &>/dev/null; then + MYSQL_READY=1 + echo "MySQL flexible server is accepting connections (attempt $attempt/30)" + break + fi + echo "MySQL flexible server not ready yet (attempt $attempt/30)..." + sleep 2 +done + +if [ "$MYSQL_READY" -ne 1 ]; then + echo "MySQL flexible server did not become reachable after 30 attempts. Exiting." + exit 1 +fi + +# Check if the MySQL CLI is installed +MYSQL_CHECK=$(command -v mysql) +if [[ -z "$MYSQL_CHECK" ]]; then + echo "[mysql] CLI is not installed. Install it with: sudo apt install -y mysql-client" >&2 + exit 1 +fi + +# Create application user [$MYSQL_APP_USER] on the MySQL flexible server +echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + --ssl-mode=REQUIRED \ + -e "CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; + GRANT ALL PRIVILEGES ON \`$MYSQL_DATABASE_NAME\`.* TO '$MYSQL_APP_USER'@'%'; + FLUSH PRIVILEGES;" + +if [ $? -eq 0 ]; then + echo "Login [$MYSQL_APP_USER] created successfully" +else + echo "Failed to create login [$MYSQL_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$MYSQL_APP_USER]..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --ssl-mode=REQUIRED \ + --database="$MYSQL_DATABASE_NAME" \ + -e "SELECT CURRENT_USER() AS user_name, DATABASE() AS db_name, NOW() AS server_time;" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$MYSQL_APP_USER]" +else + echo "Connection test failed with user [$MYSQL_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$MYSQL_DATABASE_NAME] database..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --ssl-mode=REQUIRED \ + --database="$MYSQL_DATABASE_NAME" \ + -e "CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + );" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --ssl-mode=REQUIRED \ + --database="$MYSQL_DATABASE_NAME" \ + -e "INSERT IGNORE INTO activities (id, username, activity) VALUES + (MD5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (MD5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (MD5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (MD5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (MD5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (MD5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (MD5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (MD5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (MD5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade');" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --ssl-mode=REQUIRED \ + --database="$MYSQL_DATABASE_NAME" \ + -e "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Create app service plan +echo "Creating app service plan [$APP_SERVICE_PLAN_NAME]..." +az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "app service plan [$APP_SERVICE_PLAN_NAME] created successfully." +else + echo "Failed to create app service plan [$APP_SERVICE_PLAN_NAME]." + exit 1 +fi + +# Get the app service plan resource id +echo "Getting [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group..." +APP_SERVICE_PLAN_ID=$(az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $APP_SERVICE_PLAN_ID ]]; then + echo "[$APP_SERVICE_PLAN_NAME] app service plan resource id retrieved successfully: $APP_SERVICE_PLAN_ID" +else + echo "Failed to retrieve [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Create the web app +echo "Creating web app [$WEB_APP_NAME]..." +az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --vnet "$VIRTUAL_NETWORK_NAME" \ + --subnet "$WEB_APP_SUBNET_NAME" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Get the web app resource id +echo "Getting [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_ID=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_ID ]]; then + echo "[$WEB_APP_NAME] web app resource id retrieved successfully: $WEB_APP_ID" +else + echo "Failed to retrieve [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network... +echo "Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network..." + +az resource update \ + --ids "$WEB_APP_ID" \ + --set properties.outboundVnetRouting.allTraffic=true \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Forced tunneling enabled for web app [$WEB_APP_NAME]." +else + echo "Failed to enable forced tunneling for web app [$WEB_APP_NAME]." + exit 1 +fi + +# Set web app settings +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + MYSQL_HOST="$MYSQL_FQDN" \ + MYSQL_PORT="$MYSQL_PORT" \ + MYSQL_USER="$MYSQL_APP_USER" \ + MYSQL_PASSWORD="$MYSQL_APP_PASSWORD" \ + MYSQL_DATABASE="$MYSQL_DATABASE_NAME" \ + MYSQL_SSL="true" \ + LOGIN_NAME="$LOGIN_NAME" \ + WEBSITES_PORT="8000" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +# Check if the log analytics workspace already exists +echo "Checking if [$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$LOG_ANALYTICS_NAME] Log Analytics workspace actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the Log Analytics workspace + az monitor log-analytics workspace create \ + --name "$LOG_ANALYTICS_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --query-access "Enabled" \ + --retention-time 30 \ + --sku "PerNode" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check whether the diagnostic settings for the web app already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app..." + + # Create the diagnostic settings for the web app to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "AppServiceHTTPLogs", "enabled": true}, + {"category": "AppServiceConsoleLogs", "enabled": true}, + {"category": "AppServiceAppLogs", "enabled": true}, + {"category": "AppServiceAuditLogs", "enabled": true}, + {"category": "AppServiceIPSecAuditLogs", "enabled": true}, + {"category": "AppServicePlatformLogs", "enabled": true}, + {"category": "AppServiceAuthenticationLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist" +fi + +# Check whether the diagnostic settings for the app service plan already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan..." + + # Create the diagnostic settings for the app service plan to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist" +fi + +# Check whether the diagnostic settings for the MySQL flexible server already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$MYSQL_SERVER_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server..." + + # Create the diagnostic settings for the MySQL flexible server to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$MYSQL_SERVER_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "MySqlSlowLogs", "enabled": true}, + {"category": "MySqlAuditLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server already exist" +fi + +# Check whether the diagnostic settings for the virtual network already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the diagnostic settings for the virtual network to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "VMProtectionAlerts", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist" +fi + +# Check whether the diagnostic settings for the network security group for the web app subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the diagnostic settings for the network security group for the web app subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist" +fi + +# Check whether the diagnostic settings for the network security group for the private endpoint subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the diagnostic settings for the network security group for the private endpoint subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist" +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# List the contents of the zip package +echo "Contents of the zip package [$ZIPFILE]:" +unzip -l "$ZIPFILE" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +echo "Using standard az webapp deploy command for AzureCloud environment." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table + +# Ping the web app to confirm the deployment is reachable +echo "Getting the default hostname of the [$WEB_APP_NAME] web app..." +WEB_APP_HOSTNAME=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query defaultHostName \ + --output tsv \ + --only-show-errors) +WEB_APP_URL="http://${WEB_APP_HOSTNAME}" +echo "You can visit your app at: $WEB_APP_URL" + +echo "Pinging [$WEB_APP_URL] to verify the web app responds..." +HTTP_CODE="000" +for attempt in $(seq 1 12); do + HTTP_CODE=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$WEB_APP_URL" || echo "000") + if [ "$HTTP_CODE" = "200" ]; then + echo "Web app responded with HTTP 200. Deployment verified successfully." + break + fi + echo "Web app not ready yet (attempt $attempt/12, HTTP $HTTP_CODE)..." + sleep 5 +done + +if [ "$HTTP_CODE" != "200" ]; then + echo "Web app did not return HTTP 200 after 12 attempts (last code: $HTTP_CODE). Deployment verification failed." + exit 1 +fi diff --git a/samples/web-app-mysql-flexible-server/dotnet/scripts/validate.sh b/samples/web-app-mysql-flexible-server/dotnet/scripts/validate.sh new file mode 100755 index 0000000..7538368 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/scripts/validate.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.mysql.database.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mysql-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MYSQL_SERVER_NAME="${PREFIX}-mysqlflex-${SUFFIX}" +MYSQL_DATABASE_NAME="plannerdb" +FIREWALL_RULE_NAME="AllowAllIPs" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check Azure Database for MySQL flexible server +echo -e "\n[$MYSQL_SERVER_NAME] MySQL flexible server:\n" +az mysql flexible-server show \ + --name "$MYSQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,State:state,Version:version,FQDN:fullyQualifiedDomainName,PublicNetworkAccess:network.publicNetworkAccess}' \ + --output table \ + --only-show-errors + +# Check MySQL database +echo -e "\n[$MYSQL_DATABASE_NAME] MySQL database:\n" +az mysql flexible-server db show \ + --server-name "$MYSQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --database-name "$MYSQL_DATABASE_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,Charset:charset,Collation:collation}' \ + --output table \ + --only-show-errors + +# Check MySQL firewall rule +echo -e "\n[$FIREWALL_RULE_NAME] MySQL firewall rule:\n" +az mysql flexible-server firewall-rule show \ + --name "$MYSQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --rule-name "$FIREWALL_RULE_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Models/Activity.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Models/Activity.cs new file mode 100644 index 0000000..c39b073 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Models/Activity.cs @@ -0,0 +1,4 @@ +namespace VacationPlanner.Models; + +///

A planned vacation activity: the store's identifier plus the free-text description. +public sealed record Activity(string Id, string Text); diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml new file mode 100644 index 0000000..386fa85 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml @@ -0,0 +1,2 @@ +@page "/delete/{id}" +@model DeleteModel diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs new file mode 100644 index 0000000..8412e78 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. +public class DeleteModel(IActivityStore store) : PageModel +{ + public IActionResult OnGet() => RedirectToPage("/Index"); + + public async Task OnPostAsync(string id, CancellationToken cancellationToken) + { + if (!string.IsNullOrWhiteSpace(id)) + { + await store.DeleteAsync(id, cancellationToken); + TempData["Flash"] = "Activity deleted."; + } + + return RedirectToPage("/Index"); + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..bd617e2 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,265 @@ +@page +@model IndexModel + + + + + + Vacation Planner + + + + + + + + + +
+
+

🌴 Vacation Planner

+

@Model.Activities.Count activit@(Model.Activities.Count != 1 ? "ies" : "y") planned

+
+
+ + +
+
+ + +
+ + + + + + + + + @foreach (var activity in Model.Activities) + { + + + + + + } + @if (Model.Activities.Count == 0) + { + + + + } + +
ActivityActions
@activity.Text + + +
+ +
+
No vacation plans yet — add your first activity!
+
+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..94b6b33 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Models; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +public class IndexModel(IActivityStore store) : PageModel +{ + public IReadOnlyList Activities { get; private set; } = []; + + /// Flash messages set by the previous request (the equivalent of Flask's flash()). + public IReadOnlyList Flashes => TempData["Flash"] is string message ? [message] : []; + + [BindProperty(Name = "activity")] + public string? Activity { get; set; } + + [BindProperty(Name = "row_id")] + public string? RowId { get; set; } + + public async Task OnGetAsync(CancellationToken cancellationToken) + { + Activities = await store.ListAsync(cancellationToken); + } + + public async Task OnPostAsync(CancellationToken cancellationToken) + { + var text = Activity?.Trim(); + var id = RowId?.Trim(); + if (!string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(id)) + { + await store.UpdateAsync(id, text, cancellationToken); + TempData["Flash"] = "Activity updated!"; + } + else + { + await store.AddAsync(text, cancellationToken); + TempData["Flash"] = "Activity added!"; + } + } + + return RedirectToPage(); + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..ec62511 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using VacationPlanner +@using VacationPlanner.Models +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs new file mode 100644 index 0000000..a3c9810 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs @@ -0,0 +1,35 @@ +using VacationPlanner.Services; + +var builder = WebApplication.CreateBuilder(args); + +// Code deployments built by Oryx export ASPNETCORE_URLS; custom images and local runs only set PORT. +if (Environment.GetEnvironmentVariable("ASPNETCORE_URLS") is null + && Environment.GetEnvironmentVariable("PORT") is { Length: > 0 } port) +{ + builder.WebHost.UseUrls($"http://*:{port}"); +} + +// Read and validate the configuration up front so a misconfigured deployment fails at startup. +var databaseOptions = MySqlOptions.FromEnvironment(); + +builder.Services.AddRazorPages(); +builder.Services.AddSingleton(sp => + new MySqlActivityStore(databaseOptions, sp.GetRequiredService>())); +// The flexible server can take a few seconds to accept connections on the first deploy. +builder.Services.AddHostedService(sp => new StoreInitializer( + sp.GetRequiredService(), + sp.GetRequiredService>(), + attempts: 30, + delay: TimeSpan.FromSeconds(2))); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/health", async (IActivityStore store, CancellationToken cancellationToken) => + await store.IsHealthyAsync(cancellationToken) + ? Results.Json(new { status = "ok" }) + : Results.Json(new { status = "unavailable" }, statusCode: StatusCodes.Status503ServiceUnavailable)); + +app.Run(); diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Services/ActivityId.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Services/ActivityId.cs new file mode 100644 index 0000000..8654aaf --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Services/ActivityId.cs @@ -0,0 +1,15 @@ +using System.Security.Cryptography; +using System.Text; + +namespace VacationPlanner.Services; + +/// MD5 of username + activity + timestamp: the id scheme shared by the Vacation Planner samples. +public static class ActivityId +{ + public static string Create(string username, string activity) + { + var timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"); + var hash = MD5.HashData(Encoding.UTF8.GetBytes($"{username}_{activity}_{timestamp}")); + return Convert.ToHexStringLower(hash); + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Services/IActivityStore.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Services/IActivityStore.cs new file mode 100644 index 0000000..3b24e5f --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Services/IActivityStore.cs @@ -0,0 +1,21 @@ +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Persistence for the planner's activities. Every call goes to the backing store; nothing is cached in-process. +public interface IActivityStore +{ + /// Creates whatever the store needs (container, table, collection) before the first request. + Task InitializeAsync(CancellationToken cancellationToken); + + Task> ListAsync(CancellationToken cancellationToken); + + Task AddAsync(string text, CancellationToken cancellationToken); + + Task UpdateAsync(string id, string text, CancellationToken cancellationToken); + + Task DeleteAsync(string id, CancellationToken cancellationToken); + + /// Cheap connectivity probe used by GET /health. + Task IsHealthyAsync(CancellationToken cancellationToken); +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs new file mode 100644 index 0000000..0529ad7 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs @@ -0,0 +1,117 @@ +using MySqlConnector; +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// +/// Activities in a MySQL activities table. Like the Python sample, the store is low-throughput +/// and opens a fresh connection per call instead of managing a pool explicitly. +/// +public sealed class MySqlActivityStore(MySqlOptions options, ILogger logger) : IActivityStore +{ + // Single statement on purpose: MySQL has no CREATE INDEX IF NOT EXISTS, so the indexes are declared + // inline and the whole DDL stays idempotent. `id` is VARCHAR(32) because the ids are MD5 hex digests. + private const string SchemaDdl = """ + CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + ) + """; + + // Azure MySQL Flexible Server defaults to require_secure_transport=ON (the LocalStack emulator mirrors + // this), so the connection must use TLS or the server rejects it. The server certificate is publicly + // trusted on Azure but self-signed under LocalStack, so TLS is enabled without certificate verification + // (MySqlSslMode.Required) and the same code path works against both targets. MYSQL_SSL=false disables it. + private readonly string _connectionString = new MySqlConnectionStringBuilder + { + Server = options.Host, + Port = (uint)options.Port, + UserID = options.User, + Password = options.Password, + Database = options.Database, + CharacterSet = "utf8mb4", + ConnectionTimeout = 10, + SslMode = options.SslEnabled ? MySqlSslMode.Required : MySqlSslMode.Disabled, + }.ConnectionString; + + public async Task InitializeAsync(CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new MySqlCommand(SchemaDdl, connection); + await command.ExecuteNonQueryAsync(cancellationToken); + logger.LogInformation("MySQL schema initialized"); + } + + public async Task> ListAsync(CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new MySqlCommand( + "SELECT id, activity FROM activities WHERE username = @username ORDER BY created_at DESC", connection); + command.Parameters.AddWithValue("@username", options.Username); + + var activities = new List(); + await using var reader = await command.ExecuteReaderAsync(cancellationToken); + while (await reader.ReadAsync(cancellationToken)) + { + activities.Add(new Activity(reader.GetString(0), reader.GetString(1))); + } + + return activities; + } + + public async Task AddAsync(string text, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new MySqlCommand( + "INSERT IGNORE INTO activities (id, username, activity) VALUES (@id, @username, @activity)", connection); + command.Parameters.AddWithValue("@id", ActivityId.Create(options.Username, text)); + command.Parameters.AddWithValue("@username", options.Username); + command.Parameters.AddWithValue("@activity", text); + await command.ExecuteNonQueryAsync(cancellationToken); + } + + public async Task UpdateAsync(string id, string text, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new MySqlCommand("UPDATE activities SET activity = @activity WHERE id = @id", connection); + command.Parameters.AddWithValue("@activity", text); + command.Parameters.AddWithValue("@id", id); + await command.ExecuteNonQueryAsync(cancellationToken); + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new MySqlCommand("DELETE FROM activities WHERE id = @id", connection); + command.Parameters.AddWithValue("@id", id); + await command.ExecuteNonQueryAsync(cancellationToken); + } + + public async Task IsHealthyAsync(CancellationToken cancellationToken) + { + try + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new MySqlCommand("SELECT 1", connection); + await command.ExecuteScalarAsync(cancellationToken); + return true; + } + catch (Exception ex) + { + logger.LogWarning(ex, "MySQL health check failed"); + return false; + } + } + + private async Task OpenAsync(CancellationToken cancellationToken) + { + var connection = new MySqlConnection(_connectionString); + await connection.OpenAsync(cancellationToken); + return connection; + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlOptions.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlOptions.cs new file mode 100644 index 0000000..355d924 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlOptions.cs @@ -0,0 +1,30 @@ +namespace VacationPlanner.Services; + +/// Connection settings read from the same environment variables the Python sample uses. +public sealed record MySqlOptions(string Host, int Port, string User, string Password, string Database, bool SslEnabled, string Username) +{ + public static MySqlOptions FromEnvironment() + { + var username = Environment.GetEnvironmentVariable("LOGIN_NAME") ?? "paolo"; + if (string.IsNullOrWhiteSpace(username)) + { + throw new InvalidOperationException("LOGIN_NAME cannot be empty"); + } + + var ssl = (Environment.GetEnvironmentVariable("MYSQL_SSL") ?? "true").ToLowerInvariant(); + return new MySqlOptions( + Host: Require("MYSQL_HOST"), + Port: int.Parse(Environment.GetEnvironmentVariable("MYSQL_PORT") ?? "3306"), + User: Require("MYSQL_USER"), + Password: Require("MYSQL_PASSWORD"), + Database: Environment.GetEnvironmentVariable("MYSQL_DATABASE") ?? "sampledb", + SslEnabled: ssl is "true" or "1" or "yes", + Username: username); + } + + private static string Require(string name) => + Environment.GetEnvironmentVariable(name) is { Length: > 0 } value + ? value + : throw new InvalidOperationException( + $"Missing required environment variable: {name}. Set MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD (and optionally MYSQL_PORT, MYSQL_DATABASE, MYSQL_SSL)."); +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Services/StoreInitializer.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Services/StoreInitializer.cs new file mode 100644 index 0000000..c74eb50 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Services/StoreInitializer.cs @@ -0,0 +1,33 @@ +namespace VacationPlanner.Services; + +/// +/// Runs at startup with a bounded retry, so the app fails fast +/// (and the container exits) when the backing service never becomes reachable. +/// +public sealed class StoreInitializer( + IActivityStore store, + ILogger logger, + int attempts = 1, + TimeSpan delay = default) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + for (var attempt = 1; ; attempt++) + { + try + { + await store.InitializeAsync(cancellationToken); + logger.LogInformation("Activity store initialized after {Attempts} attempt(s).", attempt); + return; + } + catch (Exception ex) when (attempt < attempts && !cancellationToken.IsCancellationRequested) + { + logger.LogWarning(ex, "Activity store not ready (attempt {Attempt}/{Attempts}); retrying in {Delay}s.", + attempt, attempts, delay.TotalSeconds); + await Task.Delay(delay, cancellationToken); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/VacationPlanner.csproj b/samples/web-app-mysql-flexible-server/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..5034f28 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,11 @@ + + + net10.0 + enable + enable + VacationPlanner + + + + + diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/appsettings.json b/samples/web-app-mysql-flexible-server/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/wwwroot/favicon.ico b/samples/web-app-mysql-flexible-server/dotnet/src/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b1d5cf37d81c073dbacd66df3f69d9240359dda GIT binary patch literal 36791 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 D` on the Web App via `az webapp config appsettings set`. +- Zips the source under `../src` and deploys via `az webapp deploy`. + +## Variables + +Override any of the variables in [`variables.tf`](variables.tf) by editing [`terraform.tfvars`](terraform.tfvars) or passing `-var` to `terraform plan`. Notable MySQL ones: + +| Variable | Default | Description | +| ----------------------------- | ----------------- | ---------------------------------------- | +| `mysql_admin_login` | `myadmin` | Server administrator login | +| `mysql_admin_password` | `P@ssw0rd1234!` | Server administrator password (sensitive) | +| `mysql_version` | `8.0.21` | MySQL major version | +| `mysql_sku_name` | `B_Standard_B1ms` | Compute SKU | +| `mysql_storage_size_gb` | `32` | Storage size in GB | +| `mysql_backup_retention_days` | `7` | Backup retention | +| `mysql_database_name` | `plannerdb` | Application database | + +For non-dev deployments, set `mysql_admin_password` via env var: `MYSQL_ADMIN_PASSWORD=... bash deploy.sh`. + +## Related Documentation + +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/deploy.sh b/samples/web-app-mysql-flexible-server/dotnet/terraform/deploy.sh new file mode 100755 index 0000000..739e2e2 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/deploy.sh @@ -0,0 +1,278 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +MYSQL_ADMIN_USER="${MYSQL_ADMIN_USER:-myadmin}" +MYSQL_ADMIN_PASSWORD="${MYSQL_ADMIN_PASSWORD:-P@ssw0rd1234!}" +MYSQL_APP_USER="${MYSQL_APP_USER:-testuser}" +MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-TestP@ssw0rd123}" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Intialize Terraform +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" \ + -var "mysql_admin_login=$MYSQL_ADMIN_USER" \ + -var "mysql_admin_password=$MYSQL_ADMIN_PASSWORD" + +if [[ $? != 0 ]]; then + echo "Terraform plan failed. Exiting." + exit 1 +fi + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) +MYSQL_SERVER_NAME=$(terraform output -raw mysql_server_name) +MYSQL_FQDN_FULL=$(terraform output -raw mysql_fqdn) +DATABASE_NAME=$(terraform output -raw mysql_database_name) + +if [[ -z "$RESOURCE_GROUP_NAME" || -z "$WEB_APP_NAME" || -z "$MYSQL_SERVER_NAME" ]]; then + echo "Resource Group Name, Web App Name, or MySQL Server Name is empty. Exiting." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so MYSQL_PORT defaults to 3306. +MYSQL_FQDN="${MYSQL_FQDN_FULL%%:*}" +if [[ "$MYSQL_FQDN_FULL" == *:* ]]; then + MYSQL_PORT="${MYSQL_FQDN_FULL##*:}" +else + MYSQL_PORT=3306 +fi +echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" + +# Check if the MySQL CLI is installed +MYSQL_CHECK=$(command -v mysql) +if [[ -z "$MYSQL_CHECK" ]]; then + echo "[mysql] CLI is not installed. Install it with: sudo apt install -y mysql-client" >&2 + exit 1 +fi + +echo "Waiting for the [$MYSQL_SERVER_NAME] MySQL flexible server to accept connections..." +MYSQL_READY=0 +for attempt in $(seq 1 30); do + if MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + --connect-timeout=5 \ + -e "SELECT 1;" &>/dev/null; then + MYSQL_READY=1 + echo "MySQL flexible server is accepting connections (attempt $attempt/30)" + break + fi + echo "MySQL flexible server not ready yet (attempt $attempt/30)..." + sleep 2 +done + +if [ "$MYSQL_READY" -ne 1 ]; then + echo "MySQL flexible server did not become reachable after 30 attempts. Exiting." + exit 1 +fi + +# Create application user [$MYSQL_APP_USER] on the MySQL flexible server +echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + -e "CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; + GRANT ALL PRIVILEGES ON \`$DATABASE_NAME\`.* TO '$MYSQL_APP_USER'@'%'; + FLUSH PRIVILEGES;" + +if [ $? -eq 0 ]; then + echo "Login [$MYSQL_APP_USER] created successfully" +else + echo "Failed to create login [$MYSQL_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$MYSQL_APP_USER]..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT CURRENT_USER() AS user_name, DATABASE() AS db_name, NOW() AS server_time;" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$MYSQL_APP_USER]" +else + echo "Connection test failed with user [$MYSQL_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$DATABASE_NAME] database..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + );" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "INSERT IGNORE INTO activities (id, username, activity) VALUES + (MD5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (MD5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (MD5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (MD5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (MD5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (MD5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (MD5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (MD5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (MD5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade');" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Set MYSQL_USER + MYSQL_PASSWORD on the web app to point at the application user +echo "Setting MYSQL_USER=[$MYSQL_APP_USER] and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app..." +az webapp config appsettings set \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --settings MYSQL_USER="$MYSQL_APP_USER" MYSQL_PASSWORD="$MYSQL_APP_PASSWORD" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "MYSQL_USER and MYSQL_PASSWORD set successfully on the [$WEB_APP_NAME] web app" +else + echo "Failed to set MYSQL_USER and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app" + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table + +# Ping the web app to confirm the deployment is reachable +echo "Getting the default hostname of the [$WEB_APP_NAME] web app..." +WEB_APP_HOSTNAME=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query defaultHostName \ + --output tsv \ + --only-show-errors) +WEB_APP_URL="http://${WEB_APP_HOSTNAME}" +echo "You can visit your app at: $WEB_APP_URL" + +echo "Pinging [$WEB_APP_URL] to verify the web app responds..." +HTTP_CODE="000" +for attempt in $(seq 1 12); do + HTTP_CODE=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$WEB_APP_URL" || echo "000") + if [ "$HTTP_CODE" = "200" ]; then + echo "Web app responded with HTTP 200. Deployment verified successfully." + break + fi + echo "Web app not ready yet (attempt $attempt/12, HTTP $HTTP_CODE)..." + sleep 5 +done + +if [ "$HTTP_CODE" != "200" ]; then + echo "Web app did not return HTTP 200 after 12 attempts (last code: $HTTP_CODE). Deployment verification failed." + exit 1 +fi diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/main.tf new file mode 100644 index 0000000..eadc9ee --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/main.tf @@ -0,0 +1,198 @@ +locals { + prefix = lower(var.prefix) + suffix = lower(var.suffix) + resource_group_name = "${var.prefix}-rg" + log_analytics_name = "${local.prefix}-log-analytics-${local.suffix}" + virtual_network_name = "${local.prefix}-vnet-${local.suffix}" + nat_gateway_name = "${local.prefix}-nat-gateway-${local.suffix}" + webapp_subnet_nsg_name = "${local.prefix}-webapp-subnet-nsg-${local.suffix}" + pe_subnet_nsg_name = "${local.prefix}-pe-subnet-nsg-${local.suffix}" + mysql_server_name = "${local.prefix}-mysqlflex-${local.suffix}" + private_endpoint_name = "${local.prefix}-mysql-pe-${local.suffix}" + app_service_plan_name = "${local.prefix}-app-service-plan-${local.suffix}" + web_app_name = "${local.prefix}-webapp-${local.suffix}" + private_dns_zone_name = "privatelink.mysql.database.azure.com" + + # The MySQL flexible-server emulator embeds the LS-side TCP-proxy port directly in + # `fullyQualifiedDomainName` (e.g. ".mysql.database.localhost.localstack.cloud:4515"). + # Real Azure returns just the bare host on 3306. Split on ":" so the Web App always gets the + # right host + port without any post-apply shell logic. + mysql_fqdn_parts = split(":", module.mysql_flexible_server.fqdn) + mysql_host = local.mysql_fqdn_parts[0] + mysql_port = length(local.mysql_fqdn_parts) > 1 ? local.mysql_fqdn_parts[1] : "3306" +} + +data "azurerm_client_config" "current" {} + +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +module "log_analytics_workspace" { + source = "./modules/log_analytics" + name = local.log_analytics_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + tags = var.tags +} + +# VNet with two subnets: +# * app-subnet — delegated to Microsoft.Web/serverFarms for the Web App's regional +# VNet integration. Outbound through the NAT Gateway. +# * pe-subnet — hosts the Private Endpoint to the MySQL flexible server (no +# delegation; standard private-link subnet). +module "virtual_network" { + source = "./modules/virtual_network" + resource_group_name = azurerm_resource_group.example.name + location = var.location + vnet_name = local.virtual_network_name + address_space = var.vnet_address_space + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + subnets = [ + { + name : var.webapp_subnet_name + address_prefixes : var.webapp_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : "Microsoft.Web/serverFarms" + }, + { + name : var.pe_subnet_name + address_prefixes : var.pe_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : null + } + ] +} + +module "webapp_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.webapp_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } +} + +module "pe_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.pe_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.pe_subnet_name) = module.virtual_network.subnet_ids[var.pe_subnet_name] + } +} + +module "nat_gateway" { + source = "./modules/nat_gateway" + name = local.nat_gateway_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + sku_name = var.nat_gateway_sku_name + idle_timeout_in_minutes = var.nat_gateway_idle_timeout_in_minutes + zones = var.nat_gateway_zones + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } + tags = var.tags +} + +module "private_dns_zone" { + source = "./modules/private_dns_zone" + name = local.private_dns_zone_name + resource_group_name = azurerm_resource_group.example.name + tags = var.tags + virtual_networks_to_link = { + (module.virtual_network.name) = { + subscription_id = data.azurerm_client_config.current.subscription_id + resource_group_name = azurerm_resource_group.example.name + } + } +} + +module "mysql_flexible_server" { + source = "./modules/mysql_flexible_server" + name = local.mysql_server_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + administrator_login = var.mysql_admin_login + administrator_password = var.mysql_admin_password + mysql_version = var.mysql_version + sku_name = var.mysql_sku_name + storage_size_gb = var.mysql_storage_size_gb + backup_retention_days = var.mysql_backup_retention_days + database_name = var.mysql_database_name + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +module "private_endpoint" { + source = "./modules/private_endpoint" + name = local.private_endpoint_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + subnet_id = module.virtual_network.subnet_ids[var.pe_subnet_name] + tags = var.tags + private_connection_resource_id = module.mysql_flexible_server.id + is_manual_connection = false + subresource_name = "mysqlServer" + private_dns_zone_group_name = "private-dns-zone-group" + private_dns_zone_group_ids = [module.private_dns_zone.id] +} + +module "app_service_plan" { + source = "./modules/app_service_plan" + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Note: MYSQL_USER and MYSQL_PASSWORD are intentionally NOT set here. The post-apply step in +# deploy.sh connects to the server (via the firewall-allowed public endpoint) as the admin, +# creates the application user `testuser`, seeds the schema, and then writes `MYSQL_USER` / +# `MYSQL_PASSWORD` onto this Web App via `az webapp config appsettings set`. The server-admin +# login is never exposed to the Web App at runtime. +module "web_app" { + source = "./modules/web_app" + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + service_plan_id = module.app_service_plan.id + https_only = var.https_only + virtual_network_subnet_id = module.virtual_network.subnet_ids[var.webapp_subnet_name] + vnet_route_all_enabled = true + public_network_access_enabled = var.public_network_access_enabled + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + dotnet_version = var.dotnet_version + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + ENABLE_ORYX_BUILD = "true" + MYSQL_HOST = local.mysql_host + MYSQL_PORT = local.mysql_port + MYSQL_DATABASE = module.mysql_flexible_server.database_name + MYSQL_SSL = "true" + LOGIN_NAME = var.login_name + WEBSITES_PORT = var.websites_port + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf new file mode 100644 index 0000000..98a3e4d --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_service_plan" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_service_plan.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf new file mode 100644 index 0000000..f1455ea --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf @@ -0,0 +1,19 @@ +output "id" { + value = azurerm_service_plan.example.id + description = "Specifies the resource id of the App Service Plan" +} + +output "name" { + value = azurerm_service_plan.example.name + description = "Specifies the name of the App Service Plan" +} + +output "location" { + value = azurerm_service_plan.example.location + description = "Specifies the location of the App Service Plan" +} + +output "resource_group_name" { + value = azurerm_service_plan.example.resource_group_name + description = "Specifies the resource group name of the App Service Plan" +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf new file mode 100644 index 0000000..e543066 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf @@ -0,0 +1,42 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the App Service Plan." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the App Service Plan." + type = string +} + +variable "sku_name" { + description = "(Required) Specifies the SKU name for the App Service Plan." + type = string +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf new file mode 100644 index 0000000..2f88414 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf @@ -0,0 +1,14 @@ +resource "azurerm_log_analytics_workspace" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku = var.sku + tags = var.tags + retention_in_days = var.retention_in_days != "" ? var.retention_in_days : null + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf new file mode 100644 index 0000000..fe2c398 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf @@ -0,0 +1,30 @@ +output "id" { + value = azurerm_log_analytics_workspace.example.id + description = "Specifies the resource id of the log analytics workspace" +} + +output "location" { + value = azurerm_log_analytics_workspace.example.location + description = "Specifies the location of the log analytics workspace" +} + +output "name" { + value = azurerm_log_analytics_workspace.example.name + description = "Specifies the name of the log analytics workspace" +} + +output "resource_group_name" { + value = azurerm_log_analytics_workspace.example.resource_group_name + description = "Specifies the name of the resource group that contains the log analytics workspace" +} + +output "workspace_id" { + value = azurerm_log_analytics_workspace.example.workspace_id + description = "Specifies the workspace id of the log analytics workspace" +} + +output "primary_shared_key" { + value = azurerm_log_analytics_workspace.example.primary_shared_key + description = "Specifies the workspace key of the log analytics workspace" + sensitive = true +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf new file mode 100644 index 0000000..2db6a01 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf @@ -0,0 +1,37 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Log Analytics workspace" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure Log Analytics workspace" + type = string +} + +variable "sku" { + description = "(Optional) Specifies the sku of the Azure Log Analytics workspace" + type = string + default = "PerGB2018" + + validation { + condition = contains(["Free", "Standalone", "PerNode", "PerGB2018"], var.sku) + error_message = "The log analytics sku is incorrect." + } +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Log Analytics workspace." + type = map(any) + default = {} +} + +variable "retention_in_days" { + description = " (Optional) Specifies the workspace data retention in days. Possible values are either 7 (Free Tier only) or range between 30 and 730." + type = number + default = 30 +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/main.tf new file mode 100644 index 0000000..c599dab --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/main.tf @@ -0,0 +1,55 @@ +resource "azurerm_mysql_flexible_server" "this" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + version = var.mysql_version + administrator_login = var.administrator_login + administrator_password = var.administrator_password + sku_name = var.sku_name + backup_retention_days = var.backup_retention_days + # Public access is enabled by default (no delegated_subnet_id / private_dns_zone_id is set), + # and a permissive firewall rule lets the deploy machine reach the server just long enough to + # run the post-deploy mysql bootstrap. The Web App itself reaches the server through a Private + # Endpoint (see the private_endpoint module in main.tf). + geo_redundant_backup_enabled = false + + storage { + size_gb = var.storage_size_gb + } + + tags = var.tags +} + +resource "azurerm_mysql_flexible_database" "this" { + name = var.database_name + resource_group_name = var.resource_group_name + server_name = azurerm_mysql_flexible_server.this.name + charset = var.database_charset + collation = var.database_collation +} + +resource "azurerm_mysql_flexible_server_firewall_rule" "allow_all" { + name = var.firewall_rule_name + resource_group_name = var.resource_group_name + server_name = azurerm_mysql_flexible_server.this.name + start_ip_address = var.firewall_start_ip + end_ip_address = var.firewall_end_ip +} + +resource "azurerm_monitor_diagnostic_setting" "this" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_mysql_flexible_server.this.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "MySqlSlowLogs" + } + + enabled_log { + category = "MySqlAuditLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/outputs.tf new file mode 100644 index 0000000..cda9c03 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/outputs.tf @@ -0,0 +1,15 @@ +output "id" { + value = azurerm_mysql_flexible_server.this.id +} + +output "name" { + value = azurerm_mysql_flexible_server.this.name +} + +output "fqdn" { + value = azurerm_mysql_flexible_server.this.fqdn +} + +output "database_name" { + value = azurerm_mysql_flexible_database.this.name +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/variables.tf new file mode 100644 index 0000000..2852548 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/mysql_flexible_server/variables.tf @@ -0,0 +1,81 @@ +variable "name" { + description = "Name of the MySQL flexible server." + type = string +} + +variable "resource_group_name" { + type = string +} + +variable "location" { + type = string +} + +variable "administrator_login" { + type = string +} + +variable "administrator_password" { + type = string + sensitive = true +} + +variable "mysql_version" { + type = string + default = "8.0.21" +} + +variable "sku_name" { + type = string + default = "B_Standard_B1ms" +} + +variable "storage_size_gb" { + type = number + default = 32 +} + +variable "backup_retention_days" { + type = number + default = 7 +} + +variable "database_name" { + type = string + default = "plannerdb" +} + +variable "database_charset" { + type = string + default = "utf8mb4" +} + +variable "database_collation" { + type = string + default = "utf8mb4_unicode_ci" +} + +variable "firewall_rule_name" { + description = "Server-level firewall rule that allows the deploy machine to run the mysql bootstrap." + type = string + default = "AllowAllIPs" +} + +variable "firewall_start_ip" { + type = string + default = "0.0.0.0" +} + +variable "firewall_end_ip" { + type = string + default = "255.255.255.255" +} + +variable "log_analytics_workspace_id" { + type = string +} + +variable "tags" { + type = map(string) + default = {} +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf new file mode 100644 index 0000000..cc384af --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf @@ -0,0 +1,42 @@ +resource "azurerm_public_ip" "example" { + name = "${var.name}PublicIp" + location = var.location + resource_group_name = var.resource_group_name + allocation_method = "Static" + sku = "Standard" + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku_name = var.sku_name + idle_timeout_in_minutes = var.idle_timeout_in_minutes + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway_public_ip_association" "example" { + nat_gateway_id = azurerm_nat_gateway.example.id + public_ip_address_id = azurerm_public_ip.example.id +} + +resource "azurerm_subnet_nat_gateway_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + nat_gateway_id = azurerm_nat_gateway.example.id +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf new file mode 100644 index 0000000..1e3fd03 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf @@ -0,0 +1,14 @@ +output "name" { + value = azurerm_nat_gateway.example.name + description = "Specifies the name of the Azure NAT Gateway" +} + +output "id" { + value = azurerm_nat_gateway.example.id + description = "Specifies the resource id of the Azure NAT Gateway" +} + +output "public_ip_address" { + value = azurerm_public_ip.example.ip_address + description = "Contains the public IP address of the Azure NAT Gateway." +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf new file mode 100644 index 0000000..c1c8ea5 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf @@ -0,0 +1,43 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure NAT Gateway" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure NAT Gateway" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure NAT Gateway" + type = map(any) + default = {} +} + +variable "sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the NAT Gateway" + type = map(string) +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf new file mode 100644 index 0000000..c649652 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf @@ -0,0 +1,53 @@ +resource "azurerm_network_security_group" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + dynamic "security_rule" { + for_each = try(var.security_rules, []) + content { + name = try(security_rule.value.name, null) + priority = try(security_rule.value.priority, null) + direction = try(security_rule.value.direction, null) + access = try(security_rule.value.access, null) + protocol = try(security_rule.value.protocol, null) + source_port_range = try(security_rule.value.source_port_range, null) + source_port_ranges = try(security_rule.value.source_port_ranges, null) + destination_port_range = try(security_rule.value.destination_port_range, null) + destination_port_ranges = try(security_rule.value.destination_port_ranges, null) + source_address_prefix = try(security_rule.value.source_address_prefix, null) + source_address_prefixes = try(security_rule.value.source_address_prefixes, null) + destination_address_prefix = try(security_rule.value.destination_address_prefix, null) + destination_address_prefixes = try(security_rule.value.destination_address_prefixes, null) + source_application_security_group_ids = try(security_rule.value.source_application_security_group_ids, null) + destination_application_security_group_ids = try(security_rule.value.destination_application_security_group_ids, null) + } + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet_network_security_group_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + network_security_group_id = azurerm_network_security_group.example.id +} + +resource "azurerm_monitor_diagnostic_setting" "settings" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_network_security_group.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "NetworkSecurityGroupEvent" + } + + enabled_log { + category = "NetworkSecurityGroupRuleCounter" + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf new file mode 100644 index 0000000..b8ca8d5 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the network security group" + value = azurerm_network_security_group.example.name +} + +output "id" { + description = "Specifies the resource id of the network security group" + value = azurerm_network_security_group.example.id +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf new file mode 100644 index 0000000..04eb07e --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf @@ -0,0 +1,51 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Network Security Group" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Network Security Group" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Network Security Group" + type = string +} + +variable "security_rules" { + description = "(Optional) Specifies the security rules of the Azure Network Security Group" + type = list(object({ + name = string + priority = number + direction = string + access = string + protocol = string + source_port_range = string + source_port_ranges = list(string) + destination_port_range = string + destination_port_ranges = list(string) + source_address_prefix = string + source_address_prefixes = list(string) + destination_address_prefix = string + destination_address_prefixes = list(string) + source_application_security_group_ids = list(string) + destination_application_security_group_ids = list(string) + })) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the Azure Network Security Group" + type = map(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Network Security Group" + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace" + type = string +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf new file mode 100644 index 0000000..e61df00 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_private_dns_zone" "example" { + name = var.name + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "example" { + for_each = var.virtual_networks_to_link + + name = "link_to_${lower(basename(each.key))}" + private_dns_zone_id = azurerm_private_dns_zone.example.id + virtual_network_id = "/subscriptions/${each.value.subscription_id}/resourceGroups/${each.value.resource_group_name}/providers/Microsoft.Network/virtualNetworks/${each.key}" + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf new file mode 100644 index 0000000..ca141f3 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the private dns zone" + value = azurerm_private_dns_zone.example.name +} + +output "id" { + description = "Specifies the resource id of the private dns zone" + value = azurerm_private_dns_zone.example.id +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf new file mode 100644 index 0000000..8d0c0cc --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf @@ -0,0 +1,20 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private DNS Zone" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Private DNS Zone" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Private DNS Zone" + default = {} +} + +variable "virtual_networks_to_link" { + description = "(Optional) Specifies the subscription id, resource group name, and name of the virtual networks to which create a virtual network link" + type = map(any) + default = {} +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf new file mode 100644 index 0000000..62bfbfb --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf @@ -0,0 +1,26 @@ +resource "azurerm_private_endpoint" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + subnet_id = var.subnet_id + tags = var.tags + + private_service_connection { + name = "${var.name}Connection" + private_connection_resource_id = var.private_connection_resource_id + is_manual_connection = var.is_manual_connection + subresource_names = try([var.subresource_name], null) + request_message = try(var.request_message, null) + } + + private_dns_zone_group { + name = var.private_dns_zone_group_name + private_dns_zone_ids = var.private_dns_zone_group_ids + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf new file mode 100644 index 0000000..367ab51 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the private endpoint." + value = azurerm_private_endpoint.example.name +} + +output "id" { + description = "Specifies the resource id of the private endpoint." + value = azurerm_private_endpoint.example.id +} + +output "private_dns_zone_group" { + description = "Specifies the private dns zone group of the private endpoint." + value = azurerm_private_endpoint.example.private_dns_zone_group +} + +output "private_dns_zone_configs" { + description = "Specifies the private dns zone(s) configuration" + value = azurerm_private_endpoint.example.private_dns_zone_configs +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf new file mode 100644 index 0000000..2b7a888 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf @@ -0,0 +1,61 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private Endpoint. Changing this forces a new resource to be created." + type = string +} + +variable "resource_group_name" { + description = "(Required) The name of the resource group. Changing this forces a new resource to be created." + type = string +} + +variable "private_connection_resource_id" { + description = "(Required) Specifies the resource id of the private link service" + type = string +} + +variable "location" { + description = "(Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created." + type = string +} + +variable "subnet_id" { + description = "(Required) Specifies the resource id of the subnet" + type = string +} + +variable "is_manual_connection" { + description = "(Optional) Specifies whether the Azure Private Endpoint connection requires manual approval from the remote resource owner." + type = string + default = false +} + +variable "subresource_name" { + description = "(Optional) Specifies a subresource name which the Azure Private Endpoint is able to connect to." + type = string + default = null +} + +variable "request_message" { + description = "(Optional) Specifies a message passed to the owner of the remote resource when the Azure Private Endpoint attempts to establish the connection to the remote resource." + type = string + default = null +} + +variable "private_dns_zone_group_name" { + description = "(Required) Specifies the Name of the Private DNS Zone Group. Changing this forces a new private_dns_zone_group resource to be created." + type = string +} + +variable "private_dns_zone_group_ids" { + description = "(Required) Specifies the list of Private DNS Zones to include within the private_dns_zone_group." + type = list(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Azure Private Endpoint." + default = {} +} + +variable "private_dns" { + default = {} +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf new file mode 100644 index 0000000..2b7af04 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf @@ -0,0 +1,58 @@ +resource "azurerm_virtual_network" "example" { + name = var.vnet_name + address_space = var.address_space + location = var.location + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet" "example" { + for_each = { for subnet in var.subnets : subnet.name => subnet if subnet != null } + + name = each.key + resource_group_name = var.resource_group_name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = each.value.address_prefixes + private_endpoint_network_policies = each.value.private_endpoint_network_policies + private_link_service_network_policies_enabled = each.value.private_link_service_network_policies_enabled + + dynamic "delegation" { + for_each = each.value.delegation != null ? [each.value.delegation] : [] + content { + name = "delegation" + + service_delegation { + name = delegation.value + } + } + } + + lifecycle { + ignore_changes = [ + delegation + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_virtual_network.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + # NOTE: we deliberately do NOT add `enabled_metric { category = "AllMetrics" }` here. + # Many Azure subscriptions have a built-in or org-level Azure Policy + # (DeployIfNotExists) that auto-creates a `diagnosticSettings` resource on every new VNet + # forwarding `AllMetrics` to a workspace. Azure rejects a second diag setting that targets + # the same (resource, category, sink) triplet with a 409 Conflict — even if its name is + # different. The policy-managed one already covers AllMetrics; we contribute only the + # VMProtectionAlerts logs (typically NOT included by the default policy). + enabled_log { + category = "VMProtectionAlerts" + } +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf new file mode 100644 index 0000000..b464308 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the virtual network" + value = azurerm_virtual_network.example.name +} + +output "vnet_id" { + description = "Specifies the resource id of the virtual network" + value = azurerm_virtual_network.example.id +} + +output "subnet_ids" { + description = "Contains a list of the the resource id of the subnets" + value = { for subnet in azurerm_subnet.example : subnet.name => subnet.id } +} + +output "subnet_ids_as_list" { + description = "Returns the list of the subnet ids as a list of strings." + value = [for subnet in azurerm_subnet.example : subnet.id] +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf new file mode 100644 index 0000000..f8c0b0e --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf @@ -0,0 +1,40 @@ +variable "resource_group_name" { + description = "Resource Group name" + type = string +} + +variable "location" { + description = "Location in which to deploy the network" + type = string +} + +variable "vnet_name" { + description = "VNET name" + type = string +} + +variable "address_space" { + description = "VNET address space" + type = list(string) +} + +variable "subnets" { + description = "Subnets configuration" + type = list(object({ + name = string + address_prefixes = list(string) + private_endpoint_network_policies = string + private_link_service_network_policies_enabled = bool + delegation = string + })) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Virtual Network resource." + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/main.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/main.tf new file mode 100644 index 0000000..a2eed3a --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/main.tf @@ -0,0 +1,71 @@ +resource "azurerm_linux_web_app" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + service_plan_id = var.service_plan_id + https_only = var.https_only + virtual_network_subnet_id = var.virtual_network_subnet_id + public_network_access_enabled = var.public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + identity { + type = "SystemAssigned" + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + vnet_route_all_enabled = var.vnet_route_all_enabled + application_stack { + dotnet_version = var.dotnet_version + } + } + + app_settings = var.app_settings + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_linux_web_app.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "AppServiceHTTPLogs" + } + + enabled_log { + category = "AppServiceConsoleLogs" + } + + enabled_log { + category = "AppServiceAppLogs" + } + + enabled_log { + category = "AppServiceAuditLogs" + } + + enabled_log { + category = "AppServiceIPSecAuditLogs" + } + + enabled_log { + category = "AppServicePlatformLogs" + } + + enabled_log { + category = "AppServiceAuthenticationLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf new file mode 100644 index 0000000..d7b6981 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf @@ -0,0 +1,24 @@ +output "id" { + value = azurerm_linux_web_app.example.id + description = "Specifies the resource id of the Web App" +} + +output "name" { + value = azurerm_linux_web_app.example.name + description = "Specifies the name of the Web App" +} + +output "default_hostname" { + value = azurerm_linux_web_app.example.default_hostname + description = "Specifies the default hostname of the Web App" +} + +output "outbound_ip_addresses" { + value = azurerm_linux_web_app.example.outbound_ip_addresses + description = "Specifies the outbound IP addresses of the Web App" +} + +output "principal_id" { + value = azurerm_linux_web_app.example.identity[0].principal_id + description = "Specifies the Principal ID of the System Assigned Managed Identity" +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/variables.tf new file mode 100644 index 0000000..81e6679 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/modules/web_app/variables.tf @@ -0,0 +1,89 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the Web App." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Web App." + type = string +} + +variable "service_plan_id" { + description = "(Required) Specifies the ID of the App Service Plan within which to create this Web App." + type = string +} + +variable "https_only" { + description = "(Optional) Specifies whether the Web App requires HTTPS connections." + type = bool + default = false +} + +variable "virtual_network_subnet_id" { + description = "(Optional) The subnet id which will be used by this Web App for regional virtual network integration." + type = string + default = null +} + +variable "vnet_route_all_enabled" { + description = "(Optional) Specifies whether to route all traffic from the Web App into the virtual network. This is only applicable if virtual_network_subnet_id is specified. Defaults to false." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "always_on" { + description = "(Optional) Specifies whether the Web App is Always On enabled." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Web App." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests." + type = string + default = "1.2" +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "app_settings" { + description = "(Optional) A map of key-value pairs for App Settings." + type = map(string) + default = {} +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/outputs.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/outputs.tf new file mode 100644 index 0000000..cd2b742 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/outputs.tf @@ -0,0 +1,27 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "mysql_server_name" { + value = module.mysql_flexible_server.name +} + +output "mysql_fqdn" { + value = module.mysql_flexible_server.fqdn +} + +output "mysql_database_name" { + value = module.mysql_flexible_server.database_name +} + +output "app_service_plan_name" { + value = module.app_service_plan.name +} + +output "web_app_name" { + value = module.web_app.name +} + +output "web_app_url" { + value = module.web_app.default_hostname +} diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/providers.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/providers.tf new file mode 100644 index 0000000..1f06025 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/providers.tf @@ -0,0 +1,24 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=5.1.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/terraform.tfvars b/samples/web-app-mysql-flexible-server/dotnet/terraform/terraform.tfvars new file mode 100644 index 0000000..919af4f --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/terraform.tfvars @@ -0,0 +1,3 @@ +prefix = "local" +suffix = "test" +location = "westeurope" \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/dotnet/terraform/variables.tf b/samples/web-app-mysql-flexible-server/dotnet/terraform/variables.tf new file mode 100644 index 0000000..ed8d7da --- /dev/null +++ b/samples/web-app-mysql-flexible-server/dotnet/terraform/variables.tf @@ -0,0 +1,196 @@ +variable "prefix" { + description = "Prefix for the name of the Azure resources." + type = string + default = "local" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "Suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "Specifies the location for all resources." + type = string + default = "westeurope" +} + +# ----------------------------------------------------------------------------- +# MySQL flexible server +# ----------------------------------------------------------------------------- +variable "mysql_admin_login" { + description = "Administrator login for the MySQL flexible server." + type = string + default = "myadmin" +} + +variable "mysql_admin_password" { + description = "Administrator password for the MySQL flexible server. Pass via -var or the MYSQL_ADMIN_PASSWORD env var; do NOT commit." + type = string + sensitive = true + default = "P@ssw0rd1234!" +} + +variable "mysql_version" { + description = "MySQL major version." + type = string + default = "8.0.21" + + validation { + condition = contains(["5.7", "8.0.21"], var.mysql_version) + error_message = "The mysql_version must be one of: 5.7, 8.0.21." + } +} + +variable "mysql_sku_name" { + description = "Compute SKU for the MySQL flexible server (e.g. B_Standard_B1ms)." + type = string + default = "B_Standard_B1ms" +} + +variable "mysql_storage_size_gb" { + description = "Storage size in GB for the MySQL flexible server." + type = number + default = 32 +} + +variable "mysql_backup_retention_days" { + description = "Backup retention period in days for the MySQL flexible server." + type = number + default = 7 +} + +variable "mysql_database_name" { + description = "Name of the application database to create on the MySQL flexible server." + type = string + default = "plannerdb" +} + +# ----------------------------------------------------------------------------- +# App Service / Web App +# ----------------------------------------------------------------------------- +variable "os_type" { + description = "OS type for the App Service Plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + type = bool + default = false +} + +variable "sku_name" { + description = "App Service Plan SKU name." + type = string + default = "S1" +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "https_only" { + type = bool + default = false +} + +variable "minimum_tls_version" { + type = string + default = "1.2" +} + +variable "always_on" { + type = bool + default = true +} + +variable "http2_enabled" { + type = bool + default = false +} + +variable "public_network_access_enabled" { + type = bool + default = true +} + +variable "login_name" { + description = "Login name for the application (scopes activity ownership)." + type = string + default = "paolo" +} + +variable "websites_port" { + type = number + default = 8000 +} + +variable "tags" { + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} + +# ----------------------------------------------------------------------------- +# Networking +# ----------------------------------------------------------------------------- +variable "vnet_address_space" { + type = list(string) + default = ["10.0.0.0/8"] +} + +variable "webapp_subnet_name" { + type = string + default = "app-subnet" +} + +variable "webapp_subnet_address_prefix" { + type = list(string) + default = ["10.0.0.0/24"] +} + +variable "pe_subnet_name" { + type = string + default = "pe-subnet" +} + +variable "pe_subnet_address_prefix" { + type = list(string) + default = ["10.0.1.0/24"] +} + +variable "nat_gateway_sku_name" { + type = string + default = "Standard" +} + +variable "nat_gateway_idle_timeout_in_minutes" { + type = number + default = 4 +} + +variable "nat_gateway_zones" { + type = list(string) + default = ["1"] +} From b92bba9a7922c907e3aa31ff43352504bdbdfebf Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Mon, 7 Sep 2026 17:13:56 +0200 Subject: [PATCH 05/13] Add the .NET 10 port of the PostgreSQL flexible server web app sample Npgsql store with the same DDL, indexes, md5 ids, 30x2s startup retry and libpq "prefer" TLS semantics as the Python sample; artifacts switch to DOTNETCORE|10.0 with a source zip for the Oryx build, dotnet_version in Terraform and 'dotnetcore' in Bicep. Co-Authored-By: Claude Fable 5.1 --- .../dotnet/README.md | 107 ++ .../dotnet/bicep/README.md | 101 ++ .../dotnet/bicep/deploy.sh | 336 +++++ .../dotnet/bicep/main.bicep | 308 +++++ .../dotnet/bicep/main.bicepparam | 19 + .../bicep/modules/app-service-plan.bicep | 154 +++ .../dotnet/bicep/modules/log-analytics.bicep | 45 + .../modules/postgresql-flexible-server.bicep | 171 +++ .../bicep/modules/private-dns-zone.bicep | 41 + .../bicep/modules/private-endpoint.bicep | 72 ++ .../bicep/modules/virtual-network.bicep | 238 ++++ .../dotnet/bicep/modules/web-app.bicep | 213 ++++ .../dotnet/images/architecture.png | Bin 0 -> 99609 bytes .../dotnet/images/vacation-planner.png | Bin 0 -> 85690 bytes .../dotnet/scripts/README.md | 72 ++ .../dotnet/scripts/call-web-app.sh | 201 +++ .../dotnet/scripts/deploy.sh | 1113 +++++++++++++++++ .../dotnet/scripts/validate.sh | 135 ++ .../dotnet/src/Models/Activity.cs | 4 + .../dotnet/src/Pages/Delete.cshtml | 2 + .../dotnet/src/Pages/Delete.cshtml.cs | 22 + .../dotnet/src/Pages/Index.cshtml | 265 ++++ .../dotnet/src/Pages/Index.cshtml.cs | 46 + .../dotnet/src/Pages/_ViewImports.cshtml | 4 + .../dotnet/src/Program.cs | 35 + .../dotnet/src/Services/ActivityId.cs | 15 + .../dotnet/src/Services/IActivityStore.cs | 21 + .../src/Services/PostgresActivityStore.cs | 113 ++ .../dotnet/src/Services/PostgresOptions.cs | 28 + .../dotnet/src/Services/StoreInitializer.cs | 33 + .../dotnet/src/VacationPlanner.csproj | 11 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/favicon.ico | Bin 0 -> 36791 bytes .../dotnet/src/wwwroot/style.css | 341 +++++ .../dotnet/terraform/README.md | 69 + .../dotnet/terraform/deploy.sh | 266 ++++ .../dotnet/terraform/main.tf | 197 +++ .../modules/app_service_plan/main.tf | 25 + .../modules/app_service_plan/outputs.tf | 19 + .../modules/app_service_plan/variables.tf | 42 + .../terraform/modules/log_analytics/main.tf | 14 + .../terraform/modules/log_analytics/output.tf | 30 + .../modules/log_analytics/variables.tf | 37 + .../terraform/modules/nat_gateway/main.tf | 42 + .../terraform/modules/nat_gateway/output.tf | 14 + .../modules/nat_gateway/variables.tf | 43 + .../modules/network_security_group/main.tf | 53 + .../modules/network_security_group/outputs.tf | 9 + .../network_security_group/variables.tf | 51 + .../modules/postgres_flexible_server/main.tf | 46 + .../postgres_flexible_server/outputs.tf | 15 + .../postgres_flexible_server/variables.tf | 81 ++ .../modules/private_dns_zone/main.tf | 25 + .../modules/private_dns_zone/outputs.tf | 9 + .../modules/private_dns_zone/variables.tf | 20 + .../modules/private_endpoint/main.tf | 26 + .../modules/private_endpoint/outputs.tf | 19 + .../modules/private_endpoint/variables.tf | 61 + .../terraform/modules/virtual_network/main.tf | 58 + .../modules/virtual_network/outputs.tf | 19 + .../modules/virtual_network/variables.tf | 40 + .../dotnet/terraform/modules/web_app/main.tf | 71 ++ .../terraform/modules/web_app/outputs.tf | 24 + .../terraform/modules/web_app/variables.tf | 89 ++ .../dotnet/terraform/outputs.tf | 27 + .../dotnet/terraform/providers.tf | 24 + .../dotnet/terraform/terraform.tfvars | 3 + .../dotnet/terraform/variables.tf | 196 +++ .../dotnet/visio/architecture.vsdx | Bin 0 -> 542962 bytes 69 files changed, 6039 insertions(+) create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/README.md create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/README.md create mode 100755 samples/web-app-postgresql-flexible-server/dotnet/bicep/deploy.sh create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicepparam create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/log-analytics.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/postgresql-flexible-server.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/virtual-network.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/web-app.bicep create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/images/architecture.png create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/images/vacation-planner.png create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/scripts/README.md create mode 100755 samples/web-app-postgresql-flexible-server/dotnet/scripts/call-web-app.sh create mode 100755 samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh create mode 100755 samples/web-app-postgresql-flexible-server/dotnet/scripts/validate.sh create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Models/Activity.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Services/ActivityId.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Services/IActivityStore.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresOptions.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/Services/StoreInitializer.cs create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/appsettings.json create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/wwwroot/favicon.ico create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/src/wwwroot/style.css create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/README.md create mode 100755 samples/web-app-postgresql-flexible-server/dotnet/terraform/deploy.sh create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/main.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/outputs.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/providers.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/terraform.tfvars create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/terraform/variables.tf create mode 100644 samples/web-app-postgresql-flexible-server/dotnet/visio/architecture.vsdx diff --git a/samples/web-app-postgresql-flexible-server/dotnet/README.md b/samples/web-app-postgresql-flexible-server/dotnet/README.md new file mode 100644 index 0000000..dfdb347 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/README.md @@ -0,0 +1,107 @@ +# Azure Web App with Azure Database for PostgreSQL flexible server + +This sample demonstrates an ASP.NET Core Razor Pages single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` table of the `PlannerDB` database on an [Azure Database for PostgreSQL flexible server](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview). The server is reached through a [Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `postgresqlServer`) with the `privatelink.postgres.database.azure.com` Private DNS Zone, while a permissive server-level firewall rule lets the deploy machine run the post-create psql bootstrap that creates the application role and seeds the schema. + +## Architecture + +![Architecture Diagram](./images/architecture.png) + +The web app enables users to plan and manage vacation activities; all data is persisted in PostgreSQL. The solution is composed of the following Azure resources: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Delegated to `Microsoft.Web/serverFarms` for regional VNet integration of the Web App. + - *pe-subnet*: Hosts the Private Endpoint to the PostgreSQL flexible server. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.postgres.database.azure.com`, linked to the VNet. The Private Endpoint's DNS-zone group auto-registers the `A` record for the server, so the Web App resolves the server's private IP through the VNet. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `postgresqlServer`): Secures access to the PostgreSQL flexible server from the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Deterministic outbound connectivity for both subnets. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): One NSG per subnet. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics. +8. [Azure Database for PostgreSQL flexible server](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview): Public-access server hosting the `PlannerDB` database. Burstable `Standard_B1ms`, version 16, 32 GiB storage, 7-day backup retention, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) is created so the deploy machine can run the post-create psql bootstrap; the Web App itself reaches the server through the Private Endpoint. +9. [PostgreSQL database](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-servers) `PlannerDB`: Created at provisioning time; the post-deploy psql step creates the `activities` table and seeds three demo rows. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core *Vacation Planner* app with regional VNet integration into *app-subnet*. The Web App connects to PostgreSQL using a dedicated application role (`testuser`) — the server-admin login is never used at runtime. +12. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): *(Optional)* Configures continuous deployment from a public GitHub repository. + +The deploy scripts follow the same pattern as the sibling [`web-app-sql-database`](../../web-app-sql-database/dotnet/) sample: after provisioning, they (i) connect as the server admin via the public endpoint + firewall rule, (ii) create the application role `testuser` with its own password, (iii) grant minimum schema privileges on `PlannerDB`, (iv) create the `activities` table, (v) seed three sample rows, and (vi) write `PG_USER=testuser` + `PG_PASSWORD` onto the Web App's app settings. The server-admin login is never written into the Web App's runtime configuration. + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/) +- [Npgsql](https://www.npgsql.org/doc/) +- [PostgreSQL client tools](https://www.postgresql.org/download/) (`psql`) — required by the deploy scripts to create the application role and seed data +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep), if you plan to install the sample via Bicep +- [Terraform](https://developer.hashicorp.com/terraform/downloads), if you plan to install the sample via Terraform + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN`. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain yours. Pull and start the emulator: + +```bash +docker pull localstack/localstack-azure + +export LOCALSTACK_AUTH_TOKEN= +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All three variants provision the same topology: VNet + pe-subnet hosting a Private Endpoint targeting a public-access PostgreSQL flexible server, with a Private DNS Zone linked to the VNet. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process pulls and builds Docker images (LocalStack itself plus the `postgres:18` backing container for the flexible-server emulator). This is a one-time operation — subsequent deployments are much faster. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the *Vacation Planner* UI with the three seeded activities (*Go to Paris*, *Go to London*, *Go to Mexico*) and can add, edit, and remove activities. + +![Vacation Planner UI](./images/vacation-planner.png) + +You can use the `scripts/call-web-app.sh` Bash script to call the web app from outside the emulator. The script demonstrates four call paths: + +1. **Through the LocalStack for Azure emulator** via the default hostname. +2. **Via localhost and host port** mapped to the container's port `80`. +3. **Via container IP address** on port `80`. +4. **Via the default hostname** `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## PostgreSQL Tooling + +You can use [pgAdmin](https://www.pgadmin.org/) to explore and manage the deployed database. Connect using: + +| Field | Value | +| -------- | --------------------------------------------------------------------------- | +| Host | `localhost` | +| Port | (see `docker ps` for the host-mapped port of the backing `postgres:18` container) | +| Database | `PlannerDB` | +| Username | `testuser` *(or `pgadmin` for admin operations)* | +| Password | `TestP@ssw0rd123` *(or `P@ssw0rd1234!` for the admin)* | + +Or use [psql](https://www.postgresql.org/docs/current/app-psql.html): + +```bash +PGPASSWORD='TestP@ssw0rd123' psql -h localhost -p -U testuser -d PlannerDB +PlannerDB=> SELECT id, username, activity, created_at FROM activities; +``` + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure Database for PostgreSQL — flexible server](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/) +- [Quickstart: Deploy an ASP.NET web app to Azure App Service](https://learn.microsoft.com/en-us/azure/app-service/quickstart-dotnetcore?pivots=development-environment-cli) +- [Npgsql documentation](https://www.npgsql.org/doc/) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/README.md b/samples/web-app-postgresql-flexible-server/dotnet/bicep/README.md new file mode 100644 index 0000000..55ee831 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/README.md @@ -0,0 +1,101 @@ +# Bicep Deployment + +This directory contains the Bicep template and a deployment script for provisioning the sample's Azure resources. For details about the sample application, see [Azure Web App with Azure Database for PostgreSQL flexible server](../README.md). + +## Prerequisites + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [Visual Studio Code](https://code.visualstudio.com/) + [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep) +- [Docker](https://docs.docker.com/get-docker/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) + [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [PostgreSQL client (`psql`)](https://www.postgresql.org/download/) +- [`jq`](https://jqlang.org/) + +```bash +brew install localstack/tap/lstk # or: npm install -g @localstack/lstk +``` + +## Architecture Overview + +The [`deploy.sh`](deploy.sh) script creates the resource group while the Bicep modules create: + +1. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) with two subnets: + - *app-subnet*: delegated to `Microsoft.Web/serverFarms` for the Web App's regional VNet integration. + - *pe-subnet*: hosts the Private Endpoint to the PostgreSQL flexible server. +2. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.postgres.database.azure.com`, linked to the VNet. +3. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `postgresqlServer`). +4. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview). +5. [Network Security Groups](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): one per subnet. +6. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview). +7. [Azure Database for PostgreSQL flexible server](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview): public-access mode, Burstable `Standard_B1ms`, version 16, 32 GiB, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) lets the deploy machine reach the server for the post-create psql bootstrap. +8. [PostgreSQL database](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-servers) `sampledb` (UTF8 / `en_US.utf8`). +9. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). +10. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration into *app-subnet*. The Bicep template sets `PG_HOST`, `PG_PORT`, and `PG_DATABASE` on the Web App but **does not** set `PG_USER` or `PG_PASSWORD` — those are written by `deploy.sh` after psql creates the application role. + +## Configuration + +Update [`main.bicepparam`](main.bicepparam) before deploying. The defaults are: + +```bicep +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param databaseName = 'sampledb' +param username = 'paolo' + +param pgAdminLogin = 'pgadmin' +param pgAdminPassword = readEnvironmentVariable('PG_ADMIN_PASSWORD', '') +param pgVersion = '16' +param pgSkuTier = 'Burstable' +param pgSkuName = 'Standard_B1ms' +param pgStorageSizeGB = 32 +param pgBackupRetentionDays = 7 +``` + +`pgAdminPassword` is read from the `PG_ADMIN_PASSWORD` env var. `deploy.sh` sets a default (`P@ssw0rd1234!`) if not provided; override for non-dev deployments. + +## Deployment + +```bash +# default values +bash deploy.sh + +# override admin and app-user secrets +PG_ADMIN_PASSWORD='' \ +PG_APP_PASSWORD='' \ +bash deploy.sh +``` + +The script will: + +1. Ensure the resource group exists. +2. Validate `main.bicep`. +3. Deploy the template, passing `pgAdminPassword`. +4. Use `psql` (connected via the public endpoint + firewall rule) to create the `testuser` role, the `activities` table, and the three demo rows. +5. Set the Web App's `PG_USER`/`PG_PASSWORD` to `testuser` / `` — the server admin login is never written to the Web App. +6. Zip the application source under `../src` and deploy it. + +## Verification + +```bash +PGPASSWORD='TestP@ssw0rd123' psql -h -p -U testuser -d PlannerDB \ + -c "SELECT id, username, activity, created_at FROM activities;" +``` + +`` is `5432` in real Azure, or the port suffix of the server's FQDN in LocalStack: + +```bash +az postgres flexible-server show \ + --resource-group local-rg --name local-pgflex-test \ + --query fullyQualifiedDomainName --output tsv +``` + +## Related Documentation + +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/deploy.sh b/samples/web-app-postgresql-flexible-server/dotnet/bicep/deploy.sh new file mode 100755 index 0000000..e136ff4 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/deploy.sh @@ -0,0 +1,336 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +TEMPLATE="main.bicep" +PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOCATION="westeurope" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +PG_ADMIN_USER="pgadmin" +PG_ADMIN_PASSWORD="P@ssw0rd1234!" +PG_APP_USER="testuser" +PG_APP_PASSWORD="TestP@ssw0rd123" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1> /dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + pgAdminPassword="$PG_ADMIN_PASSWORD" \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + pgAdminPassword="$PG_ADMIN_PASSWORD" \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + pgAdminPassword="$PG_ADMIN_PASSWORD" \ + --query 'properties.outputs' -o json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + WEB_APP_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.webAppName.value') + POSTGRES_SERVER_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.postgresServerName.value') + POSTGRES_FQDN_FULL=$(echo "$DEPLOYMENT_JSON" | jq -r '.postgresFqdn.value') + DATABASE_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.databaseName.value') + echo "Deployment details:" + echo "Web App Name: $WEB_APP_NAME" + echo "PostgreSQL Server Name: $POSTGRES_SERVER_NAME" + echo "PostgreSQL FQDN: $POSTGRES_FQDN_FULL" + echo "Database Name: $DATABASE_NAME" +else + echo "Failed to deploy Bicep template [$TEMPLATE]" + exit 1 +fi + +if [[ -z "$WEB_APP_NAME" || -z "$POSTGRES_SERVER_NAME" ]]; then + echo "Web App Name or PostgreSQL Server Name is empty. Exiting." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so PG_PORT defaults to 5432. +POSTGRES_FQDN="${POSTGRES_FQDN_FULL%%:*}" +if [[ "$POSTGRES_FQDN_FULL" == *:* ]]; then + POSTGRES_PORT="${POSTGRES_FQDN_FULL##*:}" +else + POSTGRES_PORT=5432 +fi +echo "PostgreSQL host = $POSTGRES_FQDN, port = $POSTGRES_PORT" + +# Create application role [$PG_APP_USER] on the PostgreSQL flexible server +echo "Creating login [$PG_APP_USER] on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "DO \$\$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '$PG_APP_USER') THEN + CREATE ROLE \"$PG_APP_USER\" WITH LOGIN PASSWORD '$PG_APP_PASSWORD'; + END IF; +END +\$\$;" + +if [ $? -eq 0 ]; then + echo "Login [$PG_APP_USER] created successfully" +else + echo "Failed to create login [$PG_APP_USER]" + exit 1 +fi + +# Grant CONNECT on the database to [$PG_APP_USER] +echo "Granting CONNECT on [$DATABASE_NAME] to [$PG_APP_USER]..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "GRANT CONNECT ON DATABASE \"$DATABASE_NAME\" TO \"$PG_APP_USER\";" + +if [ $? -eq 0 ]; then + echo "CONNECT granted successfully to [$PG_APP_USER]" +else + echo "Failed to grant CONNECT to [$PG_APP_USER]" + exit 1 +fi + +# Grant schema privileges to [$PG_APP_USER] +echo "Granting schema privileges on [$DATABASE_NAME] to [$PG_APP_USER]..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "GRANT USAGE, CREATE ON SCHEMA public TO \"$PG_APP_USER\"; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO \"$PG_APP_USER\"; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO \"$PG_APP_USER\";" + +if [ $? -eq 0 ]; then + echo "Schema privileges granted successfully to [$PG_APP_USER]" +else + echo "Failed to grant schema privileges to [$PG_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$PG_APP_USER]..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + -c "SELECT current_user, current_database(), now();" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$PG_APP_USER]" +else + echo "Connection test failed with user [$PG_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$DATABASE_NAME] database..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "CREATE TABLE IF NOT EXISTS activities ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + CREATE INDEX IF NOT EXISTS idx_activities_username ON activities(username); + CREATE INDEX IF NOT EXISTS idx_activities_created_at ON activities(created_at DESC);" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "INSERT INTO activities (id, username, activity) VALUES + (md5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (md5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (md5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (md5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (md5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (md5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (md5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (md5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (md5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade') + ON CONFLICT (id) DO NOTHING;" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + -c "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Set PG_USER + PG_PASSWORD on the web app to point at the application role +echo "Setting PG_USER=[$PG_APP_USER] and PG_PASSWORD on the [$WEB_APP_NAME] web app..." +az webapp config appsettings set \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --settings PG_USER="$PG_APP_USER" PG_PASSWORD="$PG_APP_PASSWORD" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "PG_USER and PG_PASSWORD set successfully on the [$WEB_APP_NAME] web app" +else + echo "Failed to set PG_USER and PG_PASSWORD on the [$WEB_APP_NAME] web app" + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicep new file mode 100644 index 0000000..4f29890 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicep @@ -0,0 +1,308 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed(['app','linux']) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed(['dotnet','dotnetcore','python','java','node']) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the kind of the web app resource.') +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed(['1.2','1.3']) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed(['Enabled','Disabled']) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the username for the application (used to scope activities).') +param username string = 'paolo' + +// +// PostgreSQL flexible server +// +@description('Administrator login for the PostgreSQL flexible server. Only used by the post-deploy psql bootstrap; the Web App never authenticates with this account.') +param pgAdminLogin string = 'pgadmin' + +@description('Administrator login password for the PostgreSQL flexible server.') +@secure() +param pgAdminPassword string + +@description('PostgreSQL major version.') +@allowed(['13','14','15','16','17']) +param pgVersion string = '16' + +@description('Compute tier for the PostgreSQL flexible server.') +@allowed(['Burstable','GeneralPurpose','MemoryOptimized']) +param pgSkuTier string = 'Burstable' + +@description('Compute SKU name for the PostgreSQL flexible server.') +param pgSkuName string = 'Standard_B1ms' + +@description('Storage size in GB for the PostgreSQL flexible server.') +@minValue(32) +@maxValue(16384) +param pgStorageSizeGB int = 32 + +@description('Backup retention in days for the PostgreSQL flexible server.') +@minValue(7) +@maxValue(35) +param pgBackupRetentionDays int = 7 + +@description('Name of the application database to create on the PostgreSQL flexible server.') +param databaseName string = 'PlannerDB' + +// +// Networking +// +@description('Specifies the name of the virtual network.') +param virtualNetworkName string = '' + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'app-subnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet that hosts the private endpoint to the PostgreSQL flexible server.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the private-endpoint subnet.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the NSG associated to the private-endpoint subnet.') +param peSubnetNsgName string = '' + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string = '' + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the name of the private endpoint targeting the PostgreSQL flexible server.') +param postgresPrivateEndpointName string = '' + +// +// Observability +// +@description('Specifies the name of the Azure Log Analytics resource.') +param logAnalyticsName string = '' + +@description('Specifies the service tier of the workspace.') +@allowed(['Free','Standalone','PerNode','PerGB2018']) +param logAnalyticsSku string = 'PerNode' + +@description('Specifies the workspace data retention in days.') +param logAnalyticsRetentionInDays int = 60 + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +//******************************************** +// Variables +//******************************************** +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var pgServerName = '${prefix}-pgflex-${suffix}' +var privateDnsZoneName = 'privatelink.postgres.database.azure.com' + +// The PostgreSQL flexible-server emulator embeds the LS-side TCP-proxy port directly in +// fullyQualifiedDomainName (e.g. ".postgres.database.localhost.localstack.cloud:4515"). +// Real Azure returns just the bare host on 5432. Split on `:` so the Web App always gets the +// right host + port without any post-deploy shell logic. +var pgFqdnParts = split(postgresqlServer.outputs.fqdn, ':') +var pgHost = pgFqdnParts[0] +var pgPort = length(pgFqdnParts) > 1 ? pgFqdnParts[1] : '5432' + +//******************************************** +// Modules and Resources +//******************************************** +module workspace 'modules/log-analytics.bicep' = { + name: 'workspace' + params: { + name: empty(logAnalyticsName) ? toLower('${prefix}-log-analytics-${suffix}') : logAnalyticsName + location: location + tags: tags + sku: logAnalyticsSku + retentionInDays: logAnalyticsRetentionInDays + } +} + +module network 'modules/virtual-network.bicep' = { + name: 'network' + params: { + virtualNetworkName: empty(virtualNetworkName) ? toLower('${prefix}-vnet-${suffix}') : virtualNetworkName + virtualNetworkAddressPrefixes: virtualNetworkAddressPrefixes + webAppSubnetName: webAppSubnetName + webAppSubnetAddressPrefix: webAppSubnetAddressPrefix + webAppSubnetNsgName: empty(webAppSubnetNsgName) ? toLower('${prefix}-webapp-subnet-nsg-${suffix}') : webAppSubnetNsgName + peSubnetName: peSubnetName + peSubnetAddressPrefix: peSubnetAddressPrefix + peSubnetNsgName: empty(peSubnetNsgName) ? toLower('${prefix}-pe-subnet-nsg-${suffix}') : peSubnetNsgName + natGatewayName: empty(natGatewayName) ? toLower('${prefix}-nat-gateway-${suffix}') : natGatewayName + natGatewayZones: natGatewayZones + natGatewayPublicIpPrefixName: toLower('${prefix}-nat-gateway-pip-prefix-${suffix}') + natGatewayPublicIpPrefixLength: natGatewayPublicIpPrefixLength + natGatewayIdleTimeoutMins: natGatewayIdleTimeoutMins + delegationServiceName: 'Microsoft.Web/serverfarms' + workspaceId: workspace.outputs.id + location: location + tags: tags + } +} + +module postgresqlServer 'modules/postgresql-flexible-server.bicep' = { + name: 'postgresqlServer' + params: { + name: pgServerName + location: location + administratorLogin: pgAdminLogin + administratorLoginPassword: pgAdminPassword + version: pgVersion + skuTier: pgSkuTier + skuName: pgSkuName + storageSizeGB: pgStorageSizeGB + backupRetentionDays: pgBackupRetentionDays + databaseName: databaseName + workspaceId: workspace.outputs.id + tags: tags + } +} + +module privateDnsZone 'modules/private-dns-zone.bicep' = { + name: 'privateDnsZone' + params: { + name: privateDnsZoneName + vnetId: network.outputs.virtualNetworkId + tags: tags + } +} + +module privateEndpoint 'modules/private-endpoint.bicep' = { + name: 'privateEndpoint' + params: { + name: empty(postgresPrivateEndpointName) + ? toLower('${prefix}-postgres-pe-${suffix}') + : postgresPrivateEndpointName + privateLinkServiceId: postgresqlServer.outputs.id + privateDnsZoneId: privateDnsZone.outputs.id + vnetId: network.outputs.virtualNetworkId + subnetId: network.outputs.peSubnetId + groupIds: [ + 'postgresqlServer' + ] + location: location + tags: tags + } +} + +module appServicePlan 'modules/app-service-plan.bicep' = { + name: 'appServicePlan' + params: { + name: appServicePlanName + location: location + skuName: skuName + skuTier: skuTier + kind: appServicePlanKind + reserved: reserved + zoneRedundant: zoneRedundant + workspaceId: workspace.outputs.id + tags: tags + } +} + +module webApp 'modules/web-app.bicep' = { + name: webAppName + params: { + name: webAppName + location: location + kind: webAppKind + httpsOnly: httpsOnly + runtimeName: runtimeName + runtimeVersion: runtimeVersion + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + repoUrl: repoUrl + virtualNetworkName: network.outputs.virtualNetworkName + subnetName: network.outputs.webAppSubnetName + hostingPlanName: appServicePlan.outputs.name + pgHost: pgHost + pgPort: pgPort + pgDatabase: postgresqlServer.outputs.databaseName + username: username + workspaceId: workspace.outputs.id + tags: tags + } +} + +//******************************************** +// Outputs +//******************************************** +output webAppName string = webApp.outputs.name +output webAppDefaultHostName string = webApp.outputs.defaultHostName +output postgresServerName string = postgresqlServer.outputs.name +output postgresFqdn string = postgresqlServer.outputs.fqdn +output databaseName string = postgresqlServer.outputs.databaseName diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicepparam b/samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicepparam new file mode 100644 index 0000000..4ef7012 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/main.bicepparam @@ -0,0 +1,19 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param databaseName = 'PlannerDB' +param username = 'paolo' + +// PostgreSQL flexible server +param pgAdminLogin = 'pgadmin' +// Password is supplied at deploy time via the PG_ADMIN_PASSWORD env var +// (see deploy.sh — it passes it as --parameters pgAdminPassword=...). Do not commit it here. +param pgAdminPassword = readEnvironmentVariable('PG_ADMIN_PASSWORD', '') +param pgVersion = '16' +param pgSkuTier = 'Burstable' +param pgSkuName = 'Standard_B1ms' +param pgStorageSizeGB = 32 +param pgBackupRetentionDays = 7 diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep new file mode 100644 index 0000000..4b5cfb3 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/app-service-plan.bicep @@ -0,0 +1,154 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the App Service Plan.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param kind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** + +var diagnosticSettingsName = 'default' +var logCategories = [] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: name + location: location + tags: tags + kind: kind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: zoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: appServicePlan + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = appServicePlan.id +output name string = appServicePlan.name diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/log-analytics.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/log-analytics.bicep new file mode 100644 index 0000000..2618829 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/log-analytics.bicep @@ -0,0 +1,45 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Log Analytics workspace.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param sku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param retentionInDays int = 60 + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** +resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' = { + name: name + tags: tags + location: location + properties: { + sku: { + name: sku + } + retentionInDays: retentionInDays + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = workspace.id +output name string = workspace.name +output customerId string = workspace.properties.customerId diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/postgresql-flexible-server.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/postgresql-flexible-server.bicep new file mode 100644 index 0000000..5ebd2db --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/postgresql-flexible-server.bicep @@ -0,0 +1,171 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Azure Database for PostgreSQL flexible server.') +param name string + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the administrator login for the PostgreSQL server.') +param administratorLogin string = 'pgadmin' + +@description('Specifies the administrator login password for the PostgreSQL server.') +@secure() +param administratorLoginPassword string + +@description('Specifies the PostgreSQL major version.') +@allowed([ + '13' + '14' + '15' + '16' + '17' +]) +param version string = '16' + +@description('Specifies the compute tier of the server.') +@allowed([ + 'Burstable' + 'GeneralPurpose' + 'MemoryOptimized' +]) +param skuTier string = 'Burstable' + +@description('Specifies the compute SKU name of the server.') +param skuName string = 'Standard_B1ms' + +@description('Specifies the storage size in GB.') +@minValue(32) +@maxValue(16384) +param storageSizeGB int = 32 + +@description('Specifies the backup retention period in days.') +@minValue(7) +@maxValue(35) +param backupRetentionDays int = 7 + +@description('Specifies the name of the database to create on the server.') +param databaseName string = 'PlannerDB' + +@description('Specifies the database charset.') +param databaseCharset string = 'UTF8' + +@description('Specifies the database collation.') +param databaseCollation string = 'en_US.utf8' + +@description('Name of the server-level firewall rule that allows the deploy machine and Azure services to reach the server. Defaults to a permissive allow-all rule appropriate for the sample.') +param firewallRuleName string = 'AllowAllIPs' + +@description('Start IP of the firewall rule.') +param firewallStartIp string = '0.0.0.0' + +@description('End IP of the firewall rule.') +param firewallEndIp string = '255.255.255.255' + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var logCategories = [ + 'PostgreSQLLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var metrics = [for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** +// Server is created in public-access mode and fronted by a Private Endpoint (see the +// private-endpoint module in main.bicep). The firewall rule lets the deploy machine reach the +// public endpoint just long enough to run the post-deploy psql bootstrap that creates the +// application role and seed data; the Web App itself reaches the server over the private +// endpoint via the linked Private DNS Zone. +resource server 'Microsoft.DBforPostgreSQL/flexibleServers@2024-08-01' = { + name: toLower(name) + location: location + tags: tags + sku: { + name: skuName + tier: skuTier + } + properties: { + administratorLogin: administratorLogin + administratorLoginPassword: administratorLoginPassword + version: version + createMode: 'Default' + storage: { + storageSizeGB: storageSizeGB + } + backup: { + backupRetentionDays: backupRetentionDays + geoRedundantBackup: 'Disabled' + } + highAvailability: { + mode: 'Disabled' + } + network: { + publicNetworkAccess: 'Enabled' + } + } +} + +resource database 'Microsoft.DBforPostgreSQL/flexibleServers/databases@2024-08-01' = { + parent: server + name: databaseName + properties: { + charset: databaseCharset + collation: databaseCollation + } +} + +resource firewallRule 'Microsoft.DBforPostgreSQL/flexibleServers/firewallRules@2024-08-01' = { + parent: server + name: firewallRuleName + properties: { + startIpAddress: firewallStartIp + endIpAddress: firewallEndIp + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { + name: diagnosticSettingsName + scope: server + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = server.id +output name string = server.name +output fqdn string = server.properties.fullyQualifiedDomainName +output databaseId string = database.id +output databaseName string = database.name diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep new file mode 100644 index 0000000..d849259 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-dns-zone.bicep @@ -0,0 +1,41 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private DNS zone.') +param name string + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private DNS Zones +resource privateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = { + name: name + location: 'global' + tags: tags +} + +// Virtual Network Links +resource privateDnsZoneVirtualNetworkLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2024-06-01' = { + parent: privateDnsZone + name: 'link-to-vnet' + location: 'global' + properties: { + registrationEnabled: false + virtualNetwork: { + id: vnetId + } + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateDnsZone.id +output name string = privateDnsZone.name diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep new file mode 100644 index 0000000..8fd35b8 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/private-endpoint.bicep @@ -0,0 +1,72 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private endpoint.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource ID of the subnet where private endpoints will be created.') +param subnetId string + +@description('Specifies the group IDs for the private link service connection.') +param groupIds array + +@description('Specifies the resource ID of the target resource.') +param privateLinkServiceId string + +@description('Specifies the resource ID of the private DNS zone.') +param privateDnsZoneId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private Endpoints +resource privateEndpoint 'Microsoft.Network/privateEndpoints@2025-05-01' = { + name: name + location: location + tags: tags + properties: { + privateLinkServiceConnections: [ + { + name: '${name}-pls-connection' + properties: { + privateLinkServiceId: privateLinkServiceId + groupIds: groupIds + } + } + ] + subnet: { + id: subnetId + } + } +} + +resource privateDnsZoneGroupName 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2025-05-01' = { + parent: privateEndpoint + name: 'private-dns-zone-group' + properties: { + privateDnsZoneConfigs: [ + { + name: 'dnsConfig' + properties: { + privateDnsZoneId: privateDnsZoneId + } + } + ] + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateEndpoint.id +output name string = privateEndpoint.name diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/virtual-network.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/virtual-network.bicep new file mode 100644 index 0000000..e5f66ba --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/virtual-network.bicep @@ -0,0 +1,238 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'functionAppSubnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet that hosts the private endpoint to the PostgreSQL flexible server.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet that hosts the private endpoint to the PostgreSQL flexible server.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated with the private-endpoint subnet.') +param peSubnetNsgName string = '' + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the name of the public IP prefix for the Azure NAT Gateway.') +param natGatewayPublicIpPrefixName string + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the delegation service name.') +param delegationServiceName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var nsgLogCategories = [ + 'NetworkSecurityGroupEvent' + 'NetworkSecurityGroupRuleCounter' +] +var nsgLogs = [for category in nsgLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetLogCategories = [ + 'VMProtectionAlerts' +] +var vnetMetricCategories = [ + 'AllMetrics' +] +var vnetLogs = [for category in vnetLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetMetrics = [for category in vnetMetricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** + +// Virtual Network +resource vnet 'Microsoft.Network/virtualNetworks@2024-03-01' = { + name: virtualNetworkName + location: location + tags: tags + properties: { + addressSpace: { + addressPrefixes: [ + virtualNetworkAddressPrefixes + ] + } + subnets: [ + { + name: webAppSubnetName + properties: { + addressPrefix: webAppSubnetAddressPrefix + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + networkSecurityGroup: { + id: webAppSubnetNsg.id + } + natGateway: { + id: natGateway.id + } + delegations: [ + { + name: 'delegation' + properties: { + serviceName: delegationServiceName + } + } + ] + } + } + { + name: peSubnetName + properties: { + addressPrefix: peSubnetAddressPrefix + networkSecurityGroup: { + id: peSubnetNsg.id + } + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + natGateway: { + id: natGateway.id + } + } + } + ] + } +} + +resource webAppSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: webAppSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +resource peSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: peSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [] + } +} + +// NAT Gateway +resource natGatewayPublicIpPrefix 'Microsoft.Network/publicIPPrefixes@2025-05-01' = { + name: natGatewayPublicIpPrefixName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIPAddressVersion: 'IPv4' + prefixLength: natGatewayPublicIpPrefixLength + } +} + +resource natGateway 'Microsoft.Network/natGateways@2025-05-01' = { + name: natGatewayName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIpPrefixes: [ + { + id: natGatewayPublicIpPrefix.id + } + ] + idleTimeoutInMinutes: natGatewayIdleTimeoutMins + } +} + +resource peSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: peSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource webAppSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webAppSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource vnetDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: vnet + properties: { + workspaceId: workspaceId + logs: vnetLogs + metrics: vnetMetrics + } +} + +//******************************************** +// Outputs +//******************************************** +output virtualNetworkId string = vnet.id +output virtualNetworkName string = vnet.name +output webAppSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, webAppSubnetName) +output webAppSubnetName string = webAppSubnetName +output peSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, peSubnetName) +output peSubnetName string = peSubnetName diff --git a/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/web-app.bicep b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/web-app.bicep new file mode 100644 index 0000000..7427764 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/bicep/modules/web-app.bicep @@ -0,0 +1,213 @@ +//******************************************** +// Parameters +//******************************************** + +@description('Specifies a globally unique name the Azure Web App.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param kind string = 'app,linux' + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'dotnetcore' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = true + +@description('Specifies the name of the hosting plan.') +param hostingPlanName string + +@description('Specifies the FQDN of the PostgreSQL flexible server (e.g. .postgres.database.azure.com).') +param pgHost string + +@description('Specifies the TCP port the PostgreSQL server listens on. 5432 in real Azure; in the emulator the FQDN encodes the dynamically allocated proxy port and main.bicep splits it.') +param pgPort string = '5432' + +@description('Specifies the name of the database to connect to.') +param pgDatabase string = 'sampledb' + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param subnetName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the username for the application.') +param username string = 'paolo' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** + +// Generates a unique container name for deployments. +var diagnosticSettingsName = 'default' +var logCategories = [ + 'AppServiceHTTPLogs' + 'AppServiceConsoleLogs' + 'AppServiceAppLogs' + 'AppServiceAuditLogs' + 'AppServiceIPSecAuditLogs' + 'AppServicePlatformLogs' + 'AppServiceAuthenticationLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' existing = { + name: virtualNetworkName +} + +resource subnet 'Microsoft.Network/virtualNetworks/subnets@2024-05-01' existing = { + parent: virtualNetwork + name: subnetName +} + +resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' existing = { + name: hostingPlanName +} + +resource webApp 'Microsoft.Web/sites@2025-03-01' = { + name: name + location: location + tags: tags + kind: kind + properties: { + httpsOnly: httpsOnly + serverFarmId: hostingPlan.id + virtualNetworkSubnetId: subnet.id + outboundVnetRouting: { + allTraffic: true + } + siteConfig: { + linuxFxVersion: toUpper('${runtimeName}|${runtimeVersion}') + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: 'SystemAssigned' + } +} + + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + // PG_USER and PG_PASSWORD are NOT set here. The post-deploy script connects to the server + // via the firewall-allowed public endpoint to (a) create the application role `testuser` + // and (b) write `PG_USER` / `PG_PASSWORD` onto this Web App via `az webapp config + // appsettings set`. The server-admin login is never exposed to the Web App at runtime. + PG_HOST: pgHost + PG_PORT: pgPort + PG_DATABASE: pgDatabase + WEBSITES_PORT: '8000' + LOGIN_NAME: username + } +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webApp + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = webApp.id +output name string = webApp.name +output defaultHostName string = webApp.properties.defaultHostName diff --git a/samples/web-app-postgresql-flexible-server/dotnet/images/architecture.png b/samples/web-app-postgresql-flexible-server/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..d0337f715911a35a920428b3fc18345179f59ff6 GIT binary patch literal 99609 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 Cp;QO} literal 0 HcmV?d00001 diff --git a/samples/web-app-postgresql-flexible-server/dotnet/images/vacation-planner.png b/samples/web-app-postgresql-flexible-server/dotnet/images/vacation-planner.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c515161863487cdc0705e2a8e8c9c4a2bd60b1 GIT binary patch literal 85690 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

A%9I;ra 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⁣46^_T- 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/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Web app port + local web_app_port=8000 + + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 8000) + echo "Getting the host port mapped to internal port $web_app_port in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "$web_app_port") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --max-time 10 --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl --max-time 10 -s "http://$container_ip:$web_app_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl --max-time 10 -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl --max-time 10 -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh b/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh new file mode 100755 index 0000000..90d1e51 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh @@ -0,0 +1,1113 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +DIAGNOSTIC_SETTINGS_NAME='default' +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +VIRTUAL_NETWORK_ADDRESS_PREFIX="10.0.0.0/8" +WEB_APP_SUBNET_NAME="app-subnet" +WEB_APP_SUBNET_PREFIX="10.0.0.0/24" +PE_SUBNET_NAME="pe-subnet" +PE_SUBNET_PREFIX="10.0.1.0/24" +VIRTUAL_NETWORK_LINK_NAME="link-to-vnet" +PRIVATE_DNS_ZONE_NAME="privatelink.postgres.database.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-postgres-pe-${SUFFIX}" +PRIVATE_ENDPOINT_GROUP="postgresqlServer" +PRIVATE_DNS_ZONE_GROUP_NAME="default" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +POSTGRES_SERVER_NAME="${PREFIX}-pgflex-${SUFFIX}" +POSTGRES_VERSION="16" +POSTGRES_SKU_NAME="Standard_B1ms" +POSTGRES_SKU_TIER="Burstable" +POSTGRES_STORAGE_SIZE_GB=32 +POSTGRES_BACKUP_RETENTION_DAYS=7 +POSTGRES_DATABASE_NAME="PlannerDB" +PG_ADMIN_USER="pgadmin" +PG_ADMIN_PASSWORD="P@ssw0rd1234!" +PG_APP_USER="testuser" +PG_APP_PASSWORD="TestP@ssw0rd123" +FIREWALL_RULE_NAME="AllowAllIPs" +RUNTIME="dotnetcore" +RUNTIME_VERSION="10.0" +LOGIN_NAME="paolo" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit +# Create a resource group +echo "Creating resource group [$RESOURCE_GROUP_NAME]..." +az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Resource group [$RESOURCE_GROUP_NAME] created successfully." +else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit 1 +fi + +# Check if the PostgreSQL flexible server already exists +echo "Checking if [$POSTGRES_SERVER_NAME] PostgreSQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az postgres flexible-server show \ + --name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$POSTGRES_SERVER_NAME] PostgreSQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$POSTGRES_SERVER_NAME] PostgreSQL flexible server in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a PostgreSQL flexible server with public network access + az postgres flexible-server create \ + --name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --tier $POSTGRES_SKU_TIER \ + --sku-name $POSTGRES_SKU_NAME \ + --version $POSTGRES_VERSION \ + --storage-size $POSTGRES_STORAGE_SIZE_GB \ + --backup-retention $POSTGRES_BACKUP_RETENTION_DAYS \ + --geo-redundant-backup Disabled \ + --admin-user $PG_ADMIN_USER \ + --admin-password "$PG_ADMIN_PASSWORD" \ + --public-access Enabled \ + --zonal-resiliency Disabled \ + --yes \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$POSTGRES_SERVER_NAME] PostgreSQL flexible server successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$POSTGRES_SERVER_NAME] PostgreSQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$POSTGRES_SERVER_NAME] PostgreSQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Retrieve the resource id of the PostgreSQL flexible server +echo "Getting [$POSTGRES_SERVER_NAME] PostgreSQL flexible server resource id in the [$RESOURCE_GROUP_NAME] resource group..." +POSTGRES_SERVER_ID=$(az postgres flexible-server show \ + --name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query id \ + --output tsv \ + --only-show-errors) + +if [ -n "$POSTGRES_SERVER_ID" ]; then + echo "PostgreSQL flexible server resource id retrieved successfully: $POSTGRES_SERVER_ID" +else + echo "Failed to retrieve PostgreSQL flexible server resource id." + exit 1 +fi + +# Retrieve the fullyQualifiedDomainName of the PostgreSQL flexible server +echo "Getting [$POSTGRES_SERVER_NAME] PostgreSQL flexible server FQDN in the [$RESOURCE_GROUP_NAME] resource group..." +POSTGRES_FQDN_FULL=$(az postgres flexible-server show \ + --name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "fullyQualifiedDomainName" \ + --output tsv \ + --only-show-errors) + +if [ -n "$POSTGRES_FQDN_FULL" ]; then + echo "PostgreSQL flexible server FQDN retrieved successfully: $POSTGRES_FQDN_FULL" +else + echo "Failed to retrieve PostgreSQL flexible server FQDN." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so PG_PORT defaults to 5432. +POSTGRES_FQDN="${POSTGRES_FQDN_FULL%%:*}" +if [[ "$POSTGRES_FQDN_FULL" == *:* ]]; then + POSTGRES_PORT="${POSTGRES_FQDN_FULL##*:}" +else + POSTGRES_PORT=5432 +fi +echo "PostgreSQL host = $POSTGRES_FQDN, port = $POSTGRES_PORT" + +# Check if the server-level firewall rule already exists +echo "Checking if [$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." +az postgres flexible-server firewall-rule show \ + --server-name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $FIREWALL_RULE_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." + + # Create a permissive firewall rule so the deploy machine can run the psql bootstrap + az postgres flexible-server firewall-rule create \ + --server-name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + else + echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + exit 1 + fi +else + echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" +fi + +# Check if the PostgreSQL database already exists +echo "Checking if [$POSTGRES_DATABASE_NAME] database already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." +az postgres flexible-server db show \ + --server-name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $POSTGRES_DATABASE_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$POSTGRES_DATABASE_NAME] database already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + echo "Creating [$POSTGRES_DATABASE_NAME] database on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." + + # Create the application database + az postgres flexible-server db create \ + --server-name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $POSTGRES_DATABASE_NAME \ + --charset UTF8 \ + --collation en_US.utf8 \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$POSTGRES_DATABASE_NAME] database successfully created on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + else + echo "Failed to create [$POSTGRES_DATABASE_NAME] database on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + exit 1 + fi +else + echo "[$POSTGRES_DATABASE_NAME] database already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" +fi + +# Check if the network security group for the web app subnet already exists +echo "Checking if [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the network security group for the web app subnet + az network nsg create \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the web app subnet +echo "Getting [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_SUBNET_NSG_ID=$(az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_SUBNET_NSG_ID ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id retrieved successfully: $WEB_APP_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the network security group for the private endpoint subnet already exists +echo "Checking if [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the network security group for the private endpoint subnet + az network nsg create \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the private endpoint subnet +echo "Getting [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +PE_SUBNET_NSG_ID=$(az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $PE_SUBNET_NSG_ID ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id retrieved successfully: $PE_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the public IP prefix for the NAT Gateway already exists +echo "Checking if [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the public IP prefix for the NAT Gateway + az network public-ip prefix create \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --length 31 \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the NAT Gateway already exists +echo "Checking if [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the NAT Gateway + az network nat gateway create \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --public-ip-prefixes "$PIP_PREFIX_NAME" \ + --idle-timeout 4 \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$NAT_GATEWAY_NAME] NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$NAT_GATEWAY_NAME] NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the virtual network + az network vnet create \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --address-prefixes "$VIRTUAL_NETWORK_ADDRESS_PREFIX" \ + --subnet-name "$WEB_APP_SUBNET_NAME" \ + --subnet-prefix "$WEB_APP_SUBNET_PREFIX" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + echo "Associating [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group..." + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + az network vnet subnet update \ + --name "$WEB_APP_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --nat-gateway "$NAT_GATEWAY_NAME" \ + --network-security-group "$WEB_APP_SUBNET_NSG_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NAME] subnet successfully associated with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + else + echo "Failed to associate [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + exit 1 + fi +else + echo "[$VIRTUAL_NETWORK_NAME] virtual network already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the subnet already exists +echo "Checking if [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network..." +az network vnet subnet show \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network" + echo "Creating [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the subnet + az network vnet subnet create \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --address-prefix "$PE_SUBNET_PREFIX" \ + --network-security-group "$PE_SUBNET_NSG_NAME" \ + --private-endpoint-network-policies "Disabled" \ + --private-link-service-network-policies "Disabled" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NAME] subnet successfully created in the [$VIRTUAL_NETWORK_NAME] virtual network" + else + echo "Failed to create [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$PE_SUBNET_NAME] subnet already exists in the [$VIRTUAL_NETWORK_NAME] virtual network" +fi + +# Retrieve the virtual network resource id +echo "Getting [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group..." +VIRTUAL_NETWORK_ID=$(az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors \ + --query id \ + --output tsv) + +if [[ -n $VIRTUAL_NETWORK_ID ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network resource id retrieved successfully: $VIRTUAL_NETWORK_ID" +else + echo "Failed to retrieve [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit +fi + +# Check if the private DNS Zone already exists +echo "Checking if [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the private DNS Zone + az network private-dns zone create \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network link between the private DNS zone and the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists..." +az network private-dns link vnet show \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists" + + echo "Creating [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network + az network private-dns link vnet create \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --virtual-network "$VIRTUAL_NETWORK_ID" \ + --registration-enabled false \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network already exists" +fi + +# Check if the private endpoint already exists +echo "Checking if private endpoint [$PRIVATE_ENDPOINT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group..." +privateEndpointId=$(az network private-endpoint list \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --query "[?name=='$PRIVATE_ENDPOINT_NAME'].id" \ + --output tsv) + +if [[ -z $privateEndpointId ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] does not exist in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_ENDPOINT_NAME] private endpoint for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a private endpoint for the PostgreSQL flexible server + az network private-endpoint create \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --subnet "$PE_SUBNET_NAME" \ + --private-connection-resource-id "$POSTGRES_SERVER_ID" \ + --group-id "$PRIVATE_ENDPOINT_GROUP" \ + --connection-name "postgres-connection" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] successfully created for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create a private endpoint for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the private DNS zone group is already created for the PostgreSQL flexible server private endpoint +echo "Checking if the private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists..." +NAME=$(az network private-endpoint dns-zone-group show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --query name \ + --output tsv \ + --only-show-errors 2>/dev/null) + +if [[ -z $NAME ]]; then + echo "No private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint actually exists" + echo "Creating private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint..." + + # Create the private DNS zone group for the PostgreSQL flexible server private endpoint + az network private-endpoint dns-zone-group create \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --private-dns-zone "$PRIVATE_DNS_ZONE_NAME" \ + --zone-name "postgres-zone" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint successfully created" + else + echo "Failed to create private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint" + exit + fi +else + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists" +fi + +# Create application role [$PG_APP_USER] on the PostgreSQL flexible server +echo "Creating login [$PG_APP_USER] on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "DO \$\$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '$PG_APP_USER') THEN + CREATE ROLE \"$PG_APP_USER\" WITH LOGIN PASSWORD '$PG_APP_PASSWORD'; + END IF; +END +\$\$;" + +if [ $? -eq 0 ]; then + echo "Login [$PG_APP_USER] created successfully" +else + echo "Failed to create login [$PG_APP_USER]" + exit 1 +fi + +# Grant CONNECT on the database to [$PG_APP_USER] +echo "Granting CONNECT on [$POSTGRES_DATABASE_NAME] to [$PG_APP_USER]..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "GRANT CONNECT ON DATABASE \"$POSTGRES_DATABASE_NAME\" TO \"$PG_APP_USER\";" + +if [ $? -eq 0 ]; then + echo "CONNECT granted successfully to [$PG_APP_USER]" +else + echo "Failed to grant CONNECT to [$PG_APP_USER]" + exit 1 +fi + +# Grant schema privileges to [$PG_APP_USER] +echo "Granting schema privileges on [$POSTGRES_DATABASE_NAME] to [$PG_APP_USER]..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname="$POSTGRES_DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "GRANT USAGE, CREATE ON SCHEMA public TO \"$PG_APP_USER\"; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO \"$PG_APP_USER\"; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO \"$PG_APP_USER\";" + +if [ $? -eq 0 ]; then + echo "Schema privileges granted successfully to [$PG_APP_USER]" +else + echo "Failed to grant schema privileges to [$PG_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$PG_APP_USER]..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$POSTGRES_DATABASE_NAME" \ + --no-password \ + -c "SELECT current_user, current_database(), now();" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$PG_APP_USER]" +else + echo "Connection test failed with user [$PG_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$POSTGRES_DATABASE_NAME] database..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$POSTGRES_DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "CREATE TABLE IF NOT EXISTS activities ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + CREATE INDEX IF NOT EXISTS idx_activities_username ON activities(username); + CREATE INDEX IF NOT EXISTS idx_activities_created_at ON activities(created_at DESC);" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$POSTGRES_DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "INSERT INTO activities (id, username, activity) VALUES + (md5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (md5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (md5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (md5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (md5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (md5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (md5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (md5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (md5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade') + ON CONFLICT (id) DO NOTHING;" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$POSTGRES_DATABASE_NAME" \ + --no-password \ + -c "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Create app service plan +echo "Creating app service plan [$APP_SERVICE_PLAN_NAME]..." +az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "app service plan [$APP_SERVICE_PLAN_NAME] created successfully." +else + echo "Failed to create app service plan [$APP_SERVICE_PLAN_NAME]." + exit 1 +fi + +# Get the app service plan resource id +echo "Getting [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group..." +APP_SERVICE_PLAN_ID=$(az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $APP_SERVICE_PLAN_ID ]]; then + echo "[$APP_SERVICE_PLAN_NAME] app service plan resource id retrieved successfully: $APP_SERVICE_PLAN_ID" +else + echo "Failed to retrieve [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Create the web app +echo "Creating web app [$WEB_APP_NAME]..." +az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --vnet "$VIRTUAL_NETWORK_NAME" \ + --subnet "$WEB_APP_SUBNET_NAME" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Get the web app resource id +echo "Getting [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_ID=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_ID ]]; then + echo "[$WEB_APP_NAME] web app resource id retrieved successfully: $WEB_APP_ID" +else + echo "Failed to retrieve [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network... +echo "Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network..." + +az resource update \ + --ids "$WEB_APP_ID" \ + --set properties.outboundVnetRouting.allTraffic=true \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Forced tunneling enabled for web app [$WEB_APP_NAME]." +else + echo "Failed to enable forced tunneling for web app [$WEB_APP_NAME]." + exit 1 +fi + +# Set web app settings +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + PG_HOST="$POSTGRES_FQDN" \ + PG_PORT="$POSTGRES_PORT" \ + PG_USER="$PG_APP_USER" \ + PG_PASSWORD="$PG_APP_PASSWORD" \ + PG_DATABASE="$POSTGRES_DATABASE_NAME" \ + LOGIN_NAME="$LOGIN_NAME" \ + WEBSITES_PORT="8000" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +# Check if the log analytics workspace already exists +echo "Checking if [$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$LOG_ANALYTICS_NAME] Log Analytics workspace actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the Log Analytics workspace + az monitor log-analytics workspace create \ + --name "$LOG_ANALYTICS_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --query-access "Enabled" \ + --retention-time 30 \ + --sku "PerNode" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check whether the diagnostic settings for the web app already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app..." + + # Create the diagnostic settings for the web app to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "AppServiceHTTPLogs", "enabled": true}, + {"category": "AppServiceConsoleLogs", "enabled": true}, + {"category": "AppServiceAppLogs", "enabled": true}, + {"category": "AppServiceAuditLogs", "enabled": true}, + {"category": "AppServiceIPSecAuditLogs", "enabled": true}, + {"category": "AppServicePlatformLogs", "enabled": true}, + {"category": "AppServiceAuthenticationLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist" +fi + +# Check whether the diagnostic settings for the app service plan already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan..." + + # Create the diagnostic settings for the app service plan to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist" +fi + +# Check whether the diagnostic settings for the PostgreSQL flexible server already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$POSTGRES_SERVER_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." + + # Create the diagnostic settings for the PostgreSQL flexible server to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$POSTGRES_SERVER_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "PostgreSQLLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server already exist" +fi + +# Check whether the diagnostic settings for the virtual network already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the diagnostic settings for the virtual network to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "VMProtectionAlerts", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist" +fi + +# Check whether the diagnostic settings for the network security group for the web app subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the diagnostic settings for the network security group for the web app subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist" +fi + +# Check whether the diagnostic settings for the network security group for the private endpoint subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the diagnostic settings for the network security group for the private endpoint subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist" +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# List the contents of the zip package +echo "Contents of the zip package [$ZIPFILE]:" +unzip -l "$ZIPFILE" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +echo "Using standard az webapp deploy command for AzureCloud environment." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-postgresql-flexible-server/dotnet/scripts/validate.sh b/samples/web-app-postgresql-flexible-server/dotnet/scripts/validate.sh new file mode 100755 index 0000000..b76a693 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/scripts/validate.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.postgres.database.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-postgres-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +POSTGRES_SERVER_NAME="${PREFIX}-pgflex-${SUFFIX}" +POSTGRES_DATABASE_NAME="PlannerDB" +FIREWALL_RULE_NAME="AllowAllIPs" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check Azure Database for PostgreSQL flexible server +echo -e "\n[$POSTGRES_SERVER_NAME] PostgreSQL flexible server:\n" +az postgres flexible-server show \ + --name "$POSTGRES_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,State:state,Version:version,FQDN:fullyQualifiedDomainName,PublicNetworkAccess:network.publicNetworkAccess}' \ + --output table \ + --only-show-errors + +# Check PostgreSQL database +echo -e "\n[$POSTGRES_DATABASE_NAME] PostgreSQL database:\n" +az postgres flexible-server db show \ + --server-name "$POSTGRES_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$POSTGRES_DATABASE_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,Charset:charset,Collation:collation}' \ + --output table \ + --only-show-errors + +# Check PostgreSQL firewall rule +echo -e "\n[$FIREWALL_RULE_NAME] PostgreSQL firewall rule:\n" +az postgres flexible-server firewall-rule show \ + --server-name "$POSTGRES_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$FIREWALL_RULE_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Models/Activity.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Models/Activity.cs new file mode 100644 index 0000000..c39b073 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Models/Activity.cs @@ -0,0 +1,4 @@ +namespace VacationPlanner.Models; + +///

A planned vacation activity: the store's identifier plus the free-text description. +public sealed record Activity(string Id, string Text); diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml new file mode 100644 index 0000000..386fa85 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml @@ -0,0 +1,2 @@ +@page "/delete/{id}" +@model DeleteModel diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs new file mode 100644 index 0000000..8412e78 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. +public class DeleteModel(IActivityStore store) : PageModel +{ + public IActionResult OnGet() => RedirectToPage("/Index"); + + public async Task OnPostAsync(string id, CancellationToken cancellationToken) + { + if (!string.IsNullOrWhiteSpace(id)) + { + await store.DeleteAsync(id, cancellationToken); + TempData["Flash"] = "Activity deleted."; + } + + return RedirectToPage("/Index"); + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..bd617e2 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,265 @@ +@page +@model IndexModel + + + + + + Vacation Planner + + + + + + + + + +
+
+

🌴 Vacation Planner

+

@Model.Activities.Count activit@(Model.Activities.Count != 1 ? "ies" : "y") planned

+
+
+ + +
+
+ + +
+ + + + + + + + + @foreach (var activity in Model.Activities) + { + + + + + + } + @if (Model.Activities.Count == 0) + { + + + + } + +
ActivityActions
@activity.Text + + +
+ +
+
No vacation plans yet — add your first activity!
+
+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..94b6b33 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Models; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +public class IndexModel(IActivityStore store) : PageModel +{ + public IReadOnlyList Activities { get; private set; } = []; + + /// Flash messages set by the previous request (the equivalent of Flask's flash()). + public IReadOnlyList Flashes => TempData["Flash"] is string message ? [message] : []; + + [BindProperty(Name = "activity")] + public string? Activity { get; set; } + + [BindProperty(Name = "row_id")] + public string? RowId { get; set; } + + public async Task OnGetAsync(CancellationToken cancellationToken) + { + Activities = await store.ListAsync(cancellationToken); + } + + public async Task OnPostAsync(CancellationToken cancellationToken) + { + var text = Activity?.Trim(); + var id = RowId?.Trim(); + if (!string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(id)) + { + await store.UpdateAsync(id, text, cancellationToken); + TempData["Flash"] = "Activity updated!"; + } + else + { + await store.AddAsync(text, cancellationToken); + TempData["Flash"] = "Activity added!"; + } + } + + return RedirectToPage(); + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..ec62511 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using VacationPlanner +@using VacationPlanner.Models +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs new file mode 100644 index 0000000..da60184 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs @@ -0,0 +1,35 @@ +using VacationPlanner.Services; + +var builder = WebApplication.CreateBuilder(args); + +// Code deployments built by Oryx export ASPNETCORE_URLS; custom images and local runs only set PORT. +if (Environment.GetEnvironmentVariable("ASPNETCORE_URLS") is null + && Environment.GetEnvironmentVariable("PORT") is { Length: > 0 } port) +{ + builder.WebHost.UseUrls($"http://*:{port}"); +} + +// Read and validate the configuration up front so a misconfigured deployment fails at startup. +var databaseOptions = PostgresOptions.FromEnvironment(); + +builder.Services.AddRazorPages(); +builder.Services.AddSingleton(sp => + new PostgresActivityStore(databaseOptions, sp.GetRequiredService>())); +// The flexible server can take a few seconds to accept connections on the first deploy. +builder.Services.AddHostedService(sp => new StoreInitializer( + sp.GetRequiredService(), + sp.GetRequiredService>(), + attempts: 30, + delay: TimeSpan.FromSeconds(2))); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/health", async (IActivityStore store, CancellationToken cancellationToken) => + await store.IsHealthyAsync(cancellationToken) + ? Results.Json(new { status = "ok" }) + : Results.Json(new { status = "unavailable" }, statusCode: StatusCodes.Status503ServiceUnavailable)); + +app.Run(); diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/ActivityId.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/ActivityId.cs new file mode 100644 index 0000000..8654aaf --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/ActivityId.cs @@ -0,0 +1,15 @@ +using System.Security.Cryptography; +using System.Text; + +namespace VacationPlanner.Services; + +/// MD5 of username + activity + timestamp: the id scheme shared by the Vacation Planner samples. +public static class ActivityId +{ + public static string Create(string username, string activity) + { + var timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"); + var hash = MD5.HashData(Encoding.UTF8.GetBytes($"{username}_{activity}_{timestamp}")); + return Convert.ToHexStringLower(hash); + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/IActivityStore.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/IActivityStore.cs new file mode 100644 index 0000000..3b24e5f --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/IActivityStore.cs @@ -0,0 +1,21 @@ +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Persistence for the planner's activities. Every call goes to the backing store; nothing is cached in-process. +public interface IActivityStore +{ + /// Creates whatever the store needs (container, table, collection) before the first request. + Task InitializeAsync(CancellationToken cancellationToken); + + Task> ListAsync(CancellationToken cancellationToken); + + Task AddAsync(string text, CancellationToken cancellationToken); + + Task UpdateAsync(string id, string text, CancellationToken cancellationToken); + + Task DeleteAsync(string id, CancellationToken cancellationToken); + + /// Cheap connectivity probe used by GET /health. + Task IsHealthyAsync(CancellationToken cancellationToken); +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs new file mode 100644 index 0000000..4430fed --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs @@ -0,0 +1,113 @@ +using Npgsql; +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// +/// Activities in a PostgreSQL activities table. Like the Python sample, the store is low-throughput +/// and opens a fresh connection per call instead of managing a pool explicitly. +/// +public sealed class PostgresActivityStore(PostgresOptions options, ILogger logger) : IActivityStore +{ + private const string SchemaDdl = """ + CREATE TABLE IF NOT EXISTS activities ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + CREATE INDEX IF NOT EXISTS idx_activities_username ON activities(username); + CREATE INDEX IF NOT EXISTS idx_activities_created_at ON activities(created_at DESC); + """; + + // Negotiate TLS when the server offers it, without certificate verification (libpq's "prefer", which + // the Python sample relies on): the flexible server's certificate is publicly trusted on Azure but + // self-signed under LocalStack. Npgsql only validates certificates with SslMode VerifyCA/VerifyFull. + private readonly string _connectionString = new NpgsqlConnectionStringBuilder + { + Host = options.Host, + Port = options.Port, + Username = options.User, + Password = options.Password, + Database = options.Database, + Timeout = 10, + SslMode = SslMode.Prefer, + }.ConnectionString; + + public async Task InitializeAsync(CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new NpgsqlCommand(SchemaDdl, connection); + await command.ExecuteNonQueryAsync(cancellationToken); + logger.LogInformation("PostgreSQL schema initialized"); + } + + public async Task> ListAsync(CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new NpgsqlCommand( + "SELECT id, activity FROM activities WHERE username = @username ORDER BY created_at DESC", connection); + command.Parameters.AddWithValue("username", options.Username); + + var activities = new List(); + await using var reader = await command.ExecuteReaderAsync(cancellationToken); + while (await reader.ReadAsync(cancellationToken)) + { + activities.Add(new Activity(reader.GetString(0), reader.GetString(1))); + } + + return activities; + } + + public async Task AddAsync(string text, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new NpgsqlCommand( + "INSERT INTO activities (id, username, activity) VALUES (@id, @username, @activity) ON CONFLICT (id) DO NOTHING", + connection); + command.Parameters.AddWithValue("id", ActivityId.Create(options.Username, text)); + command.Parameters.AddWithValue("username", options.Username); + command.Parameters.AddWithValue("activity", text); + await command.ExecuteNonQueryAsync(cancellationToken); + } + + public async Task UpdateAsync(string id, string text, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new NpgsqlCommand("UPDATE activities SET activity = @activity WHERE id = @id", connection); + command.Parameters.AddWithValue("activity", text); + command.Parameters.AddWithValue("id", id); + await command.ExecuteNonQueryAsync(cancellationToken); + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new NpgsqlCommand("DELETE FROM activities WHERE id = @id", connection); + command.Parameters.AddWithValue("id", id); + await command.ExecuteNonQueryAsync(cancellationToken); + } + + public async Task IsHealthyAsync(CancellationToken cancellationToken) + { + try + { + await using var connection = await OpenAsync(cancellationToken); + await using var command = new NpgsqlCommand("SELECT 1", connection); + await command.ExecuteScalarAsync(cancellationToken); + return true; + } + catch (Exception ex) + { + logger.LogWarning(ex, "PostgreSQL health check failed"); + return false; + } + } + + private async Task OpenAsync(CancellationToken cancellationToken) + { + var connection = new NpgsqlConnection(_connectionString); + await connection.OpenAsync(cancellationToken); + return connection; + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresOptions.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresOptions.cs new file mode 100644 index 0000000..cc824d0 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresOptions.cs @@ -0,0 +1,28 @@ +namespace VacationPlanner.Services; + +/// Connection settings read from the same environment variables the Python sample uses. +public sealed record PostgresOptions(string Host, int Port, string User, string Password, string Database, string Username) +{ + public static PostgresOptions FromEnvironment() + { + var username = Environment.GetEnvironmentVariable("LOGIN_NAME") ?? "paolo"; + if (string.IsNullOrWhiteSpace(username)) + { + throw new InvalidOperationException("LOGIN_NAME cannot be empty"); + } + + return new PostgresOptions( + Host: Require("PG_HOST"), + Port: int.Parse(Environment.GetEnvironmentVariable("PG_PORT") ?? "5432"), + User: Require("PG_USER"), + Password: Require("PG_PASSWORD"), + Database: Environment.GetEnvironmentVariable("PG_DATABASE") ?? "sampledb", + Username: username); + } + + private static string Require(string name) => + Environment.GetEnvironmentVariable(name) is { Length: > 0 } value + ? value + : throw new InvalidOperationException( + $"Missing required environment variable: {name}. Set PG_HOST, PG_USER, PG_PASSWORD (and optionally PG_PORT, PG_DATABASE)."); +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/StoreInitializer.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/StoreInitializer.cs new file mode 100644 index 0000000..c74eb50 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/StoreInitializer.cs @@ -0,0 +1,33 @@ +namespace VacationPlanner.Services; + +/// +/// Runs at startup with a bounded retry, so the app fails fast +/// (and the container exits) when the backing service never becomes reachable. +/// +public sealed class StoreInitializer( + IActivityStore store, + ILogger logger, + int attempts = 1, + TimeSpan delay = default) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + for (var attempt = 1; ; attempt++) + { + try + { + await store.InitializeAsync(cancellationToken); + logger.LogInformation("Activity store initialized after {Attempts} attempt(s).", attempt); + return; + } + catch (Exception ex) when (attempt < attempts && !cancellationToken.IsCancellationRequested) + { + logger.LogWarning(ex, "Activity store not ready (attempt {Attempt}/{Attempts}); retrying in {Delay}s.", + attempt, attempts, delay.TotalSeconds); + await Task.Delay(delay, cancellationToken); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/VacationPlanner.csproj b/samples/web-app-postgresql-flexible-server/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..afa176e --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,11 @@ + + + net10.0 + enable + enable + VacationPlanner + + + + + diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/appsettings.json b/samples/web-app-postgresql-flexible-server/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/wwwroot/favicon.ico b/samples/web-app-postgresql-flexible-server/dotnet/src/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b1d5cf37d81c073dbacd66df3f69d9240359dda GIT binary patch literal 36791 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 D` on the Web App via `az webapp config appsettings set`. +- Zips the source under `../src` and deploys via `az webapp deploy`. + +## Variables + +Override any of the variables in [`variables.tf`](variables.tf) by editing [`terraform.tfvars`](terraform.tfvars) or passing `-var` to `terraform plan`. Notable PostgreSQL ones: + +| Variable | Default | Description | +| -------------------------- | ---------------- | ---------------------------------------- | +| `pg_admin_login` | `pgadmin` | Server administrator login | +| `pg_admin_password` | `P@ssw0rd1234!` | Server administrator password (sensitive) | +| `pg_version` | `16` | PostgreSQL major version | +| `pg_sku_name` | `B_Standard_B1ms`| Compute SKU | +| `pg_storage_mb` | `32768` | Storage size in MB | +| `pg_backup_retention_days` | `7` | Backup retention | +| `pg_database_name` | `PlannerDB` | Application database | + +For non-dev deployments, set `pg_admin_password` via env var: `PG_ADMIN_PASSWORD=... bash deploy.sh`. + +## Related Documentation + +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/deploy.sh b/samples/web-app-postgresql-flexible-server/dotnet/terraform/deploy.sh new file mode 100755 index 0000000..448d315 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/deploy.sh @@ -0,0 +1,266 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +PG_ADMIN_USER="pgadmin" +PG_ADMIN_PASSWORD="P@ssw0rd1234!" +PG_APP_USER="testuser" +PG_APP_PASSWORD="TestP@ssw0rd123" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Intialize Terraform +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" \ + -var "pg_admin_login=$PG_ADMIN_USER" \ + -var "pg_admin_password=$PG_ADMIN_PASSWORD" + +if [[ $? != 0 ]]; then + echo "Terraform plan failed. Exiting." + exit 1 +fi + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) +POSTGRES_SERVER_NAME=$(terraform output -raw postgres_server_name) +POSTGRES_FQDN_FULL=$(terraform output -raw postgres_fqdn) +DATABASE_NAME=$(terraform output -raw postgres_database_name) + +if [[ -z "$RESOURCE_GROUP_NAME" || -z "$WEB_APP_NAME" || -z "$POSTGRES_SERVER_NAME" ]]; then + echo "Resource Group Name, Web App Name, or PostgreSQL Server Name is empty. Exiting." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so PG_PORT defaults to 5432. +POSTGRES_FQDN="${POSTGRES_FQDN_FULL%%:*}" +if [[ "$POSTGRES_FQDN_FULL" == *:* ]]; then + POSTGRES_PORT="${POSTGRES_FQDN_FULL##*:}" +else + POSTGRES_PORT=5432 +fi +echo "PostgreSQL host = $POSTGRES_FQDN, port = $POSTGRES_PORT" + +# Create application role [$PG_APP_USER] on the PostgreSQL flexible server +echo "Creating login [$PG_APP_USER] on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "DO \$\$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '$PG_APP_USER') THEN + CREATE ROLE \"$PG_APP_USER\" WITH LOGIN PASSWORD '$PG_APP_PASSWORD'; + END IF; +END +\$\$;" + +if [ $? -eq 0 ]; then + echo "Login [$PG_APP_USER] created successfully" +else + echo "Failed to create login [$PG_APP_USER]" + exit 1 +fi + +# Grant CONNECT on the database to [$PG_APP_USER] +echo "Granting CONNECT on [$DATABASE_NAME] to [$PG_APP_USER]..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "GRANT CONNECT ON DATABASE \"$DATABASE_NAME\" TO \"$PG_APP_USER\";" + +if [ $? -eq 0 ]; then + echo "CONNECT granted successfully to [$PG_APP_USER]" +else + echo "Failed to grant CONNECT to [$PG_APP_USER]" + exit 1 +fi + +# Grant schema privileges to [$PG_APP_USER] +echo "Granting schema privileges on [$DATABASE_NAME] to [$PG_APP_USER]..." +PGPASSWORD="$PG_ADMIN_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "GRANT USAGE, CREATE ON SCHEMA public TO \"$PG_APP_USER\"; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO \"$PG_APP_USER\"; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO \"$PG_APP_USER\";" + +if [ $? -eq 0 ]; then + echo "Schema privileges granted successfully to [$PG_APP_USER]" +else + echo "Failed to grant schema privileges to [$PG_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$PG_APP_USER]..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + -c "SELECT current_user, current_database(), now();" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$PG_APP_USER]" +else + echo "Connection test failed with user [$PG_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$DATABASE_NAME] database..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "CREATE TABLE IF NOT EXISTS activities ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + ); + CREATE INDEX IF NOT EXISTS idx_activities_username ON activities(username); + CREATE INDEX IF NOT EXISTS idx_activities_created_at ON activities(created_at DESC);" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + --set=ON_ERROR_STOP=on \ + -c "INSERT INTO activities (id, username, activity) VALUES + (md5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (md5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (md5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (md5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (md5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (md5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (md5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (md5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (md5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade') + ON CONFLICT (id) DO NOTHING;" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +PGPASSWORD="$PG_APP_PASSWORD" psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_APP_USER" \ + --dbname="$DATABASE_NAME" \ + --no-password \ + -c "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Set PG_USER + PG_PASSWORD on the web app to point at the application role +echo "Setting PG_USER=[$PG_APP_USER] and PG_PASSWORD on the [$WEB_APP_NAME] web app..." +az webapp config appsettings set \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --settings PG_USER="$PG_APP_USER" PG_PASSWORD="$PG_APP_PASSWORD" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "PG_USER and PG_PASSWORD set successfully on the [$WEB_APP_NAME] web app" +else + echo "Failed to set PG_USER and PG_PASSWORD on the [$WEB_APP_NAME] web app" + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/main.tf new file mode 100644 index 0000000..62b6d9a --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/main.tf @@ -0,0 +1,197 @@ +locals { + prefix = lower(var.prefix) + suffix = lower(var.suffix) + resource_group_name = "${var.prefix}-rg" + log_analytics_name = "${local.prefix}-log-analytics-${local.suffix}" + virtual_network_name = "${local.prefix}-vnet-${local.suffix}" + nat_gateway_name = "${local.prefix}-nat-gateway-${local.suffix}" + webapp_subnet_nsg_name = "${local.prefix}-webapp-subnet-nsg-${local.suffix}" + pe_subnet_nsg_name = "${local.prefix}-pe-subnet-nsg-${local.suffix}" + postgres_server_name = "${local.prefix}-pgflex-${local.suffix}" + private_endpoint_name = "${local.prefix}-postgres-pe-${local.suffix}" + app_service_plan_name = "${local.prefix}-app-service-plan-${local.suffix}" + web_app_name = "${local.prefix}-webapp-${local.suffix}" + private_dns_zone_name = "privatelink.postgres.database.azure.com" + + # The PostgreSQL flexible-server emulator embeds the LS-side TCP-proxy port directly in + # `fullyQualifiedDomainName` (e.g. ".postgres.database.localhost.localstack.cloud:4515"). + # Real Azure returns just the bare host on 5432. Split on ":" so the Web App always gets the + # right host + port without any post-apply shell logic. + pg_fqdn_parts = split(":", module.postgres_flexible_server.fqdn) + pg_host = local.pg_fqdn_parts[0] + pg_port = length(local.pg_fqdn_parts) > 1 ? local.pg_fqdn_parts[1] : "5432" +} + +data "azurerm_client_config" "current" {} + +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +module "log_analytics_workspace" { + source = "./modules/log_analytics" + name = local.log_analytics_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + tags = var.tags +} + +# VNet with two subnets: +# * app-subnet — delegated to Microsoft.Web/serverFarms for the Web App's regional +# VNet integration. Outbound through the NAT Gateway. +# * pe-subnet — hosts the Private Endpoint to the PostgreSQL flexible server (no +# delegation; standard private-link subnet). +module "virtual_network" { + source = "./modules/virtual_network" + resource_group_name = azurerm_resource_group.example.name + location = var.location + vnet_name = local.virtual_network_name + address_space = var.vnet_address_space + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + subnets = [ + { + name : var.webapp_subnet_name + address_prefixes : var.webapp_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : "Microsoft.Web/serverFarms" + }, + { + name : var.pe_subnet_name + address_prefixes : var.pe_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : null + } + ] +} + +module "webapp_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.webapp_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } +} + +module "pe_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.pe_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.pe_subnet_name) = module.virtual_network.subnet_ids[var.pe_subnet_name] + } +} + +module "nat_gateway" { + source = "./modules/nat_gateway" + name = local.nat_gateway_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + sku_name = var.nat_gateway_sku_name + idle_timeout_in_minutes = var.nat_gateway_idle_timeout_in_minutes + zones = var.nat_gateway_zones + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } + tags = var.tags +} + +module "private_dns_zone" { + source = "./modules/private_dns_zone" + name = local.private_dns_zone_name + resource_group_name = azurerm_resource_group.example.name + tags = var.tags + virtual_networks_to_link = { + (module.virtual_network.name) = { + subscription_id = data.azurerm_client_config.current.subscription_id + resource_group_name = azurerm_resource_group.example.name + } + } +} + +module "postgres_flexible_server" { + source = "./modules/postgres_flexible_server" + name = local.postgres_server_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + administrator_login = var.pg_admin_login + administrator_password = var.pg_admin_password + postgresql_version = var.pg_version + sku_name = var.pg_sku_name + storage_mb = var.pg_storage_mb + backup_retention_days = var.pg_backup_retention_days + database_name = var.pg_database_name + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +module "private_endpoint" { + source = "./modules/private_endpoint" + name = local.private_endpoint_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + subnet_id = module.virtual_network.subnet_ids[var.pe_subnet_name] + tags = var.tags + private_connection_resource_id = module.postgres_flexible_server.id + is_manual_connection = false + subresource_name = "postgresqlServer" + private_dns_zone_group_name = "private-dns-zone-group" + private_dns_zone_group_ids = [module.private_dns_zone.id] +} + +module "app_service_plan" { + source = "./modules/app_service_plan" + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Note: PG_USER and PG_PASSWORD are intentionally NOT set here. The post-apply step in +# deploy.sh connects to the server (via the firewall-allowed public endpoint) as the admin, +# creates the application role `testuser`, seeds the schema, and then writes `PG_USER` / +# `PG_PASSWORD` onto this Web App via `az webapp config appsettings set`. The server-admin +# login is never exposed to the Web App at runtime. +module "web_app" { + source = "./modules/web_app" + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + service_plan_id = module.app_service_plan.id + https_only = var.https_only + virtual_network_subnet_id = module.virtual_network.subnet_ids[var.webapp_subnet_name] + vnet_route_all_enabled = true + public_network_access_enabled = var.public_network_access_enabled + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + dotnet_version = var.dotnet_version + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + ENABLE_ORYX_BUILD = "true" + PG_HOST = local.pg_host + PG_PORT = local.pg_port + PG_DATABASE = module.postgres_flexible_server.database_name + LOGIN_NAME = var.login_name + WEBSITES_PORT = var.websites_port + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf new file mode 100644 index 0000000..98a3e4d --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_service_plan" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_service_plan.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf new file mode 100644 index 0000000..f1455ea --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/outputs.tf @@ -0,0 +1,19 @@ +output "id" { + value = azurerm_service_plan.example.id + description = "Specifies the resource id of the App Service Plan" +} + +output "name" { + value = azurerm_service_plan.example.name + description = "Specifies the name of the App Service Plan" +} + +output "location" { + value = azurerm_service_plan.example.location + description = "Specifies the location of the App Service Plan" +} + +output "resource_group_name" { + value = azurerm_service_plan.example.resource_group_name + description = "Specifies the resource group name of the App Service Plan" +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf new file mode 100644 index 0000000..e543066 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/app_service_plan/variables.tf @@ -0,0 +1,42 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the App Service Plan." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the App Service Plan." + type = string +} + +variable "sku_name" { + description = "(Required) Specifies the SKU name for the App Service Plan." + type = string +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf new file mode 100644 index 0000000..2f88414 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/main.tf @@ -0,0 +1,14 @@ +resource "azurerm_log_analytics_workspace" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku = var.sku + tags = var.tags + retention_in_days = var.retention_in_days != "" ? var.retention_in_days : null + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf new file mode 100644 index 0000000..fe2c398 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/output.tf @@ -0,0 +1,30 @@ +output "id" { + value = azurerm_log_analytics_workspace.example.id + description = "Specifies the resource id of the log analytics workspace" +} + +output "location" { + value = azurerm_log_analytics_workspace.example.location + description = "Specifies the location of the log analytics workspace" +} + +output "name" { + value = azurerm_log_analytics_workspace.example.name + description = "Specifies the name of the log analytics workspace" +} + +output "resource_group_name" { + value = azurerm_log_analytics_workspace.example.resource_group_name + description = "Specifies the name of the resource group that contains the log analytics workspace" +} + +output "workspace_id" { + value = azurerm_log_analytics_workspace.example.workspace_id + description = "Specifies the workspace id of the log analytics workspace" +} + +output "primary_shared_key" { + value = azurerm_log_analytics_workspace.example.primary_shared_key + description = "Specifies the workspace key of the log analytics workspace" + sensitive = true +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf new file mode 100644 index 0000000..2db6a01 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/log_analytics/variables.tf @@ -0,0 +1,37 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Log Analytics workspace" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure Log Analytics workspace" + type = string +} + +variable "sku" { + description = "(Optional) Specifies the sku of the Azure Log Analytics workspace" + type = string + default = "PerGB2018" + + validation { + condition = contains(["Free", "Standalone", "PerNode", "PerGB2018"], var.sku) + error_message = "The log analytics sku is incorrect." + } +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Log Analytics workspace." + type = map(any) + default = {} +} + +variable "retention_in_days" { + description = " (Optional) Specifies the workspace data retention in days. Possible values are either 7 (Free Tier only) or range between 30 and 730." + type = number + default = 30 +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf new file mode 100644 index 0000000..cc384af --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/main.tf @@ -0,0 +1,42 @@ +resource "azurerm_public_ip" "example" { + name = "${var.name}PublicIp" + location = var.location + resource_group_name = var.resource_group_name + allocation_method = "Static" + sku = "Standard" + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku_name = var.sku_name + idle_timeout_in_minutes = var.idle_timeout_in_minutes + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway_public_ip_association" "example" { + nat_gateway_id = azurerm_nat_gateway.example.id + public_ip_address_id = azurerm_public_ip.example.id +} + +resource "azurerm_subnet_nat_gateway_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + nat_gateway_id = azurerm_nat_gateway.example.id +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf new file mode 100644 index 0000000..1e3fd03 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/output.tf @@ -0,0 +1,14 @@ +output "name" { + value = azurerm_nat_gateway.example.name + description = "Specifies the name of the Azure NAT Gateway" +} + +output "id" { + value = azurerm_nat_gateway.example.id + description = "Specifies the resource id of the Azure NAT Gateway" +} + +output "public_ip_address" { + value = azurerm_public_ip.example.ip_address + description = "Contains the public IP address of the Azure NAT Gateway." +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf new file mode 100644 index 0000000..c1c8ea5 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/nat_gateway/variables.tf @@ -0,0 +1,43 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure NAT Gateway" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure NAT Gateway" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure NAT Gateway" + type = map(any) + default = {} +} + +variable "sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the NAT Gateway" + type = map(string) +} \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf new file mode 100644 index 0000000..c649652 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/main.tf @@ -0,0 +1,53 @@ +resource "azurerm_network_security_group" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + dynamic "security_rule" { + for_each = try(var.security_rules, []) + content { + name = try(security_rule.value.name, null) + priority = try(security_rule.value.priority, null) + direction = try(security_rule.value.direction, null) + access = try(security_rule.value.access, null) + protocol = try(security_rule.value.protocol, null) + source_port_range = try(security_rule.value.source_port_range, null) + source_port_ranges = try(security_rule.value.source_port_ranges, null) + destination_port_range = try(security_rule.value.destination_port_range, null) + destination_port_ranges = try(security_rule.value.destination_port_ranges, null) + source_address_prefix = try(security_rule.value.source_address_prefix, null) + source_address_prefixes = try(security_rule.value.source_address_prefixes, null) + destination_address_prefix = try(security_rule.value.destination_address_prefix, null) + destination_address_prefixes = try(security_rule.value.destination_address_prefixes, null) + source_application_security_group_ids = try(security_rule.value.source_application_security_group_ids, null) + destination_application_security_group_ids = try(security_rule.value.destination_application_security_group_ids, null) + } + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet_network_security_group_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + network_security_group_id = azurerm_network_security_group.example.id +} + +resource "azurerm_monitor_diagnostic_setting" "settings" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_network_security_group.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "NetworkSecurityGroupEvent" + } + + enabled_log { + category = "NetworkSecurityGroupRuleCounter" + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf new file mode 100644 index 0000000..b8ca8d5 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the network security group" + value = azurerm_network_security_group.example.name +} + +output "id" { + description = "Specifies the resource id of the network security group" + value = azurerm_network_security_group.example.id +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf new file mode 100644 index 0000000..04eb07e --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/network_security_group/variables.tf @@ -0,0 +1,51 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Network Security Group" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Network Security Group" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Network Security Group" + type = string +} + +variable "security_rules" { + description = "(Optional) Specifies the security rules of the Azure Network Security Group" + type = list(object({ + name = string + priority = number + direction = string + access = string + protocol = string + source_port_range = string + source_port_ranges = list(string) + destination_port_range = string + destination_port_ranges = list(string) + source_address_prefix = string + source_address_prefixes = list(string) + destination_address_prefix = string + destination_address_prefixes = list(string) + source_application_security_group_ids = list(string) + destination_application_security_group_ids = list(string) + })) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the Azure Network Security Group" + type = map(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Network Security Group" + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace" + type = string +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/main.tf new file mode 100644 index 0000000..443327b --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/main.tf @@ -0,0 +1,46 @@ +resource "azurerm_postgresql_flexible_server" "this" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + version = var.postgresql_version + administrator_login = var.administrator_login + administrator_password = var.administrator_password + sku_name = var.sku_name + storage_mb = var.storage_mb + backup_retention_days = var.backup_retention_days + geo_redundant_backup_enabled = false + # Public access is enabled and a permissive firewall rule lets the deploy machine reach the + # server just long enough to run the post-deploy psql bootstrap. The Web App itself reaches + # the server through a Private Endpoint (see the private_endpoint module in main.tf). + public_network_access_enabled = true + + tags = var.tags +} + +resource "azurerm_postgresql_flexible_server_database" "this" { + name = var.database_name + server_id = azurerm_postgresql_flexible_server.this.id + charset = var.database_charset + collation = var.database_collation +} + +resource "azurerm_postgresql_flexible_server_firewall_rule" "allow_all" { + name = var.firewall_rule_name + server_id = azurerm_postgresql_flexible_server.this.id + start_ip_address = var.firewall_start_ip + end_ip_address = var.firewall_end_ip +} + +resource "azurerm_monitor_diagnostic_setting" "this" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_postgresql_flexible_server.this.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "PostgreSQLLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/outputs.tf new file mode 100644 index 0000000..faccfe8 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/outputs.tf @@ -0,0 +1,15 @@ +output "id" { + value = azurerm_postgresql_flexible_server.this.id +} + +output "name" { + value = azurerm_postgresql_flexible_server.this.name +} + +output "fqdn" { + value = azurerm_postgresql_flexible_server.this.fqdn +} + +output "database_name" { + value = azurerm_postgresql_flexible_server_database.this.name +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/variables.tf new file mode 100644 index 0000000..d8bd65a --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/postgres_flexible_server/variables.tf @@ -0,0 +1,81 @@ +variable "name" { + description = "Name of the PostgreSQL flexible server." + type = string +} + +variable "resource_group_name" { + type = string +} + +variable "location" { + type = string +} + +variable "administrator_login" { + type = string +} + +variable "administrator_password" { + type = string + sensitive = true +} + +variable "postgresql_version" { + type = string + default = "16" +} + +variable "sku_name" { + type = string + default = "B_Standard_B1ms" +} + +variable "storage_mb" { + type = number + default = 32768 +} + +variable "backup_retention_days" { + type = number + default = 7 +} + +variable "database_name" { + type = string + default = "PlannerDB" +} + +variable "database_charset" { + type = string + default = "UTF8" +} + +variable "database_collation" { + type = string + default = "en_US.utf8" +} + +variable "firewall_rule_name" { + description = "Server-level firewall rule that allows the deploy machine to run the psql bootstrap." + type = string + default = "AllowAllIPs" +} + +variable "firewall_start_ip" { + type = string + default = "0.0.0.0" +} + +variable "firewall_end_ip" { + type = string + default = "255.255.255.255" +} + +variable "log_analytics_workspace_id" { + type = string +} + +variable "tags" { + type = map(string) + default = {} +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf new file mode 100644 index 0000000..e61df00 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_private_dns_zone" "example" { + name = var.name + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "example" { + for_each = var.virtual_networks_to_link + + name = "link_to_${lower(basename(each.key))}" + private_dns_zone_id = azurerm_private_dns_zone.example.id + virtual_network_id = "/subscriptions/${each.value.subscription_id}/resourceGroups/${each.value.resource_group_name}/providers/Microsoft.Network/virtualNetworks/${each.key}" + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf new file mode 100644 index 0000000..ca141f3 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the private dns zone" + value = azurerm_private_dns_zone.example.name +} + +output "id" { + description = "Specifies the resource id of the private dns zone" + value = azurerm_private_dns_zone.example.id +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf new file mode 100644 index 0000000..8d0c0cc --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_dns_zone/variables.tf @@ -0,0 +1,20 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private DNS Zone" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Private DNS Zone" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Private DNS Zone" + default = {} +} + +variable "virtual_networks_to_link" { + description = "(Optional) Specifies the subscription id, resource group name, and name of the virtual networks to which create a virtual network link" + type = map(any) + default = {} +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf new file mode 100644 index 0000000..62bfbfb --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/main.tf @@ -0,0 +1,26 @@ +resource "azurerm_private_endpoint" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + subnet_id = var.subnet_id + tags = var.tags + + private_service_connection { + name = "${var.name}Connection" + private_connection_resource_id = var.private_connection_resource_id + is_manual_connection = var.is_manual_connection + subresource_names = try([var.subresource_name], null) + request_message = try(var.request_message, null) + } + + private_dns_zone_group { + name = var.private_dns_zone_group_name + private_dns_zone_ids = var.private_dns_zone_group_ids + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf new file mode 100644 index 0000000..367ab51 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the private endpoint." + value = azurerm_private_endpoint.example.name +} + +output "id" { + description = "Specifies the resource id of the private endpoint." + value = azurerm_private_endpoint.example.id +} + +output "private_dns_zone_group" { + description = "Specifies the private dns zone group of the private endpoint." + value = azurerm_private_endpoint.example.private_dns_zone_group +} + +output "private_dns_zone_configs" { + description = "Specifies the private dns zone(s) configuration" + value = azurerm_private_endpoint.example.private_dns_zone_configs +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf new file mode 100644 index 0000000..2b7a888 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/private_endpoint/variables.tf @@ -0,0 +1,61 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private Endpoint. Changing this forces a new resource to be created." + type = string +} + +variable "resource_group_name" { + description = "(Required) The name of the resource group. Changing this forces a new resource to be created." + type = string +} + +variable "private_connection_resource_id" { + description = "(Required) Specifies the resource id of the private link service" + type = string +} + +variable "location" { + description = "(Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created." + type = string +} + +variable "subnet_id" { + description = "(Required) Specifies the resource id of the subnet" + type = string +} + +variable "is_manual_connection" { + description = "(Optional) Specifies whether the Azure Private Endpoint connection requires manual approval from the remote resource owner." + type = string + default = false +} + +variable "subresource_name" { + description = "(Optional) Specifies a subresource name which the Azure Private Endpoint is able to connect to." + type = string + default = null +} + +variable "request_message" { + description = "(Optional) Specifies a message passed to the owner of the remote resource when the Azure Private Endpoint attempts to establish the connection to the remote resource." + type = string + default = null +} + +variable "private_dns_zone_group_name" { + description = "(Required) Specifies the Name of the Private DNS Zone Group. Changing this forces a new private_dns_zone_group resource to be created." + type = string +} + +variable "private_dns_zone_group_ids" { + description = "(Required) Specifies the list of Private DNS Zones to include within the private_dns_zone_group." + type = list(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Azure Private Endpoint." + default = {} +} + +variable "private_dns" { + default = {} +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf new file mode 100644 index 0000000..2b7af04 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/main.tf @@ -0,0 +1,58 @@ +resource "azurerm_virtual_network" "example" { + name = var.vnet_name + address_space = var.address_space + location = var.location + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet" "example" { + for_each = { for subnet in var.subnets : subnet.name => subnet if subnet != null } + + name = each.key + resource_group_name = var.resource_group_name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = each.value.address_prefixes + private_endpoint_network_policies = each.value.private_endpoint_network_policies + private_link_service_network_policies_enabled = each.value.private_link_service_network_policies_enabled + + dynamic "delegation" { + for_each = each.value.delegation != null ? [each.value.delegation] : [] + content { + name = "delegation" + + service_delegation { + name = delegation.value + } + } + } + + lifecycle { + ignore_changes = [ + delegation + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_virtual_network.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + # NOTE: we deliberately do NOT add `enabled_metric { category = "AllMetrics" }` here. + # Many Azure subscriptions have a built-in or org-level Azure Policy + # (DeployIfNotExists) that auto-creates a `diagnosticSettings` resource on every new VNet + # forwarding `AllMetrics` to a workspace. Azure rejects a second diag setting that targets + # the same (resource, category, sink) triplet with a 409 Conflict — even if its name is + # different. The policy-managed one already covers AllMetrics; we contribute only the + # VMProtectionAlerts logs (typically NOT included by the default policy). + enabled_log { + category = "VMProtectionAlerts" + } +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf new file mode 100644 index 0000000..b464308 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the virtual network" + value = azurerm_virtual_network.example.name +} + +output "vnet_id" { + description = "Specifies the resource id of the virtual network" + value = azurerm_virtual_network.example.id +} + +output "subnet_ids" { + description = "Contains a list of the the resource id of the subnets" + value = { for subnet in azurerm_subnet.example : subnet.name => subnet.id } +} + +output "subnet_ids_as_list" { + description = "Returns the list of the subnet ids as a list of strings." + value = [for subnet in azurerm_subnet.example : subnet.id] +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf new file mode 100644 index 0000000..f8c0b0e --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/virtual_network/variables.tf @@ -0,0 +1,40 @@ +variable "resource_group_name" { + description = "Resource Group name" + type = string +} + +variable "location" { + description = "Location in which to deploy the network" + type = string +} + +variable "vnet_name" { + description = "VNET name" + type = string +} + +variable "address_space" { + description = "VNET address space" + type = list(string) +} + +variable "subnets" { + description = "Subnets configuration" + type = list(object({ + name = string + address_prefixes = list(string) + private_endpoint_network_policies = string + private_link_service_network_policies_enabled = bool + delegation = string + })) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Virtual Network resource." + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/main.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/main.tf new file mode 100644 index 0000000..a2eed3a --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/main.tf @@ -0,0 +1,71 @@ +resource "azurerm_linux_web_app" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + service_plan_id = var.service_plan_id + https_only = var.https_only + virtual_network_subnet_id = var.virtual_network_subnet_id + public_network_access_enabled = var.public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + identity { + type = "SystemAssigned" + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + vnet_route_all_enabled = var.vnet_route_all_enabled + application_stack { + dotnet_version = var.dotnet_version + } + } + + app_settings = var.app_settings + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_linux_web_app.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "AppServiceHTTPLogs" + } + + enabled_log { + category = "AppServiceConsoleLogs" + } + + enabled_log { + category = "AppServiceAppLogs" + } + + enabled_log { + category = "AppServiceAuditLogs" + } + + enabled_log { + category = "AppServiceIPSecAuditLogs" + } + + enabled_log { + category = "AppServicePlatformLogs" + } + + enabled_log { + category = "AppServiceAuthenticationLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf new file mode 100644 index 0000000..d7b6981 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/outputs.tf @@ -0,0 +1,24 @@ +output "id" { + value = azurerm_linux_web_app.example.id + description = "Specifies the resource id of the Web App" +} + +output "name" { + value = azurerm_linux_web_app.example.name + description = "Specifies the name of the Web App" +} + +output "default_hostname" { + value = azurerm_linux_web_app.example.default_hostname + description = "Specifies the default hostname of the Web App" +} + +output "outbound_ip_addresses" { + value = azurerm_linux_web_app.example.outbound_ip_addresses + description = "Specifies the outbound IP addresses of the Web App" +} + +output "principal_id" { + value = azurerm_linux_web_app.example.identity[0].principal_id + description = "Specifies the Principal ID of the System Assigned Managed Identity" +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/variables.tf new file mode 100644 index 0000000..81e6679 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/modules/web_app/variables.tf @@ -0,0 +1,89 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the Web App." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Web App." + type = string +} + +variable "service_plan_id" { + description = "(Required) Specifies the ID of the App Service Plan within which to create this Web App." + type = string +} + +variable "https_only" { + description = "(Optional) Specifies whether the Web App requires HTTPS connections." + type = bool + default = false +} + +variable "virtual_network_subnet_id" { + description = "(Optional) The subnet id which will be used by this Web App for regional virtual network integration." + type = string + default = null +} + +variable "vnet_route_all_enabled" { + description = "(Optional) Specifies whether to route all traffic from the Web App into the virtual network. This is only applicable if virtual_network_subnet_id is specified. Defaults to false." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "always_on" { + description = "(Optional) Specifies whether the Web App is Always On enabled." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Web App." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests." + type = string + default = "1.2" +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "app_settings" { + description = "(Optional) A map of key-value pairs for App Settings." + type = map(string) + default = {} +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/outputs.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/outputs.tf new file mode 100644 index 0000000..ae10778 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/outputs.tf @@ -0,0 +1,27 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "postgres_server_name" { + value = module.postgres_flexible_server.name +} + +output "postgres_fqdn" { + value = module.postgres_flexible_server.fqdn +} + +output "postgres_database_name" { + value = module.postgres_flexible_server.database_name +} + +output "app_service_plan_name" { + value = module.app_service_plan.name +} + +output "web_app_name" { + value = module.web_app.name +} + +output "web_app_url" { + value = module.web_app.default_hostname +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/providers.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/providers.tf new file mode 100644 index 0000000..1f06025 --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/providers.tf @@ -0,0 +1,24 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=5.1.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/terraform.tfvars b/samples/web-app-postgresql-flexible-server/dotnet/terraform/terraform.tfvars new file mode 100644 index 0000000..919af4f --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/terraform.tfvars @@ -0,0 +1,3 @@ +prefix = "local" +suffix = "test" +location = "westeurope" \ No newline at end of file diff --git a/samples/web-app-postgresql-flexible-server/dotnet/terraform/variables.tf b/samples/web-app-postgresql-flexible-server/dotnet/terraform/variables.tf new file mode 100644 index 0000000..db048fd --- /dev/null +++ b/samples/web-app-postgresql-flexible-server/dotnet/terraform/variables.tf @@ -0,0 +1,196 @@ +variable "prefix" { + description = "Prefix for the name of the Azure resources." + type = string + default = "local" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "Suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "Specifies the location for all resources." + type = string + default = "westeurope" +} + +# ----------------------------------------------------------------------------- +# PostgreSQL flexible server +# ----------------------------------------------------------------------------- +variable "pg_admin_login" { + description = "Administrator login for the PostgreSQL flexible server." + type = string + default = "pgadmin" +} + +variable "pg_admin_password" { + description = "Administrator password for the PostgreSQL flexible server. Pass via -var or the PG_ADMIN_PASSWORD env var; do NOT commit." + type = string + sensitive = true + default = "P@ssw0rd1234!" +} + +variable "pg_version" { + description = "PostgreSQL major version." + type = string + default = "16" + + validation { + condition = contains(["13", "14", "15", "16", "17"], var.pg_version) + error_message = "The pg_version must be one of: 13, 14, 15, 16, 17." + } +} + +variable "pg_sku_name" { + description = "Compute SKU for the PostgreSQL flexible server (e.g. B_Standard_B1ms)." + type = string + default = "B_Standard_B1ms" +} + +variable "pg_storage_mb" { + description = "Storage size in MB for the PostgreSQL flexible server." + type = number + default = 32768 +} + +variable "pg_backup_retention_days" { + description = "Backup retention period in days for the PostgreSQL flexible server." + type = number + default = 7 +} + +variable "pg_database_name" { + description = "Name of the application database to create on the PostgreSQL flexible server." + type = string + default = "PlannerDB" +} + +# ----------------------------------------------------------------------------- +# App Service / Web App +# ----------------------------------------------------------------------------- +variable "os_type" { + description = "OS type for the App Service Plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + type = bool + default = false +} + +variable "sku_name" { + description = "App Service Plan SKU name." + type = string + default = "S1" +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "https_only" { + type = bool + default = false +} + +variable "minimum_tls_version" { + type = string + default = "1.2" +} + +variable "always_on" { + type = bool + default = true +} + +variable "http2_enabled" { + type = bool + default = false +} + +variable "public_network_access_enabled" { + type = bool + default = true +} + +variable "login_name" { + description = "Login name for the application (scopes activity ownership)." + type = string + default = "paolo" +} + +variable "websites_port" { + type = number + default = 8000 +} + +variable "tags" { + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} + +# ----------------------------------------------------------------------------- +# Networking +# ----------------------------------------------------------------------------- +variable "vnet_address_space" { + type = list(string) + default = ["10.0.0.0/8"] +} + +variable "webapp_subnet_name" { + type = string + default = "app-subnet" +} + +variable "webapp_subnet_address_prefix" { + type = list(string) + default = ["10.0.0.0/24"] +} + +variable "pe_subnet_name" { + type = string + default = "pe-subnet" +} + +variable "pe_subnet_address_prefix" { + type = list(string) + default = ["10.0.1.0/24"] +} + +variable "nat_gateway_sku_name" { + type = string + default = "Standard" +} + +variable "nat_gateway_idle_timeout_in_minutes" { + type = number + default = 4 +} + +variable "nat_gateway_zones" { + type = list(string) + default = ["1"] +} diff --git a/samples/web-app-postgresql-flexible-server/dotnet/visio/architecture.vsdx b/samples/web-app-postgresql-flexible-server/dotnet/visio/architecture.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..8a89ad699a7d2a1d4c7bbb3f9db7ffda524cb26e GIT binary patch literal 542962 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 z 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%0D6;x9(_iRp~6$8};*AP>H9TQgWyGxEu&y5HsJ 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 &_b5!bULM^v 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

ON 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 z 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 d9~=&A_;JIC zk>PdKp|5fd#_c} zkFcAb`Y)VO(7~8jf;`rkj9P4*cxB3ogK3i7?H8h%ZexSD$cs!ssBpRJ8meL`ZngD{ z#A;e-o?SVuM4Pf0s_??ozzG>V(i5WVWmWBQsvEtbrKfm%dd=8^ zCIjfsQ%Gi?zBj?o`Q}36RE-TpDzI%4#TfIwqD~dAX&rpBusC`$9Ij}>)W7C$JS7ms z?~$^rxXwGvqtwK+joCFlXSK7Sc-=bKvACxpz4gnts-3^;@VpfQn@b#?};H$R1i=r>5-Me29^!V`wA*F~?FZjeNrzKQ} z0_9?TVoO>NYHHG?Utn%utC$!K!0-}GYKQ<|{rgD%Jv9WiB;Oz7W5y#k5T3j)-K4T= z{xy&7>mseTz8`aDgP9YY0tRq6k-4?b11gG`Q>}k7(rnB%1w|^v{v~P(j^IbrMq1}{ zYRRf6$!QtkmT-jrCB1z~`!|GSR@>hhy$hVuzwm4S`m{fQ9VsUpP~v-8$^-tcmk$FW zZ2>Sh18`kGkJ)|+D@Y4bH{{T_X~(#AwnSJn;7z<&msYz??z?{$G_mp;dB=NeR^Otg z6}YHLV3jZ?gD=kHr%bXGmnW+uFfbF^u;4LN#gYE=B|Nki=+cLlD`Zx^vNP^}^r5TG zSam^mCX%jA$AKDHZs5KXH*b8(AaYUBcnV8*i^BK1+N}5$psU z4s7l{un2>i223#oD(dxsuo#viF{7hGLOsoTtCnxX*_K!90Fa5!d=7xjZvB{d*Wh!U zr<|~AdeHC7gAUY@+viHOgfd%A{K=!DC=Z*Z?LYi_c1$39o)lMD6Gv52wo92ph)Y^{?_0az7NF z$RUNmce(61piBWOD?xIBfmSkp&IXRJ-B>qiJ>1xE?8feLj3kSTX}U(i$zOxF!!rn)^xO zNE@1QZ8Aw1igAxQ)>=G+i~Q0>PmJh<@!Tt~qoCktH}mu+55U8V18 zHM)TxjQI&4aROyK zOy`LYPKhS!-P~*tRukQ^+r1QCj>|hh1k?Vw@|D>d3;%4hy3?rUvI!mf$!AdN9q0eZ zkd9thfm>R+6@{90aPA!NM-8(t{rWqF>1YJ6-u3#!QM=A5?jPXFy{F1)JGNDP{gg9K z_9_bi@e6?vIukC$C-i~)pX4uMgh9kFs&jdh7?8k#Yr-{xVv2~y z8h6GAQbXrP_j=&ZUX^^k>*D$L;fqgZYj@h{al%7hpS1w>X8%A9${T;vPBnalb2MQ} z_HtLOg-?v)ku%jpXC(>IM8UmqHs(sQevd_5Qe|ar;Y~1Iw;nMdML4^@Z=N67W$nZ z>gvlajuA&TFn8W)43ds*Gr^O1SDZ9oIiYz`sK=h@gzAVJRtpP4c63|zJgzwZ%Inzu zf=PmtG6pp6n~5h;@Q(XXze&XtDc+|PP3#ZBWYXy%MY@IEXTC}81;{XQ}rkfVtL2(o8*9)OL8iqT{57f9}`GHPH>w5vh+JpS!t zyYCOn4#5kbGfsM2B}PiI3D)_w$S{NxgzNZ))HvSY;^A2h8hZ*%n7v~-l#&tLU7)l# zmHE<(k8^a%um7F{I_+><#tP8v-W$1gtXC_P!woZ)6Eymz|9k&g6bv#C{GomMg$Krd z8|%u#X|wTn{-oSWsq?Ld9)|_?HPnLgx%3u^v%#e`(W`ghHJwQ7nFQ`$~nRddhS)If>!et}OR~IbPt&&=od<56@eA%*UcF%@U)wrduA8P)Mw|DwfdYYD{|@AJ zJmNM^4h(pCQxW$A><92+vr+69OsBkqpiubv%{SR@b1I`smZDQ=J*`-)_49_rYPj&J zF0St@$`GS(>ic-GB2iXHtIMSFdxLFwT_U|E7N8%o5DSqfuK}-W%lcqE=~1#3R0hN{ zoV+K@{7TXPBh+IUW&gRxX$4L2p;Ay4sTmu%q3q~iq36J2@*gl{V5q_@M9i!^!Qv@j zsyxsmBd&lD0F88pBaC$l;)TWq{q7K>2=`ke_?k-lJvsLhgF0E@%oSA3N} zGjrY^0l2WAQro{Y9P`exC*8>dbiEx2+7#!|c>w%Ql~=k6>njV9glC+94;1St4Z}}R zExS(S#^-w_Xp_{}8x%brKCSBw%puCo{1rMelT~$nIo)`u>i!GRHz3C{beDfh8r^!c z22{w3rI)5WBHmnR894#;Xe1)JH9l%*kP9S1EhXkDO@0^&{0^SS}Y75yd&pg`QPkXNVdh3Fz z4Tth`U{dTU{paq@V$`dZ7UO2Ibm%{pBiJiXMX_caIY=yJ{Q!vh-uyFcG#COkB?_d1 zOo;;z)J3>gMfNd0$86j8>$xXPJG9(Q_g#{D3+SqB#m1+n`|G+PIk0~L1`B~9W}Zix z#gzv*ff5KY8Br)23}i6Eitgp;XvJs=6TGM|r>j7gQe$NIn-4FR0yk^8{?!~Ph*b=b zH>k7lph?95l%qdP%k$tL(2&C9d#eZcyigdiX~Dn&p@IHRHGe9@n|`z9K~HJ;#Y;Cf z)xJBww!0Z??WGn zr$vMJIWR{cAc%l#jDrTjXWispWa2~bhVpVEtyS6mAT$hrE$Fy#LZ|Y}lTT;hl|J^< z1`R}LQ=ED^(y;M$A`0$H34UKv_gByHMz>b4#(M{gv1m4iK`n)UpoxGVICGZlak>zt zwD!QV#H6q4=_TP2mu_54Eq_TTp+0&cB-s*uG-3JvPeouNp;+z-hnybrNijza(GgZb zTI8+O0{c)*0icvcwt5lspdqFj-l+{`dzxy2Ywi&T+UzF`JOoQhU7PV40G}{ICUi{d zfp@HxLkfT%16T%`lm^uKCr9WLKpGO0pY}BT3MADg!KEi+f-sKcSC(X-r%-b>pMrv0 z2atnF}&=J zjP3hheu$?PGrQHb@P!}Tt3xgv#nRMF4yhHLcIw@Ugz*#|r?z7t$9&-XOlu`F)d_-b>!L5Kz;37*1+aTB5PZGSq* zWn{A|B@&zP7xCKS69Yj}Ref=1nRF|lsj2?Nt(8NqwxS3ivvn8ndu*gOib@5OS+tE@ zPf>Ag(k&~$5-e=P(ca^`954d|DU`gBkw~g!nup~$MyLJGFrLj5zJ6(AzbF`94H0|) z<{?a4ck}vfr5a(D(@ZtHhKu=`U}PSrmz&VZ@lTlt1dKU~G*FD+G3q7=6~>xD$h+ki zcnY9SGYiUzT7L(o-n%N3Y2S;MnKR%D-$Haj&r%G!uv|iYXLi$Hj@0JKYqc0iXg6OL zjpY*L=O-3F9r+2yM^t=3u1n|n6lZ40)IW=pOKwUHo90zXDr$lkJnrb#+l*x(BUXgB zg&UFy6s)jtS{AvCkBvcmW*uhmN68HwT zSrDkq0*F0qxTlz5nWsJq%H@X)RLHy}g8D_+g8B!c z=r`8Y41;f?8B`0G78!C#7MO(1sSFDlqCp%%-B6=$7jJpzM(&~EIX7Lnsv}#HdjGmz zfdQ<7h8g@c8vxHl;28Zyo>v^i9DrSd7Cd&R<1?~boLRwk_ZG`yr_HbSBrS93{M*Y7 z(80o!eo+p6=A;c?w1Rnsu!ummnxqWTPm|^o!0Z?`21%HR(-Jg>BbDr09_DxMaDTS1 zs1}W-r=j@)W1RFtwzic$M4WvAhu{>h0jO36$n9Nogd@KMyV1Ltl))Yt&WN1TU{MA@ zms#h~<8&bMqq-r^GU`U|zTr6}FEIAP3<0#O>}wI&2QJ=KVtv9%Vhl1^Uhjz6zVG6* zHs$y89YTHexOKbr&YOFMwdGGfP1A(BCc|~+QOFOtS z8g2pK^jQ+98>O*Sc5wq5VKaHXY@BzE6i4sWQZpOIw)J71-BraK4wpcU>5$+v`5o-u z5deYwJ>dg^Y_nhmGZ(-NrE>x7^k=yim`#0-yPx_c<=`o8qA)DLj{X#Hh*_s05z(q}e|fg6mj=U2-aI4wYte{;Xtjz@@NSn+>^e3WWjb4@o-$@PY6`3Rq-(gl*?)B<|xGk@g z;s{wCy3fqva9_dSOx*atp1uZ654i*&X5wjnqgBNBA??hQBQWw=*l}q=qGdD~yb`^d zdb+L0f~?gWm`<Jp+IN=1t~# zAuWU>E|yDuM}!3d%Y-kc=yQLH;Lz086V$^@9&MvJVEE#G@G#hT#@a(eZPsE|9QWI+ z2My(u50}3}ZUz76GQ9PW(}R|s+98Nj zuS65Y!UFEi0ut$Kv}P>&N%g&7Dp)czt3HxtMfHCm(s2NLEB~EjE>kbQ0UjID?FssZ zX`*PTW90)!ZbV6E)gKZ27{9MKD8_sR?A9*a7xKU1^={2pxV(Ki=!C+wD3Y#P3xw#H z9|`0Wz=eQfVge;^`19Y&hDX#6iB2mH|L4+$*pYV2+K*sgFFB7#GjnG@-&srE6mQAr zKe|Jf~h+bgC);-tLbBEj#KfTczJj>#M<9L#-V)S>%%G(d=BE^g z=U$RxN($D>t#-bH)l8-zmNPUPpHssOg5Ns00mLC;-E9ATOKtthWBo4sw@9iB?q~pV&y^F)HxTU@ z^>d17@Is(Ukkzf9Ga95Z9R!j~k%||u{zq2XUTq00pWnD{ zov!990y)!`P$W6OYN|Kp`1GY_dFEC!jQ}^*bL0KCP}1cpUQl`D&s@$rL5n5_9w5S% z?O{NUTp>Qo66IP5>T5N{(FySK$gbGepvkR?iEejvr&t#ybp$1P^;kl*LHCq*m2SL5 zAp7Ei9|>gQ*KuAOLAp%)rO$&EeWD+>Q4_Xw{fb@YQlJnvKZ2F$KN>bkZ2lOqz)xWG z>oxdD$-?hP&3rDSN0xmGL_C=HU^6ZuF#AlXKM%7&Qh@?GkPOQe6%j}Z+Xe`cWHaElN9 zW?M_^oxFPwr^0mq;G>+T6`@n6l8)-0B9O9x4YK_7+OYE;Xsv6|j$rGoIKqf9w+DiCL*>v{>DS( z7?pyh3oHx2K%(#`#%^;Fg`1`ezkfuW!{BXLr!2%i^?}4}9jN~SPS!7*-;`N0tk=6| zD<6I}wmT2-v)Kw5->_Tzd-rtm;Rvck`8Udg&`fi+$-dM%a1O5;%qQ-S&SRUVg1J2l zTA$|Kt3%jmI7F@gROt;$Nx_;|!6M~b5OFddB2Nc){ML9w1?q^mkv6aHMTbN zJVp0k_vDlj14x`>_p{(}07j1b{B}RBA43v10{0cl`zJ=cg5=4Wdg`FuacAY*L{=&w zk5{koSW_IUta@YIDL+E<;R3!tU zGu_b5EUit7it<>{o_*qQB}{P{@~dLM!4`xG3;%J8pZouEo62~~t?LSx->&TU^#1hr zlEs(yqoSOpqiKh=cV7$OUtc-mKk4j+RZzb84@n4b{UT`; zh^KUV2la6rD+8GURK?;B33S)r5(ck!pvU3i2-2G)l12wnWE>R$5M*VrjLmsK>jn=6 zbp0K@GSS;$qfbn9x03r|YwIGW1!CIjvox9hV?6(r8yGLVyhaW}#(Z!jM=m(##+Cfd zc#gdA?~ZWG#7Rec6@$EhJTep3rkUG1Wz*xjyFO^UcpTBria%fb?kj!9k!uh2M1sYz zG<|QFN1+YZTw(70Wv2h>5G0}qRzYukdjd-wPVB$#3l5^8$VP(=x)%}PBL+-hR*eFg zE4%3yA26Xea+#q{)Rt~N_v6-c3qb*yETLF^2Hzxu-!A6PhJMoXi1c(Wk6!=QkDZzHy*2pfXFF&%HDff60)0E%E5 zc6Pgv;R7Px1W7b3JW*i9+bEDTg|~D^A3my`6F(G%9!DbyFykb3gUEIJ*p*lgDHn~< zPqs3vl^1MCabkulVEa9JmBrZnWTX2AU0J}V3ItD$z1~cAOCq#)n71i(9y5HQeS+bB z_cvpUoVIWKGA5eVsp(7i#H?+wz~KiY76z&@}=%qFZ=e<3B`bE=+Q=rC=wu!H|vH7GbTpDgMoZMW!Fr6 zwrKD~B4bAL08If|%vfS(CK-wH0K`c(&@xM+*Dx4jN=zEO-g{Xy9BqA;l6BhkPxCCQ z9)Po%%RrOpiEk%mj}-8?$c5~8xm4t~`h>Bw*n$?W6iztnbjBMkL3wvoyJDF!+pNGD zrjLt+Nwv4C7+zpckFtVsxR(|7GvI@fHehb=fvjS@sh5Hs6Xm`08g{dccVMXy3GJ;G z)R7Wi5ng=@?~DRO<* zA>=qFD*OP=eT3`}WdYBo*$ic0;lKn}nRI`Cpby5!>y?Gy>vA8&@Ty=D7ro3Feh_2n zrB3#Zd(2v-Yu)b7-#dKmO|LF3_QJ}uJ@u!Nke4h(^pUbw;9>jwL!6^v!tC7&b!+S3 zA}w5C(SaGnYJOkHfX!bPC;08(`ycJT*>_zWtT5q1iZ=tPScDiC3yIpA3X2`6Blv>O zx=r9fb~if^ru`~@C~Ukux21M09?AT#YWmZk(v&LvcI|b6_^hE+R)iZ%<=o3&a|E6W z!4WsQ)i7V`FTb3dXAFn^JI0Zi-D8$LRvh6EGJg6c`nsn;K?A{{ER2nUOfL`^JK@nb zP!WlL`B-x_x-$cFGCJ)D`>H&pC!-pzPqF!!Oa(alz8sGfO}d*4F|0T3kOaE= z2-QhgpFKB~a}CB2TJ7*)A?o-??AzK`*rTXLNOnmWghym(@V?zqQm}9jZJ=O9j{s}j z>lDH?axJVWvgl;zcz1p--l$FQItL2I6&+XA*3 zTkZud|6q3h0jU+XSv;7S7E`8@#8C_2dqa$6vPKq) z7)v}hIBy?neSP0fTuz@Y%$>f@BgPRhVt_p<#*Dq{x_W#tGoN!54auk=LrLGsIB2^k zxyzQ6{{G9yD*1o1>9RZt@I2Rm34&gXlhcN^^74>Q%gSQyW6&|kvZFBT+Ut#5wNU;C zCvOEo9>_b|EA_y6D=ar-?L+#@9xL>d0Go9+L0l0YZ7+x_ASOvj`oml$R5%vPvGfUpu z!F$lMsC+0pcNDx*SHQX}$SRLj*A&o5HuNuU~IlYNU+9r}}`- zsBr-UGEjzCry@rdFOc~ZqS4d3DPlLn&Gye^=T9%4l;!@|zOpZAH?frHzX(<}j&!vi z`b06a%Gd$rj^h`cL7c~F>L$HDUkfl!x21RfQ>Pid-g$V)22)>1#~y=kJrppIVe7F6 z(sT<_wh*Ywj|x#Rm3d;pa6fzHlyGjvV{%HQ`e0?rN$eceb~>)K=XAO)y4T?TYS#c` zKIa~0=3JX{K}f+CHq+{^wPWTi3W9G5%1j6f%U6dRIS#(h6bF7M^1{m^sDHTfg9wJ< zlxeM>2%|ncH2Ik*iE(H*mS3M|J-)bUnn!aIY(~b?HhF`%2hn^_0*SS;s(PMvXW)8IH94tVx*JL*fb_FuPeY#?U zP{27L{8_LK6T_=jw<-*rreoVm#)bWu88C-}FYQW9t^cE~u-ea{;KTPWubt;qk~X5K za-KfdZv6$N(YWDP(;Nm$J@+hAHLjp#)lH|+T5Z4k1zXvJ?Rj_94qg#Nbh<>s%nvOk z+Bhe^*t8>Xae<{j{K#xiFIR`YJ78ScD7>l>KK0xWsSCPn+)J&;7ap5SGCO_0;1aZG zd;O22VHRr9;+d%*Xtd7J0ShQ!ta)<(LKsdpBMf8aq$ihtoz&s)AYQyZxyNrDmYd7% zKtYOMexx;Q1DQ^nm)h_?I=(tp;~XrK?>-=!eE~Owk04ndqwesLROxf;+f;(#L@~mA zlA#AOq1ksz``e~g*-FWTq{9u;@@i|az}&SPVB~rn>@Z{|!q;pWc9&1Jtc+-+wr zB`vC9?Bn03P7DwYSmZ+Vi6t)OtRr^=W=<%1AgSMPgK8 zA7p=Go<1Ni(>qA`aCX2>at+Fb!L{gc8ZfnpA7;h>mDc))*IVq@Ev|PL2hl8oh+N^l zf_XDI$kI}p<kdyxm}jZ3z^wut;j#kOz5$&%x27$%-mY_3 z#~t{l-rjF}1K5z&hx246K}p051Cf-^o<>k(rIJ)PF*+9g3RK3U#RAniH~GRoJka*Q z$}0=BUbnxwRR0he%qbi({Kr4yUQuY3um7qrJYg6Dj5GwqdN7nmsuWS{8U3xJ^=*FZUrXNf@B7-`Eo+lnML$)pz^`0z+d9Pcb>bolZR)>~-CM2Y z8!|!30rPU=fMTDWYYIc2u;UpJ1=RjWBY^}{-QwpB9qcE4pmdq-^Q(-Nc1+tNq?=x`SB|MjbBrit3 z{;liT;=@g(qH6R;eNP>0I09cc3LQOH#wZ~&;Q8h!`22lE=Sw4Sr-yB;&?i4V^XknQ z2asa89jETUEV|dpD?w_wbWqFYqjWQ+Djj$Jzh0{RgZF9v)#)FTJYW zTHaCDlzrXCsVlre7wr{54k%a*$eu&|xZ>LW^?4A6ug<`~yL8IZz>GZYpD4ZV4iT=PenWyE6T-@|I!I!F3KaxJ!dxK|s@5gGP!BZwIA zupCG;dA_)~$!xMY1VD@pq#Pb0;W&$^dA)Wfj;LH*hK}v>BZgS+qG){0NsvafR7iX) zkRom4X_w*}xz30>`5f#mn+CfVnQz&}EW|=Re-Xw+*^4&O6i`qbPkxw??Bqj*XA0o@ zcS*~U+eKFWeT5)(II7)$x``c7>cQ6etrshep)+EnuLXFI4crD>5C9f=zW)`3|7lyg zl{zM0J^%%r-X(T!C1$`|hx~+uju0s|0e~}u(S9^jmslJ{M0gKq8J6Dl)e?W zVr!U_9_zt2qJ-l5LtoAmRR?0|!pvWcJ`+#1K@^yCGa?%RqJzkuZK%%~|0%p~cZ26A z%i=PTs8`DHOf*Ho1^x`5PGTwoThaeYaKKz7%DZ6;RgrePZwY1lBbF-f3Y+ZGBl~FG zWK0pqLs_Cjia%vZxJy?}cl^J$)Xwv*iMloSj$WnSJ{gorf5`p|**D-I`6Ktyf-M95 z(c#wlTc70_=}ix-nU5*E#BRk|8*hAHB@T*w=zP%wdJ9EoxU{52cP68&$F@FSgP&lg z3nKk7!ytKsGq(=l_zwv6`%bUKNL%B`A~}zA&-(kpws%XqTEwW!X`(EVEZe{zk9A;n zwAgO1JTcwyvJR<_3DQ{E}A@$|Z!7pDkJH9Ty!Q+vR%l0Q4`So34nRFjK@kB7uFoBXS;(Vtj z)vP_aw!!B@O4dK5ka0@lNWkAehclSdh4r^grP5&b*l?*mA>Gz^;m4_7Im{p0&>pVT zJ9NZ0I1v*rE^!aEC`d=ZYPDvT|5iNQv~^O4`(?!jm;;w&>a7(DVCph{nh5m(hp>Ts zG2H&;RK8+RFbvQ3a!IWWV!o7R9pSLK1mC5}DcL~m3AV))CnwoQlM;JJwZ*1edX2sJ zh*-KxXS8O}mt0nu-YZV+&tiZJ!={5XfMno(P6IY2LaK1zO9`Rz1Sp18@$mibB}>zb zbllO4*wAg_jhJLE0li!@oj1X$4i zd~(EafCcQGULR}&{Wthv4ox!Dc{4n%abl~>a)Y8{SE&u-DD`5z{v%{L?aPpmgR+za z+fn;AFKG;?jT)ku0bfX@Z1cJ5vi5Q(>^V5qg)f7ZN)s+uJ;ipFfBcAqac~4(nnU4M z53#;_tY?RO*5=~ch9eiy`I$4zND}ax7yzcA9X|g*khqF^{Gwl1Useb(2pZWEI}zBZ zH|R=$QpJx{{ThAH^Hzv*YnyF!$4l6Vu5p^W{PHUAw-bfwcgZFk>xuYS{`np>754t$ zTu8`dN@(5*qzxqiTb{;GRCRC0iZMgKd|XeCd_6C@?!egYl^wN+Vo9!^EUXX`h_85M zD(t9ggkzn$G$C{HQ!ih-$>W_HZkINugUkar%s9RK(9uSt~oR4Z}7nYtSyK; z6|BeTg4UMxKj<>sc}~>;%=R~K!wPjPLJwtKCEh^>$6)IoZ@_m#Ps$HGJF`bPSvnEaN}gd4bCC&o6k!u($SJb!zKWuP4k> zUEdwEiIW4uwx}Q;5}b=H*>9}S%w9d}4zk<$S!U29CoZ>!dY!dw9@wdLxUz?Af%Z%vfU{40ZlVLqfh+O?8pw8H0j7PM<0l!-@00iHKtEo0CLR z>owRMg0+^dQ46})6Lk$o^Zt@fZ7GR31QI-XSin(kF_~kT8nGE;P`n6>nSHX5<~)S2 zRuu-y#inh~%3eRy_X|B4>bq9cb#NfJhPeZeCA;p?z8V z0;t{?D^z@f@TB#w+=lW!Qw8$ZUq^w!86M9UByi@kDfJY~-OP*D}u z+M--(QjK?zH^hBzCW9zPSl$F?c7m-0cmg~z0^~xnKpD?TMKY8HF^p*;vAOZdUOOc) ztqqH4m@h*L!DC$cxNL25=(!)d7IdA@J(FIWUsNU@<#=L?T=!8akO-|9vs%}f3^ccg zl9A+2o6)*2k8@V_L4oUS>>;8&j#k3>i4Ct%Ro}yK&ob+n*U^ccupKw^kK*HWw$T#z z{DQ|^uQo&}qSW22b$7?oE1T-SG`{JWr*#M=uAtk`8JIsGWxDZP7N^k`L)Xte>|;lR zAp?yK0WGLch0TL#6?PD&-{Bqm=m)&41ng>@;MN(CK9ui%Vdx}3=Ye?%6s7!(x`nXi zBcw~QV;lU2^2Rq_7AQ$+#)+BG4H=5`;aTHUc_B@P0*E{&$%FO_i9CoD8(20{&}Z$@ zyPgeWa`$SN0yv-wKNN+fP4H2@gc@>oUkBP_iUjTW;F6t%L?s@!AGpEqI8kSJY;)4l zf3`$#0|bYCGdF$tlxtQo2N-f1%SZ~bM=CXpqTm~>*SmnNe+2}xO89-c>r!ePp^e58 zc831g{UzIJlxr6QP zK_kDFIAv#oK|futTpf1vub5#gEJQinIQMXRSL$4h!E8g$qu=~ zq%2+W-um~G*S3KZ)t9P2KdGnF%_XH~d~Fjtmh0-Ltzi~Gj_j-6y);}h2;LmpDX_RE zzF_fi=dub|wHkKp?<>R?mqAy!tRTZn==4tiApDejeaDXo$55{*aVRGeJAzBwo@^-E z?*3|lyw)Miip(0eBVV#$suF`DnmUyI8Vz2bl56dbf56a2z_E2w_<N4Kw*Kzba)m(#gkdfvk3t|M&Q73EhLa3nu?35p=fCji z9qzInK{Fhp@5?Dd=)bhr-DITK{2^V3y>wmm$>XNG{LbNsK>v?kpOVxlDwtH6p|#v$ z0LQYAm-aN4?e|)I&*`9RdxanIOK6gm8^Ve|Xmn#EQdqfw;I-zb0XB|IZHcK){c6`U zj3^I@Gq8ZyRnvopvbH|6qEiI=5n*%L1p7u$uY+-J4O>#)cJJR?U0dFmWfwoaa40ER zh+UjaC?>8;9|G+w@7ej2Bol%D5L6<%?ic;{ZFY!tv306j-!tveIyArKIKz5XEB!(X z6r=Y&ZbJ*DBl*f7ad4n{W&CNOOf7~LLz3Fr4=@#T(ZI5v4ZI*=o`Q4av&62K+!L$}C~B0@@3am(xI zsZCEvpIQ`%%dFq&6`Msxe?vV&*$Ni4=;>I8a}_s*fUq4!CL9AF8bKiPw6W|-wxp)`p*MFP~VJnFU+Pzbe7fr zU(%Y7bag!+cJNC^mR$lI;}$aj?&1T(pBQkB`8{C}HDIvMKPE zA-8Ei|2o({B{M-iauuuVe8gqzM?oq2eJCoe0K4E1*kY*Ws0Zv%u9@mp2nWw) z&+kMkF`EP)pX2tI9&+Sd%C8+AS4Kk#e3K)63PD}2b$6^S?fp67`iS`JLluleMKHI; zUqX%IJ%$`KisRe515+#d7fZ1lHblL(ZiaMsVu7JvYZt|Zq||lj%so!+5E9G<^*zVL z9l?4P3O{S7lA_P}>l+)oE1McT>|@4SEY7d*)_*kcPK7D2s!DSJdiKl9>f$nq+}g|` zTY6q=*+cULJmyQB$gg^0A0(s*R}En4GNvVEe}^tjp-5g{W%P6&xBh^oubvY4f;;uO z*CJtjyDlML``cLjtO_VQ4KgrYHp~B~9!6=ZYq49&`_x3IWA?M#vaaj;JeLzYrD%Ba zy>H(2Q~Lu~PM;+{UsONxUfYHByY1-5oequJ=Qp2DxqM}uo}Sh81e@np1~Y7T7dmD} zX{P$NPPjyl`NQ{-`#+8%!Yl6kZZBPUBO%pd8Kdd0c6DcNQeMZi7WeFLV*)C?cBYvh zhTs*IiviS=eiz0`&sQHsosmO-I!|Q24$x5R>_Z{FB{T5 zmW9jf6pXZUE6xSQuc}t|qmQ9M8QHHz*X$0YzMn~>2`Oe)%$u|TzQ^lAdO36vvWeKN zp=)+a+sBF+Nv_%Lf7Vk%D_dg&{)dhRYl%pF#gB#&@ zjN0NIwA1kjwMj@nfO^2^r9;q6i>CnxZORzR zak$1e_G+tSPN~8_Gu2$4c4v67D0Rpq`UBlhWIYMB57}R2#ve7;7n$rNDRWAba^V#I zV{-Iz^yV6k*!xs(r@{xaiP8~z(mRWjyIwlPt`aAkjG84YXKwE7zh2jzA|kJvLwD4q z94h_tz~cS4RM)nGmk;9dJBOedRKM$p5tb6JZyWKBTA{Qb~^j(>0UcM&iL59%!Aw``(LVs9kk)PW0en(qcNa{H3st+`2{{yd;aL~$3`fgqNN14f2 z&24%wF~&h{kqYgONHFt8PUXIl&nA(og@Y%PWk&~#2571-$L6XuP*Z}8zc(&jZC z3KDkQDxz@voy9ESS>ltNc02nAyinB;4$u_$f0XSFM7th*8K2zziV~I6>y1;~ZLCUG z=D%fpyKf>gQ+37PY53bU(1HN3T(e9lt=V(gsp?Y==jtB3w@uHGiIkiLpU`4^wMjhJ zFopEbd$P%g76tjLd!p+$Kc*W&Nm%sZ5&NwO5GKX>z_;_z-dITS=x+Lx&URDbrjk!#kNHx@I{$I83!rL<`Crg~SXE%(=wbQA z@T+!g34Bzh+3O6wEjH0cPIyu6O5kns&aj>p6mc^{Y`qfz%k)B{vlQQdRdk zS1^=zM=03$oQ%AMndli+3BzYHB$Dnad$M1)AE2Z`)Kz$XYaSbG@>Wzn)hdu0zW9DZ z{nBn*W@%Y=2yTVqbV+&Q9Dtu3Nc|Pn#mlPkQoCY7+spQ!j%J{e`f6vRYHGtYt?`WW z$I8w}A1)p<3~EY&%#>fD#=@h2(`l~;Ergu86P#1?!YeJDMP_c|b1{NS=X@zj-VpsG zbaBeFA+x5!xfaD$u0H90avSn_$oifXYq-rNh1T6?Rn;Vvt~y9EADd55A$FR<3A^=? zo(O%|PPIu;$g$n9SyC-s;Rb3{*nIWSzm1Gd?O?~Vg1VsfZsOTd691DS$ zFW}E@UrJ-HAE>^Y`! z{>b!_=(OtGQSb+>SYV|A_oOVeF|-qs$t$^`tuC?*bzn$ zLB;zw@daerOX}#62rg5f+~lp^w=lBZb1vj*JGX35(O;8ku?XQHxc-eJ;AXsn^JA-@ zN}(SUJw-v0#W7RH-pC1t8po+u+C0mWzu1_3t4n)tYq|CWpL>_TyV7EB9$9nj<+mC1 z=Puc+o`<6H<{ua%P8_nzIdrvXlI)C|in_6LD90tegZP|aN3-;VgGZfKoXd6!!2ey@ z-LC$p_?-czU-#EEejOX%*>rao90DokTBte@P!Ar~MoFcWQ1PHt<;|o>>W`U98p;bv ztkGX+Ww%|dKkC&p@~ekQfvs1rorij5l^EZv45a>Ux#>Zz;yy2eyy5+sjSvU(5rRUe_dn5>mn*#c^ZL^*)YtzcRLaKvRowD9G2K;Fz}b^c z))dzF%`&;xQ?G!|t8$A;Mk4@c&GV)n^ESp{l5!>;g5;+>`}6BNuK##Ym^4>NahF0i zoIwxGZ35wSf9yo_r|i78ZC zx;kDa^42h@<#Ud&o5*=Vw)96YZMJM1%LdNOn^eeH`3uz|2rJ>|^DOBn`)mBh`ppuT)t5cj)9S=7(p~ zi*5zf?Wq6`zu4|r^7X1~HNe`AXt#YX2YYhFW^VF5JLl1A^jYXbqhfJLWYVwJ5=!oP zHHWiOW`>0s{8vC)fDu<`(VMh=tDo+^Tccch;Gg2|37Ie_J# z$W}x3nOF|W+$y-abWON$i(``Zu`)(#TzHUKv1{I0{EYz*R0DWQ_T3HJAGAFRDUUZd zsF5p54+AJPE)qU{ww`Y=g#dn&_88LQL-vd<6((`^#ejFq%E_|QEVRb#BkukH6t@hZ z%0p|IO#{@<(_efmdf?F+^5t1f`~k~ooi#ES(V_7P@XMT2s4|N#f(mAsaGJ{2ayX7d zUrA)qZF)|dPe_^!yJ2PBYMJXMR{R++N}D$<7)me;&B4I~4FOz5lhBjVv{9ax zhW`SBC+#H9_6}MeWAXdpqVpJH4};e-%iNGv^fiXjo(==lAX^EjPj;0SV=^V=4y_>2 zC2)RJjq-#0OWj*0U9pfvhY>s=1tYb|*m1<{3a1we8Lp{>3Z@7zB0{u|S3^oqR_A8g z=FhiFKc*rnzkS{>|1;bzSz#{~AWeGZZR`!-gD`ELXfV`=kz^C-P~=tD{GBF-uvN2` zUEGDhW%n%^k)(Hj!0VV7eOUR5#UexH5%`bn7dyP1w+pJiONAS}d7l4hr&FdEP65!u zrxh5;C54foXW;n5s{ey179cQg$;{j&dL~Ab0$82lpti*4+^v0N*_me_!T;_X7$bq< zJ?N4dlQ+!G8B^hDZe8=tv}-}5Jpj5%10yG1Iv6*<__AUegLbU&%E}Yre|21N@Afr< zC%K5pPO$D9fl0Z`AMw8r3ab)r{+QtK#Yc3Sp1#lb)P|ycZ|&jImZMFN5nL8gio;9U z^&k~l)V==&(Apu$$nhh2HtM9f$_GFt-;BMdgdCgX3Ywg?T%`7FkxT6e6H`P`cv^t2 zr1{B>5=*kzkWI!yuQdE5f2w5LJSIOeAn=N{|3)GdsUiBuIlFvAQK$>yi|=j@T-?*- ze5S)~3tP+kiL43VivhD8wXC2>X<36l>-Ju@&@fy=xj|yyecf2$P=A6U!p@zI(_BAo zs7Q)aDfVpA?%8e6kD8gUK{-C`ICYb^nlQ;vSdkZWVuXm}5Ykm2et?q`$|(vdE;pyJ zmrSAohNF@ZRy4e|RUbuNGo&19x2q^bKMcNclW71xs7!|HABWhdHF|6Qwh})}6Q&$bTd2hMxVX@6wPhIk zqdU+=AoNws?lK~Uwx(Fy z*aB|uoO*oSD8U~##uxRH2M7@?=!&ba+oC1Th-l3}Al;DmK73iEAN7jpWre*@IZkN; z>K>`MCZs>?anO7b%JDq`(E6}ln9V5iMWBPIBac%>X30)4*gOoYv=&YT@K^K+h=jfb z0K;k=rY$3{*XVkD`R{Q=;Si57aEt8U$be}k*CAiNfAyF;gY687AZ z$7o;Qmi~RL4Ah|}sA3x>QA;hp*Dz{zs13OJ*m_qdvStDP;qTHqda3MuBF!zSvdVQ3 zhXGyqoy87lsjrF2I+;T|_D~gW9HQi;Mq-3EkibCfP3jwlE-^Y(`uF$O3q#D>T3quB zihxS>7<;wq&kPJ@P6m`o5?7e)P2Y?2-BA-zff!Cs5)RJ!GHT!9WV5b>tAW&$@H$}d zcJpY`N?>eOUOW9JDW ze3#nBDa-~_XTKC1=gWD>T*zh#>fp%H$*?D=M_U$8+TW-IpL<;1zer3y>GPuK$GK(>+$aF^!k44kFT^|) z9#ZDHWy+G*og1DX7;D;Pn2m-&7ew{J0R3mRY7QJhiTD)v9)eX!VPlkZf!~LGLV_%G-)ga5=DtQpBixf6JY=X09#Q% zWAM{0R0jduVBNJpbiRBWeN(^r*){aP_Ivio!VD4Wu{b;l8djjNiA~fy1s1s?9%?g& z6y~X(BuuR?es!Rsr&QZjSv|32EhEJ{MwNeqFEtsfJZ?fjsu&aF%L{JWbTQ5O!atG!;k2%7_zjkTE(g%Ot7$`h)0QGJ+FpizvDvpj`Ak~f^rPnc z#C7!qGR4!`nPLtg%Z(R507bS48}_nzL1LsfP+C*%plkTzTlL#6=ToD9clF1}RWO(^ zr|yxvLPt$J!NiJZ!dA~J6e5ULn4fyH{>Z5F;)7|Bo2&ZJ6dqiGT zL(ij$q}?HhL(bHd14Ft@MFVv?8w0@P|TJ9jigg>?>B zJJPG8D`nq2Ro4FcjMR|U9-eOD>QCooKUl1YFq0MW=U_zy0%3yBM4ukOl!>#35~HQ@ znA}4>?^OC37r&^x+sb;Df{X#4g(OVH1a|De{3zEVZm&DU^qA$wg~gs#^_FT{*;V9= z!Cbs*B!`3pjntVE4rp)Th%T?10@{t(6@0Y~qlcr4cfdid3j2yUrq~!Rd)aiUKHbdu zC{99MZtb8i#~~yR2>gaC3(& zRs}U-7>FcFgi-?U^)c)fbS|qYMIynuv*+Q`$D8xD?=>%e(9#uQah5iNBDo~{I5sIV z&LS7~jrM^u`sXNpZSpk6tvv}HAGPgv`O-G?@~b#f-;n%62B5Mqnx3?rn%@!V zC0{x_;lX~}o(&7vJrfg1;R(k302AUWEI@(dZrbeTYN{RsO-&q(tnvk6Z}|0^ZSODIc1W;YAGv1(I575H`X@$Sl+1Hiw8PEKAQz zUG~jz(}S|%CRfV>BOWyQ$;{~33PeBRqc^?jm0GY@Wc6W}64rYQ#)K#i_z*M--F$fhA<+Wz*6A^Hh0yn$ z;ydu#YC{_}dKBq42YNeX+5v1`XQ@G3xT{(zDd9nVZTGa$*@OJNZx5lKX$^DTA8sGy7d_|$%m18b!3BI;ZpjXcI+0y)X2k;jYle0|d0N6C*i1AVyTZPbn~_k}*a z1zG`ntI$1OO;ZTou7CqEw!@!U*N|lM^E-==XR=I=Rpl zN$~6rmkVl-QCiU4-O#>OD?K~;ZnA4zZkvbyF0~;%qBC6h#+thMc_XbKPD66Z3J9+C z{6pAeGGTBNB(5R?#kcM2e1n|sVWx@+DbR#X9p#@S9y~>KV4r>5BYKl=d(iDKos;VB zE^%zjSJ8hq5|^0avMV%{6yp|J#R^fRMD)2eSuwfe@jpb`S_vRdF?G`>^~(zW8<7T- zSKvg<(s6Al>M8fn%`rQLp3%1Ao;Dd-r|~Mx(Z~Qle)MP17PGI~x~7VJ%|dDB+A z8+FtAJE5BOKU*WvB`7q1L%QHK9J*kEYFr%3T^n+}IzIoDOMRi!=Toj{3K}1@oL>k% z`S~LQWA)&i4;yYs@orR1_r|zMWGb#Ic*pni z4I{qiz0coq+68+e=>b<%)dhJ38dFOn{tVuZm19$?N?Zd24sI#+_)wj5 znySH3dtvk@4@&3Fd$q_`Fg?KNYd8>CVym+tpx^~=cOPfdL9>a;7ZCDBQd@YD63I*| zewmGD$@eEa(23bkC*SqPVynpX#SOof6y6R$Zdo`Bt5;4^Xv)XUejqKcPld(A%iyHq zmD%==iGuHp_$g{y(-@s^{^uh)wx=w!aVsf2U#&{cRx)xNhs{T!qA|5xE=I>dIz;S#?u-~Va>)Y7oa z)n6~8YC2+ujk8o_=Zs;}NYfVk8N~{7=qp)jQ~0w7PfVGU!pnRVCDdyNAg>V&KhtPmR|2ys|1`M1)SK62{gg|^N> zP+t7Q?`R)duYus&UatZAPVOM7l{|;k>ZQZWrb!J2Cn8cCoy-DVPDDj7P3}CHonzHI za=W0P$pm1SRCEP>btcm^a6!~?51|LaXRbDewjhE0KGyXH_@nGJo&Kn_Si#G#^0i+G zEVF`54}96x=r;+}P5*M$^qp!jRsa%YJ|a@(7W=V};n_L*$y$`~6ZEwm z&Mx)Cb%rw%f3XG3+ii9Pcq5homyd;kuZCfJ)4%P zB3C(Oq0sv*%mxLiAbVabM((z{BE8YRuElvsrQ{LvGYR`yTmBgKwtW!0Ls zU;HQM-qkwvp#e-;1E|GkRhd7wuUf2W%x(nW&`7mcSit^IY*6oJ`WQa_o5;7rW z0f2zQ)D1OxTk>SFaXd?}FO9rRi0T`6idBFCzI^!qi2Dw>rq1<$z=2i;#eoQjRUudh zpj9?l_Y796)FPsST1EB<8#h%HN33XNxV?%%g#to=fG8MIP$?iI2}=PPVTYan^PZCl zVQBm7|8wo_y-M%R$vNkFpXd90hy8nt&G!M&Jg>R6^?*U;nrK*Y?VNq_h?Ka4;KQdg zLmmTs&aKEu4d>#WeGfsA(3jlWzuiN0FYDxuS1)j00FBLi9AoODX9=wzIX8ZEeA%}R zP~SNMBO9Po1%ZL^F3G81pMW9DP?j42x6lojZU|C*gO)}nlYr81I~Re&FoIp??(6xW z@ht53hq=f9u&>n05Qr{-Y9gT%{OcQmLJAXjA<)>B&{l3(I{R_g+gyu+@JKH&j2J#J z@YfF?j5$TVWkTXKqgqG#@kss~5@#)HvCj`GjKj_d5n){A7{CCg;@hN#K3b_Ej1ZNo?Kx?$?#&%5V$JED8(Z4tRXWKfgDwJVm>ROF@P>-(mb8ui5b{n_AJ; z_*${MO-Zlyin(@Zhm~?a#e@+4ItVT?2*ChwiTskja;;^4;;Bk-Zz`v<$^&bCdzLf= z*#DRp9@(A#Q_x)JbND=R?^fAeA?YTd73-G^NjIg`Ff8x-w6fbvk6pOY`ZG}6S)O*! zme@4_JVs|$=#0hrPDp6RLxDjxF%)x37^L7bw4ME!Q_mNbSdD@S`Z+*}v)#_w zgdmF5v+>!@GY;3hYBVkBDY^YvpVDNQgx6?9i4ubQHsoOnB+wIKobf)3eP|lKaVuVM zlD3}N9OhO(!G{tM;_l!+2%L>r2h~)4V6a6k?kkE|dY&w&t}u0De-hXoNH-in2EgC^ zLyL~MBQa)ry-sf0Pt|K?CbmUWT7PFx-XJp?6*JHc-zvlTpbZYuV^kGWg!z-g^5R>d z40!9=SgY9Ws+?4Ly0IJ+ZQzmvTs|gpYG_HQg4lqsiug*<6NwP4DVChpYIwD_HQK^M z7i`{f@FZ7Sg`Tz{`+b0vHSjjhik+2YlHP3h76|UwLrFnaCu_sLLK-2`s}4tm1@*=` zs3mcA^_}d5&IuNN?Bo7X^`##pS$Tn++vB+%4i8`*8vFw_*^2dN$cjlU3P&yE*a=32 zSyuP7Irt68zc(5gEG{!&@7HkWc z`-LSATd^g8trVG@+$9lm;spJ7Ki`^h3Vn3E7!1$T&~Df<3iJpAF(&>wG@A~^tng6H zt23b)T`8-7VVA^&(u2)?_UK^pi2;}U{dxjj;y$~SX!}2lyjvpdERSqLTLr!x+Z<0mCZ@pc-Q*vpOaijFYCo z>FTZk%nWfziij3=D2Vn;MY951goPVe6lc~MjZ_NUERt=tSweKC?~AJGlQA*KP|d?e zRebD&oj>T=Z&{5d+O|v#@jF3Bvz-c{bbOBkFnf6PNK&k9txpS$wbqDS`4xOqv^G1> z_CuWl^SLKnQNFUrin!SBBKU@Ja?{#J`i?-95@}k&GiHAgIF~;fJ6S;cM6Wt2qYbE&Q8ku9a`=<9n9OGo+*bv9>mc zu9rGQPsGL_$DmE%YjOD~TB|)ihAEnag_r^b;4-(MDGg6|j=a3)n%7@!@9gNtT}l<` zn9T=Q2GD_utn!5PW9cV^!QSB`3<2czyjBZ&3Y=DBX=wl!N11(j*CDYAF#uiieOrNFgk8%75Sgv8n z6^{LiagKTKOTx5q_JbNCz=8x5$BB3+h_OV-)o%;~0&UCO#4fYHU=s9M4+TVX<=t;^ zr9zYsuX!mWG1v8m*kUE{!HO)cMxGupl;0M_77^8N!{cscl zvoNe@P@|%`TbiCEaVW_nvNM0MVZU3#Ii@8Cl97QbH%^53_xoLV*sN5#ufkI6aAJ+w z-8_>?w?YtNeH~wx;SjX$i77IRlm^xaLoDrz~OR z|1mb47>$%n6Wp@n{#OHI(zl4 zR|FK{PELLIir2AiFUaLVvJ7k|s2Ru%>T6sMMA!a+=EwO_T{>K{pXn#BHs|(xH7-as zgw~BSzTb3uq^Mp5$+P1zBkaL*A(CYKWB`f3?OJ4zP1)?;*}*A3+yV zp7Eb=oc#sLv&fzu0im9G@1NMEb|tOe4F^zp067oI(uX7#^1TCYS#FRmFVMYKr|0p> zQ$ejLot81;p2QmK{{#{~Y!-OI_t(tia^`O&PyfXFm0iixxaxuhLEyf%HIyqHy0xt)VaW89(5}V?oPxVwHI0^Z< z3^qf6I8bRa5xjjb@9q7*8`h7z&7}UX3Aqb*skr6k+O_K?=9sm(SZBsv#o6?D3(7NR z85Bvx4t?qIyMMB+O^0+QT2$XVZL#_E=m~Jth-wDJzzPQd zW0_Y{;eONL=)r32vN-iRhtBa|LO8QAK-9SI6_2C_Bs{U4;6aE7JVqO~g%jbd@=RVt z7j{RQpYzsrs|bvw*3Z5jzqk^Of(3(N{R#T{HHpMIDPza8a^H3rlC z4(%r3e6uBSP1o->`MrN1EH?~c-S&quNLzF9CwQn1{SUm&G21ZlYe-mV3Hb+oL$q}^ z4teOrj4%!DIIs#31)hPJh=JvR_GUcpgs7hmayr5Mbil+86jlTHz#vDz%_Le=V`zNU z+gpSZZ#tQ`kbS5wUKEjG)A5>OmHPS~_kq*&{L1;#JO zgf(FB2?M~XX6G%jUGnJ@un`(qt$@hI<8lthK338{Ng^emcag34J`fk%a&Y|lhlp^{ zo@@2%TONutp+s2g#k0p0au66ZC%(&~*oEa?YFgT%mtSY(kuO&!WU&JMN<=9L4)#VZ zLUj*p1N(W)@I`6BhrSETOTNqEByd?&^&2T(3riP*)@psE9^7J zW8PaM6+TJzRqT*E;|AuE?b*A&>a00u*CWfdJhGTDXk zw)yWUz49yWp2b`ZK#ASQPGTSp2lo2|aNQh5%b)<76|ohwempt*gVX1EZYGtKKkJJx zc$vc$Nh56di;D%=jf}s1fpv@pj5r1=dm$a_`{t%&e!j?wSB#^?(5H)7qs3wKyb#~o zE3`PlxomBtPZqn~MP+wKF&wgNz^dV9{jEui?TacP7vKTB2@#3$+clqkWV4IoZL&?0 z%A+UE*$&7mu2jK|e0hZ9f5${2$x?+8(Qu4!o0*3C0w;2t^!9}i0$<5WjU7F5scwpg!i7NgZ)7+4IlUa$dT!~Dj=&D4T znROmKci{#|cfPDqz>Ef6W&%`|;!l;xX2c(1U&`@S1f-}*OTcFbUm;}XGPqIhzbh!y z0h2Myzy+ahIkDEhpQ9UhXJr7!xVtcXq4#OYC=J}x4lP)?%924h5y&wTS2J}?N5Fy) zTh*;MYd^)-sCn@!=$zJKba}*?0NN4H=odSLaqr$fu*27Befu#RD&0pVSaq~p?22+e zqQc1NXaPJw6OJtE9REq1=LAc}Zr zp^cxVM)%#CXqm)nr-qqX5AwY${EX4tX1-?K)Guo*DrSRm()!wCtOSMZviKu#PSsDJ z@_%W4-iH7I$L?-&4=wNaa;6{KF1go*Roqnp6?_pmXnuJc0hZ{2DeDUSeH60Gp=i9L z_(qQx>wzOyFOqK$Gq~nXdBRGJ?Jr`~#apU@>599=$I$~y4-6w|z0J7)5c^Y&MZUSS z101+(c>Y(&7ly|^wMGW2(7S%O0^KysS52UI0PuL^i)qQCThe!yuG8~6ASIlfJ2A<{vhr-*E~6(=rUGe z6?i$+Ug1rsu&iMl7{=()# zopHqpo58jEZxIJzVQ*Fpv3P&%ee;^U2XPBjj2m&0lx6da@UFM-%q|f_my9Z{gk4(3XWPdmfQssexCKjP&E^< zu*g%yVwSJ<``G#unHJ3Og~9u;EjTYiQ0r4XaMSq-X;%N!!F9S`#S2!@M%!P;69zOq z?uPYF3dvnUkC;QE9&dDr9?APOU`mATAP2AEgApStFd<(2G4ea{)-m8%>J0;jSNF@D z$d2m|%98%j@S(@w(}0JNnF%iFLG#)*p8|nPv!{D=9tMO>`D2l8-pv{P@KaA89Y+q@#|rjDPZ=Kc~3YA z`#-jtH5k1K#O~FH@P$3uFHZ8g)XayCshseq@dwbl|L)lqY2Mb-@JIfUWio**(HC7vMTk6L=$(Pr4vao|~eBZzyv1vd*mRfBWFs2303jGRGbK;w>3f1`;yFIHJlYJ+!-g;Hn zWYv5B0xd_I2SznU3MDSWRPokft7tOI4=I=wuH5Pu1b-UXP7}nljG6lc9EJ>Y>I^*C zzExIY_0{j>V-5)z!2^{amPY2w32LKS}4%m`E!M>C2-Vw`Ku8tPvM z#?_m9hP)47m~?L@u`>)c?%`uaD+9WUO)^r0lC3ALag_UiB)NnqCM zTz|)-xbj@;f!-?+REl*|1K|t18n;Vrylzu@X^G07iwn-dVn`78^W~b&32Y~b34U1lzy3+kjjpEGA^wRjt&p&uJ){h_(0w=Q#)muQw8Rfggn~4h9 z?CVGJFXfmng%=BV-UOoPKjPdC+tCcAwUy{`wndm-4KS2vrFek_e93l;x6mySU}e4X z#n-eEaCAi!Rwak|NM^UAE2CKaIEAnhbD6=Hn&O)8;kCOMWFhR<=)t(z`CK)V!1&9B z*=Uze(Xa@1k>$MPBH&EpsAU(}oKv6{i@-E4w!VeS#k87*v6x^H2f2 z^#Xh@296v0#{xS(^B0JD>r^OKA3s=!y1Y^B)nmAKd=A&Au&rS~#oE8;^&4CnyIG8K zn;UsCh-O2s)T*7udLHegR^(9e+E~@ML@X61LA8x~+iLaqQlv?rh3wqmz|An_`ZG8!(@rFEGv!gl|Il+4Q5A zOSA;oG_E%0Q_gVLaMbQae>Q>h$@mGpbQ>FXXKGViYB=p3^upu|THk*{t16*5z2QtA zShs5gTM`du2=(+q-&W|=^L^(ciH7)%r`QmVua#|x#Q%Wr`tBrRqElwmnWSvJhWpv6 zT??2;^26&qSHmM12~N1Mjr-bB1dW_me$v#Hd?oKQCxnw5*IZRing}*5nsQ+l zhz!dDCI_Cz5P3s+s^lZP%1f{&1}$g5x{pysxG{9R?P&ZER1tx($Q^$h{>(7Mepm z%oWoS?$OyfN?atx@V$m!Vy3FRAsgiu-1YXzY-(gO&}^Umi(cD)H;a!qSP8O`UbgTA z=7Y7fHF$A+`Ah<>znrFmKlpJqJyJf9#v3;~U1!GEM2-QAP)#`==EC!S6T;lZ$Ww+L zY%KUeF6P1aS!+quYP-G=nv{5#>gN}1cIvfhH|&0;{n$lzk#U$=5&K(+{{=ww%NiB& zwi4sX7g`u$GUcQna?Ks8>Oxlo336a>xGxnR4oGJc6FdoghQPuMz=3_6uYR2D$!%ZO zcASoft;;DmDvb9Z*+ly%?F*0yb_FG}PMMRKzh^WS-TdrIZ@H?Wda`ySIy8i`>-g9X zS57W!v@|sN1bJuzmM>~k%uRA8Gf1>oPx5WeeR`ThpH%+6twH9Mb}dlZJom%Px(y^Y zU)`|))M^B}urOjN`-fZ`>c^J+Nvqoa8#j4*`r5b!${cp!0_7qS;BgiwNW^4^$6YD1 z-l!3iS5VxB{D62h2(xR!Gm-_?!NRmqQ8zlTDQX1zdFI&dam`nkWCNyxs|rDkV+z#- z@a3!O;u4B5bGd<=?%|yg+w>{>JK7&YgK5zbo*7ALxea++N7I3}ECTwsoa8~c*3KL$cNl?mAynz~LwuSag+Z$XFh;uKSlgtx)r89T0TpDqDS0$Kn>gyr6rW=2c(coy%aJ^Y(2rvNapFn(L%nTuczbP zK9PC6h_}AcZ!L+x^t`+Jv7G9S3Q>r!LcC*{dr?Hs!|e2~*%mkSIcznR;;!a@Sc%dh zmB%Q@#WUnLrfhC(c@>>=anE9ffwD}+vJ}6zXIEBFYIFspeKW3pv?RnW2yUl^ z&(GkzL+(qJd10K7re#SN?Huw9pEkAF+ORlQ_UFQ3^3^3Gy#UuwhD%Hk*kKD%R)IUh zll8)%U!Lgb0URdza_vMMxaw8ApJA)jI-W@a>G z8!rY{7uUuE-)98t^2c)DCs3{m;RNM4L42=g>>?G;y@lWib{PJf^&)5`o;8qWYtTK* z4!N<*n_a9uQS;;t>)+VZ4pH0+1wy_&pfd}_VM4Ot2GkE@NtsxgTZ-5mBAM{I^Ml3% zVECY%guVo?{0X|tFssmv<(cIY zm+WNJQ>Gv4w2)o5z3bF$L;VD8BJ201o%x4)s=O#Ie-!s_zaGIzv9w7P?jHxiLBFIj)&|HPzP3AcdtV_}-XGe{E}F5G zIkDkgzHQc_Pnw)U{YiR8%mbK*+{|5ie*4>gcL~W%b}80)j(=2mjwSaxeHCUK1G3=*+SSi|h5v++o*~pS?4w^^=V> zqoq7BJo!*{RE@1?fs+g)wx=n#C?u(_&@8mKxQ5mKs)OW zm{Jk?6pl5FMyx&d=l&6bgz-41R9$=DV_KhLclIz$6fJv^S=oz}!MR0f>B~F32DUW~ z$)K6+cBO}_BpzwaV;07G6x~>4meiVVlTS}zMdcQ`+EChJ4;oee9>=khH~-uG95c`; z6uZdejtDagpC6%DkyTKJyir8-!yFa(STk_eV}@h@34)(nU6I8nm{Xzby{rzk9ZQHl zb{SGuMFL%ivm5B|yZUpQPDeG|PESs3jjeu?O>1muQf&%Nh3;AxuCHO-K8{%uspO4c zQhE%IoNFY-!pNWiMDC%}6TcHsVnic9fb-zW`Q7*&Q$81%f$?wRZxQpVq}`=-U@rhemrivYd9<`7-YL5e+6#Ww}@7Rc=Od zg|HrY_mshx16eHW$`o2x#CT4!998R)4dBkb zOZVaE(LRU}8HCWt%MwJI4}Pk2)%J>GMfFLwCE;=Au^vr@nWiSab@O+(rfa0Img5hZ zk%c0Vc9L$x{cwN}KlliTC#@i=)i6rO3>}5S9+L+BJB6+@lWSa`;|8%`n#C>N`ybbi zjU=cf)~47{y$X(*MHaa>v{9RjYmh5Dv*gf1*OFM0 zjlNsW85?Ok?-$W_PkR*Fy|DrZcgNb7UdWgaC9V=^YUuUn8mfHp>;E`_d@H|Hdu>de zj#s|fL@=z()K)@MO5O{|E*;zhTP*cv*{q=MzduUbdLC@2Tq=?YDR!!!@St~wPc~F$ z?6I15kgl@38G)&j;je5>y>vuERw68cHK*W#7ZKSFgbrht%xAVVtpHWjjfNuhG{tw> zi~&8#ewZYhJuVL_Y(hVPrB#b7Zl40k(so_+OxYl>H?b$;k{WdLi`zQddp@BP2Cl>G zHMmFbehcsQEI3p906FKL_sLGf_(b@NFUA1$R=HJGFFY?y6*x#6s!8W2VI}zAAd-JN zN%l>!X|1@SVPP20F36`h=C&vCub~zUM2y1CEIjHocW*|4kUTQ{KN*q`f#=SWcIB-$ z`m)ScrZS;s)j&zDef$Q6*)wm(tILLT!}nj@MlOn=ls6fA5)CI&-*F!zujD`1?%wQk z6#Bq{LsFzMb0IiJwm4ut4epmDPHA`YVos+<`$G80GR)Tc>k_J9{40_Wcn5-6#V})> zk`ULrHbC$PBy1+=3d)dQxN5u+m~rml^U$ zMTi(?aD=mmG3LdNZ?Ncd5p%AI8zg1rV7&ZBxV-nCyYEET=-g2ld z=}@kAPgX#G1RtJ}R99kSoLE=5&Eh1}jN9TFG5_K+>{*AQ&ofa_vYam(a_AR87BSnz z^@wQF5$*BCOIv6^lv-77YY*OPQzXlbL6WI2U5mz!(NXB@WUZx7WVF?1MjE?U70D)6 z*EA^d?}h(Pl52-PEOx1xfIzKBhJtf(Me=qLqkS%?l={a2NqYj-{HnLtnED#ti+v)0 zDhNm;1*`tNU=rf|7RaYs!UpLd5Voyu8pPFg7WsMGg`g}oZE)eNqJ zG4wQO1d%KS3MW{bO3_B|!T9EggfxG^Xg#$2#EBrfdx8?}NcnVXO>-mV-YZunqn^Fb zR$GJnG0-qaLL(vw1r#9J1H&d~bUI#|JVggCV{&u{^(C)VZjPvtF?{H0&s+-Ut?|Ai zn~?Xh2yy`3W&fDs0mZHqZ4Xv`gy){Fz*6?c-|L=Mx2VWz{xSzsX9^iV>3taMKgjdV{4md{?2rF5X&(;l!_p$Fd zW8}H3eZmMFk3&@FhVx{XV=(vNkjFs&%|bb$PsRjwx9o@7lTkU-AifJjTA4)N>ud2j zL7MGt2~z2^x3pp|<8HEezWo-*DxG=Ay8R&la>$R1E6Bo$UMO*rXNf!mPXN1ncH&mt z%IxxT+L3EYlfWgE-lN@UhF_5bIC}H1Xe8PHIOx*Fca~895so}#I&p{OtA3*P4{ACc z1nAie912>gEt}huD!AQF^G6IDM-to5wl++{bj5A+&tT4d7{U^JR@hRX+b@@zl5hQx z265MenC{Dgqcf|ZV?p=*hf#HYCLG-#EQx&c@8dKN9fjfe|MNP%xzNa|OZLl4x?fVk z+U?UrXp`9q-uXqSU{e?E8$rqfN_0;oBo$ayZ4b>)-b?&c1&QNWu!FY^E&Gw64$Dywu z{o?Z1gi1Xbr{g|T-S|me3QgPGr(`qpICB;6jS1aP_q*!qY~9r>4Ys}itfyWL9a0j2 zHmsoU=GbpSI;@km{=(dk0pm$?=je32%Z#Mf5kkEi{thgUyU3du5AKXhc65icc;@Kz z;titNB)5R-2l*F$m@UvmfWm%gC0W!Yz|sz~Nu_M!?=XmUE`d5aX&pBW>PxngBcAu` z>aZ+47$m#=G^o85x9}0)ZWiw)$d0N{y=TYDyUKVyXr?%qeK`yxn|TmFQRkuH!~SV! zn@J*sF^mV@T*e37)fLu?Vzcmg?CXA;u?kDi`qUzogziqV_AZaAHzsLzDuT~$YqNhN z_|I6=3olFH+OIEqeUX|E^-K5mM1j4$dB=(No^AW}WkP%BmO|CyfATNmG%s(`@-B&& zw&Pqn2qyJYx<57Y-q;02M``!AfpGlbbj)KMx%{E#fxq|{90fzk%4t&AtLojZ{1f(p z=S#gjB=mu6N}&{>WK`LkgS$WvWb$_Aho*N%f7O-HOzRWCWhceVCuS&`iEf7nuwN})B^B~GLIKRS|8n&bNecq8)6^g$RtRETIF$p+@RBx25_ zw3yhN3fKzOwkYO-ks{TG*Wx7?yU;@juGnaHwKsFrHTX$@5an<$VIJunkFv&IWYs}< z*8HsNxtr>N=V~t9p!o1rtcp=jB^=GrUc=0kD&%1=o{X^RuoRiVscjlTQi?CzZr3f< zeV_jtIN~B`=tu#|CvXhg=MXp3Cf;aa)-%vz_-n$Ae^tQwX9=Z4#*c zYBdiH|GZTuG{ZX$oE=53aVF?0Ze^5Nx&08|99p8i4XgW>BLPP^ih5DRM4vCBhmJ1; za~}w9T{RX9>*Q~rr0rO-%85PsizvN;$z!Q|d7l-Y2|#y1YOa?Ho(GrVA6=aA55VUD z@;0e!i4Dh_2n|IKU)`5NX4&v~1N?zGt^EUn8+>>MYM>RV=KRkd6wFb`kNF6@>-Q|J zbu!ABsFEjtl~E>)5_XKnMQ(^5g##o!I`ja+H2wkPO3vty#%ZkoVULc=WT0f|5f4bI z&Z+oos(&*1{r_?3%H!F6EMRkH-XoeubfXD|6zFu4@*xTn85wa zE_olSxh_Bw-Ffit213`7sk}H@v|Go?hr{t}_ZRK$sR(o(6ZyI?K0dBwT-OQ_A_SKb? zn2#6m7;;GM_y;E{GHMyQsx7v8X?yT?bfy|9ULZFvU*CYjLc|K7xgrJ;5U@F&77Y`W z*NfHiF0fxe%j+HGqaiUhj3OOqSCx0Q-tuS=q$u7KSz%uVU!E_4jbXr>_pQ+yXJ&-& zF{T;Tugg9kp}O+!*|%EDa4NH|NG6AtmY5WbesbsYZ?*25pm8bRsPc~@BNggq{?qU# z&)dFZoVL$1myS3f5@l-|AxHE+=GmfDD8P82mUG)+p3&}7l(q;t7=m{B7?xb3n-py9 z&)khYCoGpBr4(kcbI{|rZuaj-3v!*T#YQE~aXVM7Tx9#S?t1%X{$sKk?cQ<{TD?tO ztT#S@Pi&%TkPg)5hjRx!9Qj#X;uHt`(mg|JlhJ!mSLHO;pI8N9X$e|I=)8VK$;gA5 z_zdiCHpeZfFt)~y)BZ6(G;wb>aOt13Ch@u!lW=|Zh|nDHx`IKZg#{Nx-DAHAo$BIb zp`f|sdZR46k2&d2pM0yIBSK@H*9af-_JV*LL@F6fdmNW(ZOVdO%rR_rGQdDRcmVPA zSr14VH$q8i4-M zr2*Tx2z^~CuQwBO49oEI3%4A)Sp2CaKR_`-46YuMk43V%I$@DubWz$O|Reu98w zyUI1}IyYq>%Jzb+8^q89LFc452qHgGXtsz?BzN|caEMw2l>V(J&tY!)U_ZC=ZdGaJ zZr>))h8t;I%s%b|u7^o>c8QB^Qi1YrT(q3F7RSc^`Kzn5X?Im+gMP#-*J9_+H_aI| zkLBw%byLOflEvi6pO*%U-1QUJpE4zzK4$c)wkPqvd9y?pDwRDyA?BkY`0$>AgP*M; z3;kRNcdI65Hw!S|=nG`2nU=G!DCurmgS=w#aTF~hAXqB9gk%l~Yhw%5At-43c-R@K z;`woXq81RVrb1`^r0+jH$N%KqrMGJr8M}3DY|!U_uR8ji6^=F^{Su^2eUia2rDy!5 z={RR>K>r3&mqVefHaL95`U}XVf+uo8$1mMkVNuH3bazjGVF*tsV1vIJ5ox!ct*ec& z$q(uLt~;Ig{>4ymUP$CFMtG!B6{!E&@a?9-+=}Z|9_|e~GGroV3|Ftyf2qTD3Rq6d zaAgLBrrS}!D{{}Nwy+O+tejTy+F|izbx5{QT^w*E}-a?m0SrvrOl# zK=`Ccmo{2B6&W&n%zh2(ehmjJwL`&=XgG>GkJr?c|D0dvzK`9|lutSs$#@s8VFBkW zrvPFb3?a%}#kpoaeT~HB6US&10mmDB*Mo&!&MVPUTS2>&hTNcp+zVG8ExyaHO;n(& zgdNE^PwHKAa@|xhL2yGc_s{HE+;Rz@l~j3GkY>g%G48x=>wU-?_G>R7up8t~nZ|U8 zA>0s`+*A*jLRhr??uH>#t_P%CKrsTpyp2)kNZU*s^7x)3g^RNrnn@E$-w z8uVED3TCGuz2$Jw<8csrIYp2QEMkwQyB1iMkA>~e=Uf}#(-~`R;yu-8EpL!I5LaKz zcmQG&@9pf8-0a%Ch~BLF+FT|xyp9S?zb4p7bZkbs>-54`EC~Nq0n;8XdN7cU3wi_v zdv;A;G+CcnE5a&SUb7ZZ=!0( zNnrzpl_M{GC&r5y^aAdNG@gaIu=BcNX+>Hf=R+Oy3{%D^^cVIeQ}5NJ`h?5`r~ITp z;cHR(JTtj|IlJNW8+v@MFFn|-C#Jsmvwnh87~7?C2j{7NT%mhNWen4$ZKlUx*5le9 z9Zy;u8U09Q;fJNCC?3sumUt&29H!N8ARoL6@%Je)-v9{93h+J4HiDrgUEcz{5~Vgk zHY~Os={RKiRhoeJ<@QZf^JI@E>qbgy+|!zR>Zga57W$|2&sSQs>>}NTXXIghX)ejN za))ucd~-;pyMGXGU)X02aqRMmqyMmSfd^Wl=gew`GDn&*4h989R-)Wq$G^Cgo-gub ze|(fo3UW)o1p;Ba(ae31JsS$M>t`mk6=lzS_88)Zn^r$9n3@V1RZy;hW;ynv za}apT2aHl5I}?a^AX;ENE3F9K?UP1>RnhTCx{GhiBaJGf#Lh%`D(6%Db}(CBTE8@D zIEAh$&K(>Dxk;#ey1-EObU3ah@VOL*+eH}d)jGP^9)HF*&jsK?pHvi?s(<%8&r}me ztBs3&)J&L(WF``7r0xN)58Tvw2}!Tl@0lAb%zW>M3D`6pZtAUM*mo^y&`-?=;VFxp z%{l+lPe#eB!fr)p*t+cI#M!W|gp3w^`?wumdOTofK$C1yMFIc{rgFFHllb_dpnNjhr;v)y&(T$Kb{61%}=Efhr# z&G%7mvq7XQ&&#s!ierO}6o#%2fbXrpX|)WqMB^dx1NoVB?%r%9qfYWsVd!r!U{b1I z%TLxzU&G6*h$JX{`#^Pz<2vzPZM4Pk1H49C5N)h~f$SS!SE6iujyVbxZ2FYW7<3>~ z{A7bZXNC99vk38o^7j$ds1k^H`+8{;^lE~Q+nZrN##%b@l2@1~NL#kYR=$1sV4{ev zju0EZk6qdzMq{uVSMjNDjWa*Z9GP4i3A~+K`V@~t?6=2O!gaH1v%-B&Yh=OGndkwh zGGwdI6MX= zIYB1~)JfD)UTNm+OEt!ko>eIuDSk5D`$)E}bG&xe!My zBKc{5eTX(UD`xFk3=kmAp~)f1vuj*~&!fUvrgP=a6)z8Q5$DByiA&h;+x=+Y)JF2k zxDeX8wOgiPf*rjl-ylYxRPw0)R<3r3Nt_2bIOz-V2Zw7)2i3h_3h+QCi|SL+-Kg_b zWIcLh({-Mdd;@G22Zwq;?8BXQf=Vh3j&3ctGKY?v8}kGqY*C7~9POeA!`6cK2_=eI zSsbq#Khx0sU`l-qJ${7Br*V!@2<_Si>;U_Vg@i#4RUFp69>Rk;wEdSyNnSgbz8-hq z=5x0)-IsQJU?f?)`p!7qwV9NB0=Q9{y0Sq*a{w*c@vDK(p%EJ-&+Fnc+NJ&J=_do; z1$))4_LDJ`%=QJ1y`gj6k}S?0E2&$_`$aFR}btRL5D31^mP$JXLzgX|l2|4nN#Uy^*ml@kG8M2`;_`Q%h%GFX)} zdmTUNTpxP{g-Q=IGtO*e(D*kqFt7pGlYiOdGaDO0>frfpNC&8!P}zgZunPXl?pVRS zz!^?oWg>&g1mJx{)IdazQrw1?&8h<*gm*mio2jE&e?6)jrOj|Zw*|JYY|Iq$HLwGJ z#RQRjJ6*A+=zrKZ#l!WyZT6|HxaY>``V?J1C*OBB3@r@k3ON~prEqL9G`ahEf5fCi z7KwZwi174@?F$DmfQZr!YB9wOk0)bUzyo#3s>tOdrrf{5Ck)D6OJ3SYBqkcWMU-7I zkGMl(19-FmpPh&0<}V}KQcByvr3j59kJ)d0=mn84F#pV#Zt~IQ}<|&Dlk7DbzgL}1}t%s-X>^+nvFT}+MhoU}t za$?Kmw+3t40x${Tb0-G4{2&sAtg;(=@|3+K(U~-1KGgIHGu2jN@$3T?X7TQ~SZP0i zKwZ?93$ydY_Qza!^>A5*XDnwbgS4FvoaRL~0p!-Bm-h^hp(+VrO8_~3xqDYph-Xiv z&&-g<81?0jG5o5{&+;3jInF&rTid11@Z3&s zQ)G5JLQ;Yy+^7XViY^C0p8K3RV@3EfMY|_?pi;2x3uqQq~1x zoh*-C$kBJp2sc&o=pr{9Vdt8&-!8Q%G;}W60`*{RM^h10Z^Z+Brj27lA)ft4KQt$a zikS&5FU4sg((l zpr->otNzxA$QtO)M_G8G-aHKgzp(W6zP6QIBMoR-hn?&>cyWmKgeIa_k>R(U9^u=2 z)o#zV{-1aHpg~24QfL+)OG7G?J!*PO3L{~{2&saO`?5w7R^-$GO-vO}Xdb>q5VqmM z^!vMKXYq*L{hUP#y})j2S)zPcg1H}~sRJ}WeGB$f;*L>Ju&2V#pGR$t@dvpSwda6A zrngI;pw9dF0=}jUe$G|p6QEu@zLQUc*uqy;@RiL=l@SEGlpl(BCYGm=OUl- zU|+x`#tGWaGgz<^YUaeGi}nfKc%JcFK#4;Ad}@8|EkJ;kpWcEiS?g7bUkS8?!7K@6~Smc`)ClulT;kQw#tp`N!QP}My#75xUA5)UYERLe5^7qvKC<`6hBiohHssU z11w0pTgaXO4hZWnbzvFi+5Z9tV+7RGdp#00!jkK>86C#*m`H!HZK5cDVX{O4GgZHL zYzRHs5%~#J&D`B14ZWvydlXi^)(+HD2_#7ZYW>N}0}()mo)i?Hh0!wDIc|14y!CAp zo5$aV;CPT_@uEIXCofSO5NsZ!yHN7-c8A4$uz8Jy?mZjr;$D-+;6=(Bc$iF@pIh33E zPTTur)k*T?o2zt!Ru5#ezPbGF$PH^=Y@I|T9u@V%nMO2XcUt_>WAfdClx03ytqG>i z0D(Uf+^_$t6Oft_?U~9hH~*y-dVz31sGcYdMNTgr83RbbZd}+Q4e7I?<=K5hC%&#z zzxN|X40ErG4)^@EwE*5B4)+4w`c4C1s3IPey43f8x+m{U_s*uuv2q^SWtcGBm%?at zd_aFmF@>6dsO6$S@ye4y?{6&9bFLcewxg>l-@CmekR%(P{18gELUL7`L3VRGd4N3y z_hmrqc>$H_memAIBPcAC8ZH=lnsc~m1>2UY#L9)2>Aan{?rck2?ox6Xo{~3~ucJe~ z>zV4u=$&iuz}sD);}ikMPXb&E!Hb5DpYw$Oi@^Z%;gUxJ!v3-yMaXKd=Xf&Dv8{92 z$Dy5OPn_YTC__9wU9F~U00Vf;#Ic_Y0L;E*7!KKRb?uO-($$m~tl!`Qk78V-Dt0nO z00NIu#-8rvB^wQ2n+&>Uoa2hktbM(C_-og~4|`xHb$Jn3u58v?m)IDdy#g%|q99KQ z8H8~SCOfmPjhW#D@t^=!af9Xik#V=2&~fik=6pQ6@_~_j_CbqIEV&auYhgl-N6lL! zC`}2&R$J_viyk~7VIE+^KgkV~gUrRz;p&X+U(~9Y)FxCfv^e_#4io#W5~?TQz>>rc ztch6KJXhq^*QS^2p#}3jvY(tgacgYd=^|!popG3{$7_1b1ZV8&<=M2L&2?&rR~VRuz_V}#AJngstiW_uoW1>7WiN2x1g{GxwN)VU6n zP4Gt>CpP-H$iM;r!Iuu8@tEYep(Zdgr27|xtKNt7IdN**pzIIA@0$Yz|HMplxIBnr zvO?!NaB0D~IajXRk&5Bk`>sBmT{iB0H~|6JwD4wogs3C_lDU z;?7c@%m62x%y>>ytZye*(i=7gmblk$G-H=qhcXNkI~BcBu{wbO1mGWu?udq3U=D~m z@*HCjftJQoYVfQG6?Feu7z z=!8Z34Vl>)(I4cg&A!%6Xq)L2=9?N=jM}58T$24P$WFz0Yp8=2i0J!9dDenK3Cfxk zI1&x{tV)sPJ8cquZxpx|x93@`2F5hjaE}3qW2%q{7Yoqo=Q(xb=(^m4K)wo4NpXVD zUtjw<5PAjQ^BPZ4HE=-5FaJ$75GWEn;pVWDOY$3JY!AR#WOiZB3L@r)H5gMkYX*|b z32pn-W<@U;f9q_-#pxAF{qrL+uiJB(k5K6~oA&OuW^gK|hLb`k~)#LUh)b!9Xi1(WrmX_L{bW$PW{c)X*%v5 zt)ya?7q{Y!$7WkFKh@+#c73idt??lX9>^FF=X|XZLLXFt=W8KK+Tz;*R*bq zki2v9T|7gJVF6~*G>Y2`eg6rL7zK31@G&`&WUbTRz=;Vp{x|Z;%l;>EEPs&Xtv(bT zv90f&iaCbHi8sBB7};-*Py&)aM$Xv~Fjknlaio9PF>W$NKH8+Aq2HdF{bEVJwl}>X zSED*BJo!BDI7Q$7*E^5_XB}Fh!CX7igfi_fq|%y~$M={u1lS&+v^>`jP3%dJ^U<40 zsKko6cqVgydB@0AuR=T<+Eh}T^WcK~WNqPse2(%iXvqEm>cFrl?It)-Dah684~lt> zg#GKWI*Ze6XGm4N!RTzbzdU{mW`dH1zI~L0$PG^8cCkuwTjX$3_G~LV?e6#4CAu{? zlIx3)1(GTwx|VQDHyLl<_(5gZ;(!~D)qQyJ_rG2nFD^by>}rAM7Kw@AZ2=#4H1*LCd6qV_Pk-D7n9>^OV1r%8SnP{Q@ zziSc@uX{b1NK`f?+kQf)DyL_U1Kwr}#VSd&oSLt%9#P(6KpLz$Jo)FkaW6;ncOHm_+e>#h4u zXT5s-Mi9tWoqSp~cTW`BSO-s(4_@=ELP_clOx}63QF>G%KUq%b=jaos2jjm+E{mOp zmZREb6~$c*2S~M^Jk-bZEWJFo69Xq$WUNz8AWJD&pufbe{^Hn!%NH*yVO zf?NjW}~s*==}R(2x8Cra=o%rBt0vfva_# ziY|Ogdu~Os{k5Q#dz``RYu*alcR@j2GKodXU5xfvl7-r}O|T<;41Qf#B;eydr(HO& zDQ5|0(0X}mbmEnO9v3l@5IE}9^Yv#hKG8m%@yEn(FMNKjY|4@FF>~_B@ndwa&PipM zG~Ck9j9O3>!uzW71vX4@Nd!qU9etM5*e63D?oYU4bZnE*v1h)l#jojdx zW>se8DWz!Uk1~WM_e9OWZyJ3~D)t96%>1E~hCjP>FQTlj{sTKbE~$%jILKfuU@!3t zwx}U3O_G*DUV7EfH&W6=pr=1Www!&<;5lvb$XCy4qYkIg_AaM2{H!?J>fw?=mF{uv z=5MMuXVZJ7ADl=EEnP{vx_@V^^4MRGES$Y*&5QLbUTz(8jtIY`)J&0i8u6IL=B)4; zYL&obJG*7E1W|6q)fIc3;g_6d!Flup=x6piE^>$h;vWG!Akp0vd=2m{{Hu+1k?i@#f{0CQ@^r zJf}I-EhA=yk0;1WzPhI4-Wedxc_;6in-hAJnX6={_o3@^^&Zw8uiC7r1(~sPj-3x* z{d~O?O+s@g_oLa~*|XRo3S7OyS9>kxJ#+9W@fc@CsXIC9@JJj1+L867z3??-*JF#} z@Z9e~@IP>pHkD!{)kr+UBsIzfVUPUsbw)BRd$;)4EHTL|RHQ(YlW=`>ZZEt%H86LWfjt{~6cV4wwD+Let z81iaBTAWwxa>l$+xzE;&QRFk^I{cxWhOP)cDdus#^Bes0rdX9#OhVtr@SfZEFKGTb z&UMc=yJhQNqIbrUI3;Jw?n-PJ{o>O3RNAteQ)XS)(Ul-bOWsRax4^-1*GaM;w8Cym zHX6iO$$O|&%nS-5GCN9o+LhlVIp)YFcT}24$8n5BpS%^c7=Z~4+ys!-X`@&E+eHcJ z<_T`cBJ9=TS+}8=<=AC9R{Ze$dCW@U+GFl*juTYHYFX+Cu%^;UeKw(_pd z7^umTDv9_7;k9;_f`nQa_f@c&0>?%ycBPSO{=DOnizz$9Nzw0VL$?lvuSQLgx-+?7 zjW~IZXnc~CG`T38ZQMgpm>9UgVX?#eQNT|#gq5ZoA!C)M`)wWF47i`Vw?_vljlP0j zm6Hov-)$r9>IrY}d7YG4y)ux~RbBGlue}7l3*o>UG*l(J!jXX)pkk+*$QhpZ4cQ4l zB~D&GL-rOe1eY{*{e+I0J}p51qdhQ%HqMDN-p-Q{YsT{Z9HuZS@Z4UXGFY#T|c$xr*O)bTR*iAIDzYHHA<) z1GIck2vDcT%(_r-;niqr*fSQc%ADDfnv}m;+SB;;S{A$^N9eo~S}(`DE`9~p#@ZGF ze(bEEsUlT7_Ta!qAM35QL@BCGCKPeczKi1}$hq9-Z`n84AH4nW%X3q_1nQln)fjp< zYLuU6J$Eg&Vf7lEey;l7xbD?WohU8%n}qvMQgh{B(BjL}X}ZvwpcCXR_OdA2M=7e0 zRU?hZLZkzZjK_C}j%I=41AP_9#wt2;6e-anDVd5K?MlDG<*R%%sZ zN_Gl6P16M+c=na?N5S2V--Ed#KGWo~+uQbBg9oM-BHaX~S-9rug-?aHf!j@9kR((Z z**7kNzVL%jCa3Mg15LF6TTh25h$mmCMwCgR{jhwVrktk&L7vM%o04j2LpZ}N#HvI! zBIG#L{{4~Uv(#sa6AZQuO`GApztCKYdNDKLJ`UAFVP`v$S9Iat_3JmWmJE3?aBJcD z<52nAMt%k~VbwTm^AzM%%jE81QQ@oZj*wUPKoKPWZBbHi}I$H{~)I4gyEuQ_`i zWdsMfV<3741xF9}+z~x`#$0|IEw53Q#9BqF8DY{h=k$w7hk|xZQ=d$jw<4V}eWvw3 z`yOb&Vt-Ti&uqe~jgoufu>;ywD%IKsKWpQz-}OFfr&qM-YuUN8acVDR>9 z-RPsV!`wDU5pQjd9IyicUUCtMPXBUZkxRC$OqbB7HIpaK;AbBO0wW7bs?ETC7C;6h@1kC{O>l+Is`&aP?Ct%rmUA9uwbDBkoL2t9VjwMcA@<#mwI& zXsaC@BalC%=ou3$NuWUDz+y-oaImuUDg0fs>3<{FErNRmSLihU!qQ1bw)K9yIT;bX z`R(V6TQ{qCG*@nt_RMaSG(a!E#lSDWqM4Z?@f)|tXSO(I?!|^HbQ}tXD?$G$hj3)> zIQc!lI&+_3Mahc$$>Z#N3CaF!-=fuP(ittxV5==kJF&+I+7f7o!8`j1I0|3Y(OvY6 zwh|Z)1_AgF6-*C00`zq_w`GXL2aBl9%esx~JMa6FGBo~>X-f{3EkQ3#g528=Il`l> zgwFagSid`9QT@VVAhr)3dExh9>Tx!8GV?{GZ&RSw_iaKG{uGgFjMcMo0c05PwHu3` z*4zl`dcz~qlh8j7A~-tcJ;>kX^!DB{dhNk#3Xiz;t)@6%JkNx^Na zcvT`W1x;nV$r4q(E_Zi}@RR_t7mGy@k<{1zOqX=8TpTcD;A2 zJCaxxbKKBeAA+A3Xg`(Gdh7v52HN!T@X6-z!3U_baLNHVs!9y7Hbl*F`~qT@Dsk(` z^M+agzBK&&?xFrnuNhQ7N+LD~r!vT1W3o}*;#OHPBN5C>JCJvV_3SIfj`+Ovb*K8x zCvk9oWH!uvdY0aqLg9P|?=yBvpjmgl#Qrj?Z8#VKpB^;JW1tgL%^wNsJM`I4H~d^+ z62zc1ZEWy_M@Yt&)6D(kmyV`~oKC~Bw~Wn`HjGZ;!YhIa9Nv;c;hMSx?qdep&Ja2$^92+zxG z3a=0^AF>cTW?)2xvX^p%dB?GiK(68E+=u!R;4XKHk_dB)X@eG4d9fKD1E_?$D{iOQ zugD@$ZX&F&`S1009rsn}yTEXOA0d>AJ8;1lV6Sss_=pcr0n~^S?|Xusl3QEW!|HV$ z{qhc$;^JTh9mx-+MrXon^%075kr#8Q+*waY-E#0 z!*wLUi=q)E(`NKqx)I*>+6o>-RjkT=2?T8xs#ZexVPgq&HCRi7>|Rl+yJ@A3O_>9Z zpYR8{C=C9OF{*KrYO-DWZj*Pt0Z@|QyKs)x!@3t-6e51RPQ3aSuuMI7@!pu3)*FL1 z1t~FzB^7=q-fvEXUSOu0(_4xek=JF~e9p<1p>u<#CVqzRI2^SQ;j4o;@QO0{1BU9V zf&>o+7zk#n$SbY*-n*pOB8^gV*!8pG%+9;0@*Y$`P#qtEn6))#Ix&mqURyYZ5IADP zaoW_fim2t+0UKJ3V?!C8&=wzTP<$G8!^pXV3Rl#-P~`=xx@2ICBRFdCl4+}p*Hcjt z?@LY}f`!DZX1mm)l1HvJJtiE96BP$U+F*o3;%)GA8gM~omQ{=e9HK(XMwaNY+`YA= z_C|8`w#KeF{~JCHZ$iIUuI(9NbQT?i1n9N?KfL*XqsggvY`B>?fpsFRFkIH4$9M4t zDS(Iq(w`)ZIC z?x9UOEsVpSpuH*b8M-Ww`uE;m)6vmFT*RB)&7a|rDtu53x`&U7qxXF1-j&ZYz(Ck5 zwWqPs5T9=6j!3au$_4tkGvl(@SdXA74L^h9+SRlQh$l1FOJZ*{R=}=`<;%XIpk{iU z91Nn1;g0nSkn*hdeCZRlH5peUeA?6Xnep`;ja!z5&h}k_&4?w?^)nCK}J>#D3~QCmzZ3AT5k zG`N`b!18BOYT0jcgfMKLS06iPJJ?qr&nT25OeXlnZPamZU7K8DP3_2OxDjW4BiWZT z`9UR{ktyAT4iPu_@`vBWU)3o9S^+vpe&8J>e8^bu{7L*yU`ve^v|&D@9;1lK5?6dB z?M{Ui)g(72MJ7Q<=KD!qq_PPHeAFTjx&lKpr>7*qeu0rbQ+-&j4uD)(RL*gS_R=*G zfk$8VZLh&c8bB-tgYW@>O8(;rSWAKlaxj&UKyY z5%-|Z4zTg6`dJYQnx9TbZ@%|O?c`}x7fLMbiewuvp~gj@!RyhXOSd>q#o*Q} zIt9QwBp-#>iT@aij{ew$@30N6^_tX!yd>2%ye2WmnZ~0dv${Nk77uGi9D@{@>rq+8 zCwthakah)U?MiOC(V!2{S_riVL6e;8vLCTmWEkaC6uOI$LQsYj6eO{OCU#f28wD`Q*61o~2{K{-@SqgO=|#sbk$zuz?D}caD&Cq{PPANUiPL~cza4*6?x&U__cb+V#t}u1&Y9046z~9aI zk&9|-P(ut{GIFWMm~rMsFzIjh(nKfcRcv88%w7xT72B_z^zn`~=_uJrww!Js1NHfW z*DqxiFqfd>TsZnBEb|w__QlbS;zxeKdfK_||1tL^a5d)b`|V^)ks^wy6Q&g{TF1V1 zGPcH4LeU^?Xb~;;i0DM&q!7j+Bb1|+QjVw@hD!TFqJ3Y_`QP8?Ia{Z5P7Cw?{-2-E z@AH0My)!+}^Znk-bzS#$!)(*v4yA3oLv@YYK4*tRnS3(nGrBA>1IO{XNW933S(_2Y zI@2`Qo4@ zx8A9=!VM0U7uL=9V#Bb&D^4UjXxMg)Yq!b2VP4#}K0*ts%snQTup@<4WLka5JN|`# zKi9t(&eZGr4_99AN75AflvjMXEp>g}hpvcD;*uA?K>yAbA8>|Z00D9M5^Eq4*^Tb~ zc|_pfG3^w$?Rpb&toX6b$L8)Lde-qKNSuxoMnLAMrRGbr%Pg##dNPy6?W2Z_P0e$0 z`%FxU{R1pk>M72pOG1&Eax^=&tMpF~h-WmN)UrPY3AF-4_MBP;;*jJC$vfg7RW0;J z@V8QFIf`StCcvKYE~P-y!n)3VC=^cY9u=CL6w1IemCEYIPbNkOi{*SpipE+d;vCa2^Ph!EyuG88gfj<;n8ENmezJt zPz?Vhx}WjvedHDbKMB%zvgqekWFuvSq(Rwpg!%^)1I1F4KKZpJX*aOxpoJTM)m{kc ze-=*-ut`-Y`|43zbjxX*^ z+CNMI!A+p_#Z0-S6e^a&SPLBhzZuZyo(1DMp(;*d9|NoO7ULCd@YI-pi__3A?oO|= zO-uPQm*W?lEEWQQQ>d$(aO4cMK4PV`(FgZnuGlO_YO;toX?xm3FqxR_0G|Qij7t0q z0C&q|Vi5zx){ijw{UL`4{uKg*h$Cm0?$axh&Pm>}|NRRH5#aHB1p)vkrvxLe>ra(d zO!miD2i%2u5ybObPvfMPPdC`uYR}D?}fY@h?NfZivTuV>&-D)AsCiZO=9?jGiCaFPWg3<)P-=Pt3c3iIjt^%tH1#7VnFleV+l#iYX6 z;T(Xcu;Hpwu8lMNbRaE(DBu`XuB+s>o@w*)_9^-2&9iHaUmtHq@op91p_6!mFX$Vw zG(IU>2BCtQgrNn9qkvgHei(5$F700K(P39QRV6Ym$Pl(6KoeJzF@t&eZ&FYNtX1um7)9;tNEBL3)EdJu>La|Kpf;j7PKO=;u4emN0}+4J8X=5OG`!b zLXQKlAR|dN{%i~_Les$EK)lFWfOZMt!2kLbg!-;6v$sP1wIbpy1Zn>;ii#CCL^3|m zB#XwyZI`R{{kjrSF(3=&vD9F%?-dg!^qJRt@hS zkGy>I{(%~J0u%fR4od!By+a?D?XmM4^S!gwywJT_m)Sd@7md+p+=KuppTI*6%tc$V zq^tgch2i1!x+LkklU9%6NqTGmf$kH%l?N8RkH~ktA{M%~n1&a|cUH9*emrVEEH3$I z&^P!{8*LHZKbU3>ElKCi8DQGMKC}WCUC4s9!xM|z$c44}RWF8Jp)EPKY&}a;hVGIh z(lP>ht9ppKkZklb5O3CzHP4nysZE^mU{2`$ZprTLHP3HK+0bO6Z1DXo>J5+b0gTOX zQME=XQ|G|qZs7MqGFfJ>G9-@ZrTmQ+QLTjLT85C1eySdcl?4fidUqGf8c!2Xkg|&! zMLjJGp4uePsrR=c?HLxr=VM}ERtW#Nn@qNvNYoGs;SkuK)?U**N3WPxqM7deLBkP} zt7%6HiVTnOt^(7_B7IYD7*`;7xE`@0sHEjhD)7x~fx!EeU3<4ut7B_j@+a+t*-nKT zMf9|d63eTf;HflbCQj;rxDLz^jxdy{)}k<4(FzSZLVCo`JDtjA7y~jpC6;T^kbAoeGm&==nY-hbyG@^CUxf0wN5t z^X?R?6VyTl+T`(OR1ke(=nxX2qY8cO#xMWo7`1n_C!S2I`bf*L80KA^dAt=WiMtyA zm#qfS$TK!Kev%8ZJ=yl+UI8lmrh@b)Dlih$&qEr93vh{_s#aJ(Pb|b&E_p2q=ZS{x zx#$GGA1u=_xDf(=NVtfKX>6SVePlz@lk@SO^tHa;Gnvex)lt$ZSa*eQ1ZN0qWeB&S z{&~|L4&S5Xtpmc}(}%U8%8sSe?4PZzVJ(403TOu1h-w~oGjX*-kh+KiV#E-!a6m)h z4tXVLI@M?twKYd9BNvRt^jhp9HFvAN!BVu-^UvW^c1J z(As8uy7=~&%OF!ZCshkKD(|2FdF3E89h2qE&|1?%dsvs=RraCwxu^xrKaDzF*&Y!h zz0~%wq;wkb%2aOFYr3Bi#E0Y&$-n%g$3TWmULQx_>n>A6Kd2YoTSYXKY$h{y6`$A8Nbvue7%;jzoOXbf{*7cRfc#8+c%2>n7qrX2A@Ie+MPkW*zs@@VR~sjX}7Z zB%mT_{{M9-5OQ0a<3t(l9B37fbUA6LBsvFBH%aK#H|Xe+z?+AG2C*kRa8U(|2Ln)# zHA4aJV(wpI=EKM*0v_{8^R@#A5d66JJ1U4iV(-4A1$@fi8TAitI%Lt^66QFyp!_s! ziI9pY6HbBE@Rdk8$r@b|5Y4T&`W58f@Sy$Ht-H8r?!iyHZdJA>9ha(y4>*yj1mRJ+ z4S0@gs3paG$-Q^$GHzBKvn;*mddH)IMxft3McQpP(+m(+A>tU36_AC0Cx@5;EHjHK zabvT20i_ie4e$F5^9jA?yr0%;`g&M9T(9c$0s{tXjAM5T$Y6RS0Rh3BL0SxwAY&E~%l+(j>Cl_OTI=U2Oomw@AfB!%T9GLmbAWzsEy^CqppoRa>(%6jC7VItt=& z{?z1L8LYZxvTUq214H%_fy&$FxvQWv(UtD(D{&2k2WM}HAsM(x-zkb-LNS0kb{oSgIi<*17BJ@GzdicOu6c|7$cXBAP7%K1q#0Az_ofmg8NQ{VZyRc`^a}C7}HE z;_ELjkI_gBkZMFh0dNk@WHi)p8f#MvA2Q-fCcRlv{=jJcqp351;Bd3U!c z(H$B6ohj`#E(X6L9_}3jQXbr1>tWI!-(WS~3&!^}nzoog5g5uuj|9GLZj2JpBZfBA zY~V^-45LK;YYZjreM~E-9#@{I{n{z9jha7Jd8PJ(3o;xtZq?h!)%PLV3`b zM6S7p-j%XQ*n!)1CLR*bXSTE+?Fu?LWsWx3~`z=s%=ex+Mm4CF@Fw+c`JYpmAMZQc7dYnVm3gWA_k2aG$E z+LuAVkKM%t#&`@c-Qt=Y<5D@{Ff`KCrooT^{BlMx0}K*VBs62Vu5hWLxM@0cHf2EC z98va0y8s2p;)NkFUkD+Qt8CBNkEVe8%%B}hkA_fhi4V{G{EMEkM^#Y$IqZUgT%I{! z0?8Kp5 zdc3Sc8RU(5A$YILYd8ZZq->JrhbJ`y0@yWf-@8Y2G{D@|{ww-YvzcE?AcP4s{G0?6 z*LWxsg%U7rgS6|=CbGm~x+xVajlG-dGUDx?*d(+C(49@e23)1I>;!8@ZqOVdiV@`% zpYFUn9hcl>S=L7Qdb6@Ei5%1d=`8*%KvNq=!#rbe(WyXu2(DKzp~P>qS7k9@*ANc& zPo-dPkVTu7V0bM5Mb{NtcN*0k6MN)>G1do6QdF)?HWFKLB(?na-cxEF%Ah0O+fr8^ zM`(mWy5#JoT~OwJK~*ld6bj@Uz57J=w8=OQP;;oI2Zpr=J*V!9>;8Lg;aGb1w!&EY z-x;)_4w@A#FFJ1z{6VKQqp%5YU%4)XKY~G9xj7Gz-CA*fj7Z@bN-` z#Z*Cng*l9V0DxPyjoh6#2gXw_wigB*u`cK~x5?d$joOHt7$a_+nV`S*B-A4G`> z+RUn35L%4rQ63@{9+?fCv(UHeGwKKuSXC_s^a36h|BfVS?yGI_^d1!t0k1(8B#{DO z3a4%Ql;Nv&ODeP??ODUbiH)~xD(Tg}&zy<>0v$l#Xi@@|;Nq3gkNn6<)Bc8{dRG#F zxdoEqx-0h9>@ihz4%*`3Ll3acmcK2d1~PnAqOOWS3kN9L5sqg%RgM|E))qNp({>o}ckQgQ(j?4JlyHGEw?J+8L zZ^_TFkl`49<{Q{K)yBxm0{Hm2IZE#!S-m;%63W0+Aq?iDKj#VV;EWys|1+d>ECyoT zo8Aqr^3WC^Y*f--0snklrq_SurfPL8aHxIKxU}91Zq>6Qk0xzXAbJ-FYDEN$sNl%N z_YF!H9Y}P@-jtSa*KYHqj+*=uJOd~*fsBW~85udq!z9R`^2+O>Mn{uvV>Df3<_nWF zTmQN2>{~Ba9;aG%vr;pn^so;=6-VHIgBkY>VG@l;w}D33K?C1s60&c_+bvH{aBn(( zON!hvKEd=@G33*3x(YG&MG5*ONS})oA6o<|K9HsWX7&ijsNaA!Ol%LwqxZ9=JrKQj z6aTLx#A(uTt&Xy9)XQ|qB1Mm_m9^ewIp_gd(okNOJ1q2e0SF9;Hc#F3d>oXWI?oyU z)`DQ)qR|!3o}(47X5)Vm8zvt`dOr1HzqX9<+}%>f&6h^D8F!GZ{CU6?IZoiIz@CIt zu@w&SNGeZGty`65o?T2cZDKqMgX!$Ae&80e=Csl{N@0U;a1vV#^HQ*{ppVE&v6+?l*sPs^~$hNG(jl6gmE1cFhXd6|e$~vDlj2qczLJJQdUH4l9 z2?QJ9g(q^Dx#b#zNE;S*Jum&FjUhVKdi z!N5BC211lBIO-kIUTk@oM}P*0F~{*ao|X60>sCBsmZ!9lN_4nA zA1*O9EP{w;*L8EU>sWR1a`6eh zm*E9@J-2-S(HRP^j3&Clhc1O$H99o9TdCa~!gfdEt%<@wb9}e}pX`T>zC-S18&1K0 z1`m$L6Udkl^StTp8$dWp%5kDqRoNyrRF;f(a{$FPfi|W5TE0d}#nj00@&So~q>(}@ zQ0U=c11XK+f`JC-q`@8s6N1Q!e5x{x?l$SZvM9e<)V8S!FqDYx!(W1p$66-WHb{f3 z?>1wYe2BECH~_v^5!^A)BN$zRc7XQpAHi}g8wK2ax?%FChxOhvyP>yG+KN5W$|3d^ zT;uO7E06)flW@eRUH|8_^9u;;MbwwM;0A|#7~q4K;iDN+A@_1j9%Ez4{P3M0 z1~gd95wj8%oX=9e`5tdP2u?Wjgj85saYky@EwR@Ff7M!f;)qBv&dCeoUYdNV%WJiOA>0nVi6C^5)W8R33I^12Py33)*^~3gUnrIM`FWy6 zw-|B^LDFP#U53Xju6h###8Q>`)NCeJ&Hg%txalIXkXBMzj-9+j-#44j!qoO;;7wTO zW9r9oXR;wlUi(U?cuFKNEIm$yP?>D%RqmXsU|(zJPJ`M(6C~I?1K+o2Fj7n1=IX{1 zM~2|{r)%Te^AY;-^eaKBbxWhnl?uAnkCH$i?Hr?+9V{#f`~(A;91<)!Le)ZuaKEs* zw93}Do8o!=^}*L!b*2q1f#5~c*E|TbapcswiD9|zPCB$6H}zoL+oK_08dVXOCyqwb zwy2!tv?m^#Z5B%hkI5)FCye?#!Z6s?;#)deXP99ey~26R*|h$NL2mpQtdMs-qssZg zcQZXxeCBtgC=G9z3i!%xW?<*k2mxW_AAH9T86a?Q&#YN4woU@7LQo~g9q$%n2rS8>C9tkqQ)@rpq`yZ z-3ClrFfI&6V{Kwsh=ho;7G^l=F&CJ+B~j+tbv@$8jsUuRj>#gc5?e7bJ8RH}%QnCN z2@gTjh}^m=sC4H60;cYH__ZuNQwF_0wk&EGqZ|iCYyjrDITk!Q<^I6jc~UWV9!bn` z`$GU}kFP@V#D8?BR2!#;K~UFK1_+Gpy~~(#hKr8f^+Ar*@)|kfZ5Y8msnWXcdzb7;kJy(FD~|NLAc9g^5+IVhgM@-~2?-yyQPs38jm1x_u4uwIn@1PnkiBgZtI?=MD!-iNk)4$>c)c z?2OVj<+n($Lh_#m^8xcfRL|@R(G(*Hi;%X6z5akps>X$C{*VcB3baHCE3&VwIOR18L&xnEi}x$7uRwrJ`e*{-slTl70kfY+XD8V)|G_gBGM z0V{kX2iUGH7rK$o8P~Ca4=k=L_#+zYlSjf7^nftmDsk)>1a-upVqEC|xTc7cK*F%> z1ETOy=M8=9#?=`HsZnIe%{(AzRpJ>uvV+!?HOs3zf>4Ppv54KoMaUgP(QYA7yXJr* zSsC*rkr-=FK&{Pl9GAf(;hxaU$xxQ756tW{xEq!Q7}wqiZuTC^c>b50uKFw^M_>g;#7 z?|XGs;*XRFdSHm^DX!ZJ-PHMYLpR}1<(qzBWzS$&NiH3nC>IX z6!kRfH=7q-cF|kFc_!_?e)4dJMqlpQ%0$chfslXL_~`U4jW^^%k`d;VZu6uqK9v>(DdM@I1s=xy*eHEx-%jq%Ri_035NzKRe#PRF~{ zl^5?faYZg6Jk)RF2$Eo2aO5WyG?@c-x&$p5D-nWiwPd#m3L7=f+m68X>dGB@iNVjM zChFu==5hn}f+^1B6g-9=Ps2la*VDqj<#u!_`i`59o3%16kXRD98GdWZIW0obR4;zl z)K8G!Rjst7jrUPf-VOeZaXL$&Moj!4MGwBC&@o@%S7h46H@GL5exC2{PJd9G0)hk1 zLLCVXT1xn1)#?F2U)fwN`m5~>T{2k;GFbINrNihbf)=6I_zic>(a-n|uBqVbUTH0k z*$jY&1#0~nCCCPvH^?vXoJw&Z!ps}~gs>6Fhu)y%;Nr-C$*-Lj2p7fdfD~DwSnooMdlVy@e|AJQ}*b_2gB`)1rrXh%z0O|zGs+m=_06fzj<@gocZ%$NoN7?H<`mhxG1rB8me z$vo-bwvrlchuW2G5$zRCT|xA@Fn5aN>a5BieszO>2VNLEJ?zq`6yLz&qsx$FgLv#D z+&^&JVzoF}D(7Ay*iVE9Aedu|m|OqpQ-!xkaa0hgiGF5SeQTJ)Urk*W-3wtp3093T z)Pa}>1ed=O{NjiVn@G3?$C9Srt-2@=GhXaSRNC^_%NR#J4)qq7bdhUJgpayI5EI*9 zpU#;?-%SPnZw~5ClNIZND8eYbL~K5>4$W$E=m_~3E-^^7hVqJ$^oPzV&I>}!vwd3t z(1#Q1^!;HT!E-#0IkdS08Dlj(LMlG^xvMf`EL^(LxfE|Dx=#ACz`jF|j5Tj-C*pa& zozvf0wWbYKm2FCNwd>$@F$HN`(R>A1$4tQ&Lr>>nLq~+(uIMk1Pi-Z7DE}oEzwkV_ zZDYaEt48K#Lk@GpAtcUJTXUaPdg0IDxk`Yup#78zI3&+)ChSpfAQJTJ1mbFbq-zxdlS@>3W zx!N9%`3NrM4AvR-71sz_w=Ne1Z2MV-tW=zu{$zBvl zRrYyXnoda`1_es>!C`hwE^KrC&wPrYSYr>DG`zvaY=fRyb`sT6|ayfJoZB!|-7F z5q^AW+`+(AoX)(MT_sxU$m!I_v5m8WH&+1W{A+Tu4*b49J1+<(f}H#jkY}qxyd=G3 zE6md@fL(N|p-_VqrejOqz%wI_dJ{x$vjIT%JzngucKK%hra52$J1P}DSU3;x1SD+y z*B$bkDM8%lpgnZ#_RsVBm6q`BK}`Xz+;=oAr|G-%RFK<|Y-z>buZ@O9*mIe9Ryt@q zLJ~wgMQjm;RPVPv!vdnmYxPH$i(2b7%`n4MK?ZyvzP28ZX2uUufPx3&oA3Km4+v`H54C((uvcmm)G`G^hmfu`!`o`Rx5~i zlk*Y1<_J)b-kkmLNVQ^fTfvVX-=)Bq1OJiZ!kAbBo`^$>z<&<@O*pOG)A{w3)J@%n zAxevZp=NICL|gmV?*5#6`&cjFLm)}>QCsW%bZ4^=^I@S^wsyniVl3%o?o}J)d*{!s z59UPwHWEsX$7>^k+R_WOYr1K6bxUEtM|arp>Do|2ft8LJ?06Y-CiK ztQu1q{pYY|7q_viM+ByAN~enZvHVE$mzVWXw%l<6_-;lZtf+rgq(#q3jH7SpZZkzC zu#(*%4UiS6h`S0kHt@G|sgK9or%zj~IS1a#Po@3h4grfbq-Kkuz zANclb8BAuNevGu|$T|6iQ9Gfq%Bf52L67wOX4Pz4Lnwbkex3m2;G-d?X6$wruR1tu-WR{VnYv>z-FF~E}RCcl3?r|yNJUF{KfOm}Xk%-~8(Z^m2&2)>5U)uKi;!014*Wo1)BwNRpm*2#nO|arm7Z5nphR)A% zzGG8;XB=gYA*i-(cd4>s8__$!E5=bNgDzMz;# z>y-@pQi+%55WAsv06Dsb5I`UDU^U5HYZa=$F&sC=yH=6WDh>-#A2t;C42Le-NA58C zR3zx4m081_z5HVa_QH`8fybW50T0o?`v5DT3ftQn(!&f(!+kTyCD#|w?3A_v2|Cba zudHDm$9&eb4tmHd`CX!csv9q;GtT4xIG%7$+RIg4eCIpfIglb-U0_w*GHPKIaMG;V zMNA3<+eq1iJBxvB!VOQHeU5;r@t{g7e637gn_(C=h|fHOxSc#zXZE}{KlOK%0fX!- zITM?zk)KUe(jV7IeA)s)cW#7zU>fUo@v(Zsk^E~V6$Q=--RAVsw99b4_Jq=gi>`nt zVqn}nMvZtBc}SwwOVF;oYUs7|A{S5V9-9Qs&l_S!wi&t4J`B?GnHW|xjxcfjQeDPU zl@RN39B$M&Z@u_A^>4EdQ1MKMN3eq-Qs{x%#_bTbdCGI3mR0L-5iDO|1BwvNI)slT z)vX~qyd%}q_Vqn`hqmITfXbrITnjBw1^)>7R}nH|HcK8d zR%zFWks-spo$c09V_t);PMDz-fpXcjT1TclJtXiqP@jpM+xs9&q*HU ze2Q|u=6Q}u;|_GpjxX%b4211e{p&jNsL>(WH9gDI;hS_a461&puh9VNUpS;P%RJqB zZdHBEqstXd*fYC;5@*sHp6UW?FnMkaz(*BN1(KX|M~(^stD_wf7k|VAzm*K{uZnn|yKds>s(Irr-b5)`2tCTRf?}1v+#6gxQ}rB`wYZ>ji_Vv93 zm90uW^C2<9GX#)$xaT>^;*=Y+?o@mD(`+#Pc|2h3MnGC$ZWeWNa3-85v|J7*)}`l^ znrp{3h8OyFj}{A>CmFa-U4jQIXvSm(@nI8T{2~~0t0qz~W|9rGb9P$)*-X3jFLfE- zTb)M6CMVOsqI0xI>?|6tV4)r-|3;hYKKTW2b~~z1`3dy699#P^gQo3Ie^U_>qBk#J z^z*u{@y8%+d3%d&yHIn0V|pD)-UT_K_QehOCwE{nP%qn`2W0qR>Nn#(o$8(zuXj_k zl3Q$i&kMmCBy_y&l*5eDsN=+dArs%3!flpcql`XKUbFx+b*?oyyyYmcJBqOvj>qH~ z%CB6Dt~jr^W$w~jzFtiZ<;L1^Du(g&Tsc@`1D^$Edvl_m{3zq^ERnPt(7v=?ATRaL7qIY4OI8jsA8{>LoklFaIA8C z%AkP%%i;7z^>OMw(-KrZ$2uzbeqIj~1f%uyM#E4TtkD%wL!~-n!=66Z@V5ID!Z@{u zj-enG8u;pFY`owRP#dCp5amdj2l3~$=hD}^tFmg6zuj*Z`XqQ^E4)dNSp4Lw z!teqA<%^u&G`!m$eu@L=No{*KlL*DD&X0vY&*R;~xI~G%6BPAA zinn6oSx`KB8Drzs8rVvCE-5d1;qCk>!vA!3T=GkPQIeuF{HjGGO`D$5qYtMoUxWt1 zHC!99%_oiXi5o<@y(NAvn-OYu5%bynVGTA989SHAk)I9rz3Pj4-8&PeeU3#HQP;}h z=l)EixWl{4_TUl{5Bajhss*(-Sf+}tOJc$sI8RH1U7zRKp#0x9o^bBX59^}o*m`Y(S zv_!Np{9!VGL-4R=ELyfRKN4&;hV))PfbCNm_Y}11*`B7a#dB#i+MVperfAHR!4b}NXsIld-uPig8(gqEuVRp} zS#yagtP>n*GP>?KWvXG@2aleON0v*h5Ds(_3kLRzZykrrfRWK={82bQn(F>Kr}#tb z0>WJ$_6`InEbt$|VPI52i7jH{gGlPCN>r5g-}FfFdHxoSzq1N^zI+?2I*yRBn6cd& zY3wvskH99FFX&S!s8omrRFL;FfnF1qoYM}2HPFCK_)%NbkDbx6s=PVLlFr8|n+<)l zaGKql?DudFI}F#iI}u z?MWQVPOl+TwLAX7AfNz=7Ka!iCJB84)~qBiF+H}`fCNVdquGXF5GNpA2**p+9i#Zg z@1sA+HuA`hH;Lh@*J8nrkKaO$C@fIMj^@?<4k*f@1vdj9ndFPfig}*v`qKQm%Jz&$ zs`cODiIx92TaYJ@6J!~|8I2SINqZpR$9^7q$;@9;iAK^eA2&W~RIqv*URMSph`91M zT5_Habw15)uq9G}C>Af))M5Dx`lZwVf4aQ27w064Iv=B?biD;TkB(~NAez4Lbp?U8 z!)&B6*QwNAOnTT#}&q%M?s=dtWuSE9U#bkZy|f~({G(UZ|0QO+se zTbzcuXBr2EPlvsHEIG0kWim0VMwgg%ZxlgJ_>}~CvIOYMv7rv!r>HE-658K;)9|9_ zkA7FaGqZC);)CAx@I3&$0c>JYw14uMeU|=Evnjiv*~?S&bxqn$OLU=q7s5sy);R)) z#NeM@?d>*M=qyk?FGOAJ>J|-S_mjL~^&2d3Vo=^PgdQ2Sht*O1A!|k%Q+{(evrR_H zVIWHB-q#xW^!FLR75lelYc{!KnCI-*HGeyKeT%PEfssA*MbI8%FpFZYGg2Y05j&mO zYx4yYe;h^3g6ojC91+_*H!blL*!^!tpRNBeJrei4U`);DxP)(V5%7_M#u|NC1YP5T z3()w2c}kdT<5)H6F+taBUQl%-$HVR;%8g!iprI<6jIIo684n>^6 zpx{)5%BbayhJvkzhu#ZC5=8n}WVzR*Cm->E4}k!qViU02aMG4clOEnFh`GOk|6!r z-P55>iMALRs^;lpU<(pJQeCZM#y{$U&?w$NcynVraMU^s+cYkS_J4M>75A9xB)08~ z2-JICaHbB*5fh@Cfjsv6xn;Pl5mJEx;`9=1xjkS)d$^}@$70YO%Ny-S-)_cOUtcXJ z^KRR>Y6J9TQFc%(G`_T&Hr;lC7Da+<^=B_%-}hV1mNVm)`*Zz{&U}QaIt~`n?r)@$ zm!yiR+gvBT2sSQZvqin^6~~PYy=^i-k)CcF(Dux__E=9(k0r_(zVYK%%gkp*Su|?H zV^hTeX@ae9SKJK9g@5&}(&tMe!;SAUf8a63cLJL*;&AU0c~bqy6@#WJo(iu&jq#|h zU0SN73T)MASUHE#7qH6<8RbV} ztpH=&QF7X1^YnTcv@06lz4sQe?~s$i~zkFT;owF zRy;ZL98nB=5MnJzJi!TRqp{zCZif>HY2yU7Bx&{+N>$>0Z}lRHJrv983vnimZvv6L z7^S^K)K4yMPAr0l4_;aEL>G&_1_MXR`u7ds)J4o#9isr)OFq<}AHTY;;dF^%m6?uq zZDlrEq1Ou!wAn>uLxtpJq`gYfkmxSb|5{@sFN{XN!b`0B!%SXMw7}n)G1S4!3E=b* z7@mT3#pzj$+f~OkY0`uDhiTe*)mR#7q$m)%>-sVLuhOd!gaXU>G4Cr(J0ao zj1^v6l6J%LGaj2+@Wv8w@K+FXrRo*KGItl`#VZ!(tCNi+A0DY2mh6;iud z_Cfu!RQzk7-N@U-vtazyp>3o8@XuofU%evHJ(Sb9r%@<<`3~zQ9@)Fk5dNXZj*D`# z3J%AmSV!-NlD3NspQXY*qaeQqN&nj%I$;Ozbg zkKK>I@j#bYlwE^dx%PR*hnCkD>(Uf9Yvd$a)p}KY&}Z5JM@C*Vu-mW4H>_-s2+Q0Ejrer>W-GiLqsS1PfE&mM?jE9X4dD z@`|}Rzhlod8=am3(qhOW73M^TPg@Du4<$e-xQvw1+&{|}Y)B_iMl~+}ovnXcvb9sn zP0K>JoaxzPVP*MdRs$|Wn0Y9@2-!pJbwtPoh)8#*P@N)Ygc)r|+kcm2TmTriaM=$4 zHNG>k$NrjaQM~Ufsh$>^IXdr+hiPM%F1{k&c2j_zd&4&ol)r4mP$W1HD(aay>1><=reFn?ya4gBjhMZzOO$`oa=UHUr+iK|TjVtJ>r!N4d z71?@>nxv}b2~wuWwz3(EU*;;L+A%f~FJ}wHS49>)5_@HXmRSz2UT1=Rd>L`>g^G{@ z1pEK7h8SRC&8$Z}q3e@ds)sxMvPr`Q$P`okE55ok;tPoiuY2liLo?N5P{|P_v*L;n zPB(G7&q6Jj<62T-EwXI_OMCKNuPqj-AB>z%^0xutRZ~LQ<#ZhwBpt&KNwUs9l!C2Y z1wF@2Hqq3fGs5cG(_Y3@A+L2J{N(G5!Ap5qePniVw=WK_Ek;IIea0Lojv+L?x3_|S zC67hxKXfAf2=yVI(6J*FiaE!`-+2dC(>`TeJ# zqL=8J_A>#WR0@i-yUV0uB&OndiIN0i%@|WXoo69#9Hl6lJ zvaU^YZ-NtLI{eghWmKmgNiAPSFGP6A>1PbO+dzmgO!x-UBD+~10o^9`#1nh?D)R@6 zoDZ(MhOx!r(36<)n>~DGNs7-qojlU{0Hq+HwxF=Mv(u_}fBSWaTF5^Jnhap@We{5r zMXb8n^7>!%$H0AoZZzo!TxocZ*sC0>oGtHbr{z2EET73m?QWED#p)i$ZnEbd=%LgN z04LxWl3lYTlqoFP^%Z< zVcC7kiSn&9Vv(ccX>8q$h}t}&#>fzuIGct%x;Z5}6`1d;j=x*8j9Q$!Kjd6^X6g{+ zyF9=h0sGEj1JiV-92XnaeE7cAxMROg+*e>NrrQRU=#hS=Y| zU1LV8iF2$f$2_rFBRS?`B$h-z5y)}1hvgjFAyk=(3~x#Y-C{Q{b3psV@_%iE8SodDl=`u)|p7H{U__Ax`3_s`%UEhkcRGo;v zzlI2LgEnz^m@-~1H)tMMstrs^^qKkhIby*x} zRCo4j?;1yVpnab(aaz!d$cjsTeHHR<)_0JfGbWUZT_vd5MxH|G)_sq~4X5^kC%~(+ zYWvdGf2u&~ER3GyL(PRaqwf3-r}6Q|3)n8?bkKLQc5^Y-6;x=KGmPFYBh8%xV>m=G z$B14try!8O6Zl{bVBQ3vXVcQ+Pa~d93VCHe^7Pwo^WI@D1;V|g1}gA;XdqQ zLOBBALwMX|`Fj7j0We&`0{8e%^~Z~*{(1@4PTxG5tQ3=Wz3DX?&K@aZ&RT;Tu`UAk zyP0+Pe>VHdcU1G@(JxDH?z-h;QdI9oxmR3SYuenPSKL$IW!c~XE9T{T3*s{#E5e*_ zn9&FnerN*GZ~i;)1!`FaY?g9_dY7VC-lGvZ^5H`d;{&dcrTA^O1wqQ=8pLC@u%!Hg zux{ATE*31jIc5?;8VTQ+HjE5V;%>ldx6CcrU-HWkeP;R}u0BX_K4{x5>6x7QX#ohV zjk?DiOD#XKr7_nvW}F&|m3|eFl5${n?zC~Q?FCHbxE&OLGTLj-n_Ya5MqvLhm#*Wf zarlFnzrtzZp7EKVp5sn5ddZ)xBJ9kpb$UFIi4%{|2?Lv_To@X1A9V1)GPP8^CJ(vv zW+cC5vbcFQW01K2!8t)gBX{F{jew0C;p{=Nepz@RCpGz~wCim)qs|3Ny27M5ocX8! zmp8Tg`n!j>oYUiNH01UJgjat!FyJ~Gy@Xy9iL78XA@0DO4*Us7Q}D9QdK$$FIu-4g{h)(*1u1lV3Wa{)#h+U>myPlJ2U zXiKjGe>O>x8v#geY49B_vVaL!?3@V_K0f@rr@h&KPDFrSytNa-{hbxlQa+2@IsDh?dM?o?eb+qI@+yy}AwNl0m)` za~!Q4k5U?{g#=n7z z?fY;l0?IthsN>-;;k2TvuB7&H^_xO7YyQouwe4xXT-CXp__Z#Hg#UqGRK^_*&=_AC!ge?7nc^ zci2KZi_SWX`5#4$6}}-vb%BnAv&`g-l?^C)N$a$ZmsaIJb_gnM{D$|oIsN`@dy8)B z?W^=C|4L3vc;VkuPwL2zoAPK?nY`VSz<_IeBMugOM;sKgn)>sq=E%RLv?fg}n`&{Z z%jnU?M{B(zCr>&2V9i1um8f_N(`u)^Yl7331uKr5JF#lST<_v|g-M-ciA5qN=dZn8 z@bKmbgTl(azDW_q2k#Yk-t8*-)@f5`@jkx&@Yk}S$9MKW*wm8f^y0;g&B400W!0Kr zJm#kp_s7xNN6M!T_pJqDz^&n2#H72rR zeMwZ=)?oi-mOn2Gh5rD5ex|EY9fHHw7M zMjE#xE6$}>Y$dO=UbS}fs*fX7pHXR}=C}E<>6nqfoPYn7H1`}g!!!(?Hl6)fU0uL5AB{vjm#@8P?J z*)bw;xrFj##tD&!6LN?Y3coP^BW~-+KMl`Y;jg_MK6grmi$3+ey)FEYB$TAquXYpa z^_M%*wOC`lY7$6QbYUI>?!e)oT4N|dwjLcK zu4*xgFnaYY4JTbEbQE^cEYC(jc_@kOkrhJv8`dyM>$>NfVvQbN(MuUoI#Il`m?8K))c-=ITm?a!CeLI}&!tyBp z3>DcBBeyW?K*rIsdNxBpFTx+PCW51>(1*y zXx@aPH2P;8q5k3;!wjzwj8aQySd#Xd7aDinZ@E0#&hZ)Ci!9B=mSY}0e@`PP{1zz& z7kXmOhEmt%vXi}aa?v&TxTCb#X&q6mcsCUF))d{H`&-`(>yU6t|N&`{w z`cX=VtkBqu!l@*=dL_C>5WD-F#DJUL4)o1Wy}#vr)iX%XeO}nvR@;3iuBbjbLYVN3 zI$3S>+-U0NC`e~HJ}z$2&nwnLN-$U>F$s>o>Sacd**8IzOEIjZv z+_%-gtYSsv-QivvB~;qPLU@J$6l$fbOr%jOWR+O&F!G#s&p!?Yi-#Wrb?(C#PpBAsCqe} zWiX4G4Do z*$%BW-qM8oLTV$I?3A5mCF^NDNxvh-1wKwXoH9wW^+i+!EVJ}ymUip}{77Y07JA)` z;OMo2ac9^W=_aF+V*CWfgFF{KWEK44=yzA6j0__~)h9yef>K1M-t!NUV9^x37=*vi zhhlKK@;hHWb4{F+nUiaJV1oU#%lUKpVheGh#O{Z^<0^bVhko(((6 zM1p@i3gIy0hCk`X$&*&=T^si#3r8A7_bw~nm<^`NsfNJwhU?a%60rbFkfUL-<7MD& z(DBMxC>t_ah%gebu;3|Kset6Se1Bw5^IrOAhbld|EyveQUKlSZ;X3oTZKxSUNck8y!p3~ay;_)s2 z8qzaQ2JS+|9hM7v7k90&9|H=g34}@`qDV-_S;#Z)QlvdxSr#jQG+dy_-?2H2oIe@Q zr2Qmpf6{C?FgkFG#xhS4`~AiOJ%dUl2w5jc;wl!B%z~FyqC+7vL)2o?@u&LU4}HAt z0&V`;)RBAHr026jQOA{&r+0mvNZcg3+P$P=yV*wWk~M{@3s2*n4M{CNW4S2QVN(r+ z23gvy0=dS3BIucD>YCHT(rk3Y*fn40vYbZF){I|n|P zUGU~sQqw~xla?&0^)A&rE`Ot*JR7>rtZ@YdDN(hNbE9uVu3(3%k_z{lF;L^7AkbgMrm!gIMxM0vDmN^>-w<55Gr^ke8B#J zp;nV`Ydc@=t-D%$qxhq|os>(E$^J@`GaM-TpVy!e-NCD_B7!A)CnWC!XD9w{Jx-sZ zgU-ykXpwV_{KtcAE!%?;;!EyC&vWGP;O=4U_MeMG3DEg+qna zhj163QKKYi}>B;r8;iX3_C5%USfH>d*Q@w5grzG5`uzhToLVa(xadTsu z%Uhvs;xE*#j-$tUIkedLW3u+X40w)eeRo=#2Q30cqhyK-u~qnnFtrr*JgAaoluiiC z5NCGLPv8tCWPL|z|*P%Dj)O2yF-m2%EQ@Ny3#NhnIKH**vEpLWuZx{`iLzNek; zo^;vyNfSjc;%Spq3P5T{;mBJ8awIL1lid#_KJ+5|Xir*mk5td3 zo}20NhR>nfo^n5_qar*=Z9yz6o&U!RP&r22gJ3Weq(~ zV`V!N97Dh)v+2eFCcLp@m*lM@pzddYiC1J8I3*kGKv1c8$cfmm5v$~+4o3S}*ac2$ za58Q=W4gbIYM2}e03TrAqQREHI0yzVQBivuC2TDw6h0I$Qs-vJ5?!*Dm~ouD(m*9SaXRA@{;+^K$ATQ|kYq~na~fiJ-^%J#EGffJC> zr%11!6!>onwPu!nhsf$#lQ%8RI0aea!+(3(8BIGt<{ar-WVRQhq^j{Hu3_zXV zNg7$SD4(TvfukQ;Srm0FRFAqlJnxkslpX8zy?!#=2#{+@MFT{siQCz@H$k(92;1 zvjULY<&U=1T`{R&oV+ags&=|W;XOiaH!WxyFcBLhW;~;w_UlUmHU0qy-};>Yk8iV? zAFCJ5P$LV#dOwJ_vh?oa!iVwi+6rl_dVJt>9MA*krYj5npT+D&Pe(1Ql_cniz5*uY z&X*^1MKQ?3pOnAvBk<-gAlkaK(C?vu6|D~ZPi1d5h7Vzbp}B8=X}$ig&?tY}zsT9=fu|CHXQDQVuUZfmY z^DK1ZdFj5r3GiWN0rbpOpD*EuVPG%^f|7f~92jjlR6q?H5_Wd+TR#6SM5>0pZC4dK z-@qeXgGaK_H1++OWpS8vaQ)tD1WZ6ol5=ew;THoHh;+<)e*_HL!FBhV%0!CV&X9Uv zV-I1B7b>y0MeGpNjjJ1Hp#}-#qS++G&R&GqP%z$r=*Wo6wGjs&_-NV%hPOK<(rW0H zO@un5kwlFc(L0kPChW!%u89nV|4MD)fXV9#CntG@`8bJO~61oY-nQvCt`8f8~`Uj zf)>B;(ruH8R}xnwleE)w3DvC%b=_~92*nM>6G93`5}hPM0HEzvQ0+2B6nx`O*w86l zGQ*6bzAB4}PYyM3qRYYvtp$d}Nu0zh&Sap9X&}ckAUbLyp{~gDvCnk7K<)T!pYm`E zW8cOa3psLv43K#7fH6bB6(?@egBIy>dBq7f(Quf9Xkh0ooJ>U6M{hFGU^3BdULFWP zE^%Ss*i{{g*bV;tHHHjv@Yl@;?VoznCiR%W@foI@*xY^FBcTCaFfTllNxcM=MhU+f zandUGjYa$hzl6I%aJM&Jbv4Iy7F3{Y$k9_wcFXxMgcDnqxqCApwycaFakk*EdC4hh^U{cu}$s7o14F1J)wE*TpP%Mg_3OGMH|*~8NS55qI-G?H91!xm3z;| zI4-jPvYhj!71qMb?=6VB6IuRt1WvvbOha0tS}}sf7{nH{*f2)T4-hQ}pmrZV5>t%A zL$1QbmT_}ocv3^jlFilfZzE-FTulvuqu1$Cgp1Mu=vuyMO?Nc&8HY&|S5Lw; zPov2NH$_M={3a^)YV8XuNn`~&vqSE0N-9*41O#h=Cd)E8t|8p>xvS_dPrX|WTdd%F z?0!;p0~PBHO@yL`CRrt^_x_~I!rK;S+*rTY`jUV8yop%DG=DdloG(qxI#@GP=mu2S zn9Pa`E@ylWz!Er=0Yg%;^ux^tL|=^{YbbW!>zon@Xuo}>MM1}N^!t0vUJxt7j;>C7 zj5kU*#*A8VWfXRk7lnPtdqXrMldfUbT)m_N-bVp?=g)p2IwyLw^gk{8Tw9-2(e4#T z7N^MDRl{P+ihTMf`0ZVP(SG}W0KjJcG@_5Onb!`8uq;p<#6dUNnD<~naV@sQq7Uzl z5q2EuNCNbMD|LQdv^TuaINmUkUTyiUO*36S{(^DyX%C-s=bfBiHFCoH-*$=<<8(7X?`&j|EHqr#BidHAh}g7=cnEqA)p#@JT>*U)%N7 zmuynsnEki2E!46#hTe@e^jJF8(#6e{Lw$LOBy_`>0YN|zz4VL?L16MoPL8o}@hyO3 zWE6~+q&@M+cvCp+L_PO6y`aZcTA72c?-N*|gzIoiM?2JE+Rk$qDl# zf6}5XM53Vr#1560gYJ=UJ_aq{cggv1=tf{VzSK#nD(WcjOgsgE?1Oyg18tdE5uOWZO zP@k#KDStQ6uCcgkHfxC5I00Hb&U1un9zd-5lUwZ0fgx-}QYrC(6Vb`1nv}wdK!jE0 zp^+}1U*lxddehdcH7%chSp)#FQ+R9#X$|GdUEoP2W=NG*+!j^&o=Sy_+TtdzaJ?j| zWBo}7Q8f$H-p^F9Q$*>!7xj8)iwt?j(^!qH3(+hA6zfmlM@n@+;a=Sh}*s7KXyW|M1od|g1m2G z_=weKhLf&?)|#n{WNFG^*D!D4XD>*x54H_-XfHWWKiKwi5S&^6tbA?QKfZc41&WRF zlkEZ%E4l-2`F5PnN$$x9(bBs9RFu6Q0mD}Ro*|gr+RN) zcLT2Q`w4J7CkJR?PGu|kW(2K=xOcR7k+yr5R)-mq$f4_h{eN_g;SQr~%#@+YA_f}M zFR`g=jEc_r@FK74)~Vw@cYHG76kYY`QlOPNTrsAdG4*I|&-aan+Mio66AlhLHmE~h z**bak8Hu411N|1x?Xc%Qhj*99q)}l)L!uhUxSOZ)lh-A0flx%PzDg+WyiYczwI*Bt zEJH4cI&_X9eUk-bih)APPSwoxtN4vPSy4?EFGN5F8d<>?;>HI9n6$rO+zX@wEJjrz z!j05}Os$!WjTO={*%Y*|>2Zg2Mu>09C~i=3fE#^SmXITgDu19u(8z|oi`zU9!5L|j z=b9l^r9=w#s(+(`uE>i2$K02I)tI;choKq73`3D*Y#AwKsc17ZmWhgCDzr(Fa1KUL7}o z8@TGpDE<-VQ6%uHPS3-+Y;GPQUyz7G;F*j#q+a~<+KxHB?;EN<)HQZ3hMY3)Y~`W4 zqVl6v%?_(Q`s~tga|xBc92aI&YhwS>@t6FK#Lz8& z^HYT@zmR*z+-fj}EhM8*@dLu71(4Bs6qWxj#5SYpLWyw*fdYDu*N({mm09_~zoI{;imsIotuud(A7$DAlxptjnO*C3<)&QXup zT!ly^gYxRRrtvP3VKP)IC-U4ahm?}sUr^_n%V645LOuO=d#fg7R(5A?UQMZL_N_eH zXQ%sxp{E(f*N7Ysx#iOuKJLh{!FWMQD-Cmlw6-k9V@gq(F^5ZLw)F?!XBh|!l5U}43-f? zA74$m-k5tsu$YNq&u@N>f-%wXD7eEoidX7q_Et8qE}Hhrp)Xn46i+)^w@u!?qRi5x zn&FUQ+S`G>MdAzSlf?1r#a62cxv{?PGV{RH1Gg;Nw)T$$2iG*J33ecucC^2Y^#)?UX6eQ2 z4~VGj?0iNI9|ILP&F83tX6jRFlHZt(9MKr_^U zO8A%1qA*QmZn95{L07Kj1pQ@M#h05tY;#~mptqNGc*3%yNC$R6Rc+@9YB=-`^rMW9 z8lFi_n);0DH;TLZBU`y4p$LK4d;lwAO5l^bqt~xBftIn!T9SSkqv7pyI7VM~uJWbz z=$0RaqI63W!-4F;14r=$8lzN>dbw}u=>K0X@y28gW@ABW`_lIgXz|x*QmPvAl3IJi z(iw1wdR^hdLJt;~(hd4doJPgde(B_+w}0Jb7QpR)L%8W`Wk7a;)3!faV?V#bKf->? zRl|u6pU#)F1B6{OWqAd;{*0#y9DcRGaG3q~BJKWqaA^H4aE2O}etYgPj$sf9J>)g} z*R;(!P{^JHY{V zA(2HNyFl|$+r|@68xM!{=V|pDU?)1Y>wE)FIcFKfe8O#6XEXGo7Bay?it5?ob?*Yt zR+7kh0GA?oFNeIeYvz_F`|7*qrFkT4P_CvgrNa4NfKi|!_iXIhKpEXRH5MQXmpxE} zRoNO2a4K}>{^n;Q39YQI;1VWW4Fh7;9>pOj^CAqN!0kl70712!j@{t_)QiupeRxDy zqe7cfeb|we*O)jD*1jo;JlZ&|B~tf3R(bt(7b<@rUjv@|huI3FHu?)yPsKtF|Dn%a z1da9CVP5SHLCU##VGRqG7CNkl^2T=OvoVleMipdHlNz(AlB2HLLAvr257fe1|G6m3 z&;{e6x=)943_#DW=yDD7l6AP%5=5bPw3IC^psz*m*#$SWVyQ=_^=8Vmi$$r7%@trO zDH4I@%7>hwI|d?tygO#nZLL7mCG{WOOK!DOMB}dB!#~*MWYxQa$U88g< zD5Y8lv}9R3^j@2s+S0HAqMQO+=U_2b?NLj)n#TihIsZNV_AVd zDntnxlgm4S#s<1R4!M<^MucIT6SfnXTQQGxe9vy4uLv z1IEa}8uYs4;ZsP`DgBVpcfi*4KQYnje5bRPev0GAXwu6#$eTZ4D%9EmdBFF&+9~+FCg6b_KYC7PC;c3lrH}pHo$h*1;f~o z8!f@)E^u>^d6w&gLpIaNwPB5kvT%F6S9aFlan!YYJJut~LaF+ZcseiwJ zUD($z|C-C(LU1A$iT}F7g8W<;t+QmkcF?BuSUb2e6w`WMZ-&neV;6u8xgKWOT5QS+K>wA^nC6>W zd)5N|51nufayC5GW4j{Yc811|UX8$6vWwEwhj0tp*OPP*|4_*&&Sqv_AQ? zs({KqCFiA-rq}G~v#^S^w`DozG>xv%iVn@FhxGrEGmN_Gfy9^;u(Z@*@9z7#Wca+!K9%k2>bFRK{t|=4-NDWBXI-t9$zzn|JT`B^76AHorC0 zq@;P69zNOmwjv%zr$-J**2XmGp zp{RQ+o<2_YW!-I@JmxClr&L|OO@S8H0fHNY7{azM4>_?+FH0;SzLH$_tu;Fck~hP5 zmAx7_`nC)I*b?|W&`A-WCu02x0=hiGqXFg>_%bc#7yn@Ccj+I1zzk9q{%>Z-OCJY` zEI|pHVRSYvQ2A;LIBni96+7DXo{wfPpN7u%@H_k6YJjsX@H?%qFobVF?+Um1aX-#u zQ$OUi2XUXFyJ0T3yMeFH^y7^$7R}(j8^nB%JI^Bo7d3_oD+dhV?+I?f>H%Be@eQ|7 zMU*n(wG$%9ZW!iD5n32+`1{};TV2w=<~~j`5fF75T!IM~C|IB`bWY65CM^OyeTe{zc$K@X)pfC9k5KWqAEJ z2qZFnR&yR$Uqbh@c9>frvcD}#W}(okMahlBij!#7Fo`&#lFlH^OCfWXul(7I&*wNF zzBpj{Bc!fk*P7p^HAIaC=Q>5r81S7&w?)#}Fu+P2k6%w#X!T<^e}SJdqO{GhVWbWT zE8!be3YUC1Mu^a-hIIr%?PInvW# z`i;KllH*tS?p!s?$9fg~j!0oPv3dor!e6-T_6mW3mnS7RfNF}1zwznhny0CCy~~7N zX-^|`rwOSw60>j7G&0N1-NNtH`+2L*r*_GW8sJtMfz2eqBpnpW#O0?pjP?_HwW8~z z?g?t|@RTlv+j;@=qre8~ zD1Rm7Ym3`qjrde!D*q}EkLd+^0)mm0BMBmEvE9L<$$rPJ9fYnv9Aa(_`^`buE0vu zmh_X))Dt>cwjofX@?Kh_YMF0bz??=7NQhd@`9*tAKw`_LEYzJY99T`n@{^GpaG*#a9vajz!k<#* zd&sh#9!%zYV|M46epC4G*BK`kkQ>hQw@5Lk&?ZMV)5>Eg)){HtJ)VcW()MMfsnGl7 z8(r;+71f(uJG;`1En}=g(yc-gBbb}qZ8Gc~$}=8$J*wE~q0eTo>` z1W$4hGEm%_>QV__wiFiYiG{Gk*>GWLJYtcKK0rB9^1^k%RwQ*O?j)!kgScx%jJQCm<03()CYkjzjcu5OUL?Vqkzl z#P-j1l6ewXILyFT?2euQ^qU$XnpCi~}An*SL-*8;E8*`PQFCr%F<+RWv-o}PWxH2~& zH3L`+D6qhKU3druRhxiZHl4aY=HCB_iGn>J?~_X0+!EfN<;J6q^VSHG+(%>WN3JyE+GZ@W_N|GCg zjxC2GtO}FTF;RMq(F#)3Kp|1)g(XdE6DGoy;TC!Str{en$uLOQwTq5Hm(EQ7OZ@60 zvnUapKrxc`8Br8H>AETeehuqyQLC)e#izz0>NHR;`t(mVPa8H3W_?!H>{r|lnk1#LL1ohqh^TB zIBYr5VO7+Ij*Is`jaBDIw)gQm3WRD>-hThlNn7^hR$n(EUy9Q~`4XTRLg0v)u@?lY zk}!NSv{g{}&95t$@a%Z3OoRCQ3$T$SA~Yxl_m)El(FkT$6aC~T@ZI!cEQ>)|5MOym z=w66XeZ#9xL(c1{`AXo7xj>qR;qAk;x}1&-u7J}Uqd6!&6`Tz-Xrc&F7(TWJv<0|O zMC`VmvYa~XxGbu0{yQkpEKuMbboPzgX%pfT&Bo%OmoVD=ABme19LIr>FFA;vDK=6C zwDd%eMiEC&9fDYea&&%%w(?Jc1^>GfC5->A4SQ$9N5fqf1Kf2`?F(3H@j;m2`w}zC z@HJfhGqGT)7<(}BM+-hm)$}XW!2pc-@2pqbD02hC4m)C(iU_8NdCku@TO4Oo^Ne7& z;sAz|@#7ID1vA@03A;nhjDaRIen_c#g6cb#pDSL&@iftz@kB)V^9LD>CzwabVm|LI zA&EB3lM?VSVn2_V1Z>$~kJSjCFk&)V5~!pJWPMgxsM(BUIWQX3PbMqY?pk z+EXS`JG|)t1EAmmMJ>X_IAQ!0sbnE|Rpm(w@l?%PBsszui(tNnC4x7r{yz5anayNaF@pZ;p;K*p|9Wk zCTkJ=6I5L$i5(DyiRTfJyj5J@C6}NDBtt%EMw~DzdVtxLAD(FwBLSr`FHbl+iN{X_ zCC$Z_b2;-k2DZThhcqz7*LwpF&QN|Ulp%6MUMTK1`<)7Fmw~3G+mUyjM zrDEtah~(OU?uwDg=>sr6OSyc0uf>ec&?9PTl_!VSYO_-gK~8(jsm@8v6*=0vlZJM+9j-K;I0vSD#N1 z!U<{|z#bcJFR~`I{Absf#1AclsuKW)LT;O=c{ZR4W<>Ej^dZha=}g$rAUhBZ<79h7 z=>dp!f2hPr2*Siw8Qt25p9-XNeka|)2{__w*-1D6KP;iUww=UG1xV`L0^FcO7(Ppk z?oBo^T1IRDm;(B5in@yI^Pc$pGBL?VGyp(xgd-`CM}vzhiU%mn2ts_t6)=NbU-T#~ z$nLL9e41ZN+(?ip;ndAV9`PZ{p75^;pq5w~M8g$g@U~~o=c~3*3vDdXd?CR}?E-?G zqZhhPB^r8}MN*tm3ZLWC1`~0ZKs=s6y@z32LrEqNmkx?eu6;&5B1rm2l!0ezABkrM z*z6)k_71{J9Jx?5b&hN#@sZ)fJ~IDUyYC^twWRod(>f4lMsu!5F4;8_-}MW@z+Te^ z)&$4EigU4_@3{0z=MZ8}Qg1#*Va&@47$7aA0rUCbz`GhW(Tji_fb@Ir@tJn~{;Q^6 zr;n;_aRkAQE8{oLUL|Ufu~-7)aLmo!{6gY-Mvg-=wzvOFTQi;*OegbHmq+5H21hix zFwJr59pbfU9F2V%$mhX`QH=e|os~Xhx5P;_zDGd{zBzX-(1#61Rs>6hYb_XWpEPkd(Cue$y z2&w16j*0tmqE}xkQQI=K@NM}AY;>=U&`cQtgF!^_L|T)lGR^Y{R;+2&?ehO_PV%_t z`z!^%6H~ZD(JPX18W}B~$96#1XULMtfE+`nC=|#dm{e&Oz`Emx&vqCjhQZp*zq+AS zLcH_M$G4&Y2NaPuj;y3p!0GSfSQoVO_3N^UQDFk6f;|z*0sRNQsCCO^icK3GO}&EB4S(pY?pBb1$20nO^T}pJbD_&u z&(wy{V7M)mVqMs=W25F!_9Z{=k7{7eqc|nAUlbX3$@f$>RJBtII!-3COF-p)6QiQz zuMg~3&g>Gefb{*zN4vd3nUg8ahg(0vyc_$}gYdtcUAzmYCyny6A-Y_^ul|+eN_2)E zqZWXU9;L>hAhVg`ntZgTw!p)(r=hpStuTP?U?{Dw>ze$Sv9ci5lwEt+vHdK}a{_(H zuLAF`CoE+NcEUvYPQ1%kJlsE+MYLzvz~;K@cR8?6H1wypn>2cSuu!W=@7Yn%Z<(dHrjf`UBGKVDs2&=HJ{{tS*pNNEQhHoVbf+5eWAbAmT+Wt zjKyRLe9tZ(F!lmh+1aH(npdC}=sza(4+^RvEP40%VY)7y<;{k!4*fgH4qDf=yVMm! zQXV|%aRotdsldC_gk0R`8D)XWIx+7|9*>l_XSa}j`-(f#%4k~TcV0R_(WEyY!7f!n zW{-S;vc1l>QE`PpN45RhD@%%SJ~;RqQG<)?O@?G~3@8L)f!3Z+t!b7|?qHH{XPbEADVMs;AA595>RmjYkbGf-uChuq>&*w^N-6aW(x$b`hn z$Bdmlnb8&2MXsFMe(iRe{Ic{Jj$t0^>5g!Z6QAiN3ji5*$MLkOWd;2WQXPVF;nM>(8%zm2)+IPAW_1}aNKOW#WY+Q{{|NReC^QSd| z0u?QuNkLp?LLwrdQeXq&Q~#p|R$aduS>C1*tXFFQs0OlQf2_VW(Kx?>h>ZbyBNQ(p zy3L4aYG7!2GZ&&pgF=e0Kf^besp(g6CnSRY+mf;ssWtaNEf^eAF57Tj_JSFA|0p1y zK~sP|VHzusd^>EeM@a~u$bvW+xLsK+;ii|!ehGJh{YToEI6HMTP;7ITJ<9|Q&5)QD z)n5}I4vjmQ zexlIK5E1H#gU{L%qTuVyZZatF)$Z_O1o@iNLnj~0Uy2l6Wi|B7iD&*S=dw>a?nh7% z;D{D{9X%&*SZZ4=|x^Qt%j;5dFgX=orn*%yDd13mXn#|SnG&~(ZYh~ z^fok*eYGO!ZX~d@xt2O0r+5ChU)B<1@elujX_H?{uevOMvy%P7;cr*1glGdA`>*Jm zEkR_;sPF#}pqnw*!Z)MtK@S)KCn%RPh>(G(7NR{8ZEY+Hax99BexGJ%Gz$DxLuEj`C2wOx(73V;gQ*Tg7ddhj#F1bZwa5SLzH0`OJk*u_C1?&v}WmMde0ThKj~f=2}^wN8F6t#BtEvW6$obYS@ej-^y?u(ZL4iu;9Yb3)# z1r65pLuQqk^JvSlc`|fIlK1ORNDxzgypX3f9}g0gl255Td6IwNCXp`II5~fp))&6| z@{fD+8Z>9g9xPzyd6vLr;ncAa^$&?D7-%38{r>QVtBI~nPF$@_r|Z+1eUu$ETJa4? zX1k?BJ#2M%{B^-lfq?r&Kob^!yu-iY62o^{JIDvOP%4$kuGZELn98bGJjLwY1w#SA zX(|#{6!M3J0O5H!#@irgYf^Wrq}`NW)YGm99TL%lZW zn9_=h_uISEBQ4e821$;M-B(Vu%eX2Wl62uJb^&NdXrLK_xhie~q|tHJ`p!PxbYog! z@qPywKzw%m?)=9B+l-~3|ISp^H_iJ2ZSlu+^j%kG!TP$6x5>Xjd>jx5gh~edGsPET zL4}hMR2M#kgEX5*L4QEVJ^Fs{*8!}=0CqW8i?9iM^N$KV9hV{z(B|UwF-0$|Q#*@! z-;*c@UL|43Q@SG1wu#9lXE za%Yi}wG4IoOnUa4B-p@Ma?9^;ud^1+Sp?)Y#VX8-p=pcqcR)YsJrz!!p`fdk%Dznd zAKlhF$-vd2uNPt)-S7Xmu3Dh#H3m9kK8KW6g68E3RRaT`XdBQ|`q_WEF3(afgALVH z7J3{52Tx#f6t@D!KTgA8X^SvXh*G1kL)&aXb7d}PRCvecs6mqC594$^|9Cq6A~8n+ zJx+wE|9gfCer@am-Kewdb7}snu)(Ral*dBP1Wf_-hJ2w|4)iUGPQlZ<;I^HJQsbP{ z^Hu*RY@|fjvaIW*bCWpLybP4CUNkve_RP3}45#1VSFev2ey!L)V+zS&D zLN{21(`~#Nq+|^bqi0I1Swy?2hB^gd+|2kN`D!r3D8?cH1fz$bL0Gs5+uBmkbB%h} z?J+E@B0goT5H^X6*bwz4N6J7OSRTJW$0o(AEc$JiYSvp)vMZ}r_@Rph7Zodi51Te5 zO84pHrN~NGW_D=TvD~nFri}H$&iwRsJ@dvU)gL7Sv7jJ^0vEo}t$3@1njgg|s_^gm zxbK!WR;hJARjYtoDm%d`zm*u90<}Qko(u*u3qV)GZL!2~bQoVER(+5GV@{i9F8)DM5MC zf8qEXx3-i{^bAis3#0i$nd+X-!XF19i2xeM7dA{hICSw`cw*70>|i)N4)vNc)~5C_ zvqgQpOMWZSyFi!aKRq*i6`qM2oi2{dgB^0-u}bRZfn2VJo<7KSutv~PC!$dtA=QT6x^y^)Av21Nq*U3W`6wJjK}`uxw@H zIr@WG{a_eUPJF`yb_Hg*l)E;jz|&yZeF=L@zL!s^SA2B7E%7rqSTYT!EtKXC#}*r0 ziyZw!l-vmVGVN?#+U@e0r#l%oq0aqE$>Y4sXVCF$waBHZKt`h)2YciE`xx6Du= zs6GwFDlvo#GNk{Ybov98p!zULAte2FUlAkKE4Hy1<}*1cep;8E-yd&M-_8}&$~sft zVQtAcJ$Au{Eb4EfCx48D3Rd!*dY1iug?29$|57y77NTC3)w89g6juk;YUeDdm~W&XtW*4ad`R(Zz?Z9Cs1 zq8m@$dJv|pP}v0^T+MBi9KSGx&dQ*yr6tLv|_x^p{Co05YXd>L- z_uv!&5D*J6jeyNzGucq5sM#4`*9z@)I|=X33R*$k3!WoLZ73;Xy}oc69TIoPl6xXP<@=5geU%R*)b6cv2z%ON%6cajw*e~sUjK|jq+em?rvr|u77xEp?wRMErTDG6LlksmDprmPrxfSVSm&KTqV7Ss|qc85r zbxHM3$t!k%DXp9 z|GLl24+T3StBcpLi$jq0Kz___5-wIN$l>S2vMUz#oR_{z`59kcU;re~m1#}@$U8>h z$$4oXii}8211AF##s&)JXJXl7W&l+|t=EEFw7cmCSmVw;W8r$h;Jil04Bp6`pB!$@ z?ymuJaP0A)n9Lf1Q_XQ^Tm?^&Gg^dleZi*f6EBRrX0xVnUVzfx_3amT$S#hZ?FAk> zb=x}lZ;|2P-nmkDJIuU>aE0F|e2R*M8Tj>VXvsib8H1_a7M<|R8&&(7c8|UT-BD>< z%U|bscb1;*=-~~QP>6-k?JJr#$CMu|arB`G!P1BsiPUKtJ+rpx^qotyRqdPuG^D;` zW2_!#E8F)`7y=K!S#<2+>7V_FK3l`n`2(s(m3>H~$8_t-y8$D7J=*GFQQA)-^4v@7 zG6kZf(&%s*HzR1vod%+=SOcwa@4tZhx%k$>Pz~zX1!Z}mUa}#!u&~9M7b%tk&k82L zmNr4{#w&0Qf5cAt#{ypCWQ(5DZrft&j3)U=tmx=#2V93&p% zsqYVJmVg+Z+~XL;{(+p0JyL^x;H1^Vbe+3-KHLkVc^{m2uhKM`qP<(3R{q2DW3j-n zG7!KG%P{(O?1I*9mYH}b^@wAqNk<9yiPj2_8sL^#pUzrI5P=e6*Fg7}P_#6Jy6u!3 z$3`u3AbX`*qx%VVFl_vp{7IVZg5D#sZ$Not*l*L z;~d0JXUKWQO2$H(>iX-%JN-vkJIOA*+(pl>_x=V-Lq}7%?$&%qUh!w9#w9HY3Bwk> zwLkm{5IOE!G3|j+kD>D2Y{TJ|$pKLtwP7vcgHVimKj%Svf0>D%hfE6Z4i3`@F zaZR4#&;}+?RH*Y@Pm7jGX@OYKVl~v<6cDAJoUWtEyEOCFwV59s9(>)fjBlC70S$z! zNFs6)+z`5zzkYJuftRhZ*q8M>Z<)+`W@8zHaF&xAZko`dWbX4ngs=O&S72hxAS&Ur zmqWCadgLeANQig49LnK29*r#*b^jn-RH}je(L!5&xUKW1Es*7XC89ABFf!rR>%qk; zan(1?KdE)ejFr7Ukc|UY$a*w3V;=>$z-7cso6=BXLen-FOmBAxqeSR;+-FwO->w@* zH}N*F3kAwv#4efUNXoL*I%l1Agi{n35bRc%Xo0lK|A|{``4(`Nrs$8%X;^kx!X~Zp zb}8(!EU4oiAMYRtel3{y%Bu0?@Xe5-fkVh71?BbkL-ME4pb1AOwue^f%pN!4Tz+mZ zhX zuXg#r_DycGXT55*W#0&he?a`ou&}Nq>;BEE93)6O0d!#xS_g* zf=}CgjIs14tnXPx9gFK2${=u%K1VTd`J9GiN~3x`oFl+QQ*G1p(N*!1P2bGl)GVE3 zutNQX7q~O~kenc%>|@ca+P$uTgjyCejBxC?4CB(QsjDT-7RqtSCry3Q9FCzDwCPX8Gb?^GOV*C(v94P2ex z}e|^IJfwwz6o|3GYLE2x=b6R~rgjD|Rx&#U}ecS#lNR1Csg{$+iDl35CU0#u}MD=EL zHx(abB#1on8Zrcwfdy4(f1rvksI=WZ)OKf)BWoIRZ`T9Z7pI|Ut*ejr#x|Q58D@pr zrd5?K#?+C{hkvfzw}63axUj1&lO+iTij;%Uq^=J%x#n=n3d>}I2iR^69)NXvnyd$W zuqgAyuc$x?Ts&)c^GpbltblB0`39{tG)S2AdBIxy-k`WXjPCY$$c;?5Lvpu4_lWxk zMV19n)FDR}L4y&X@2cE|cMZ_VC*p>Uv22qmu z0h+g5F+{_aW;hCfG$`?gcs{)f(sL2`fJos+i=4t51%Mj16)aEGHGrsTlNxk`c;-XF zTH$57da0?dCiz`$$nSZ+JX;~Drrkcxa_1(Pz$>K1^=ZQ4 zg7P3g>rhSDRgmJ4PICWXLY z8;Pp*%-8A5k;i8(B|iU9fn<8$W}{1AD5MC7;0S%;N3Me~cWeFtP-_dUv}rupDEbn1 z8f32J9cg*})A*UQYQmv{vlfhi#T!Tang0_*g>spRu>~bgg4H zRy9QvqKfTx=;BgFDVVI_$cK#FQ~_LI^VfGDe+N`)J7TU-SYsKqY0dGnlr?K)5rC>e}tK zv|oOAG!P*j&t`YFjQu&PU8`O5=TCFpa%+U?zNEQcDHmMcf4Mef%%L^ENsRh> z{?Qp%l9%kswCD|8seaGkaf#POB?Vaxm%x~}QRaJ7x4!D$dM2^v`QiDB-u|uY-T z%_yjwxL0NQ@g>x&OY*NS_@!#v(QVqdm6$!1CmWnAm#@hyVp|q&ySG(u{)vJctYo%U z#pV5G-cividVwTeg%t_rKCT98S$Y?}(Et4EtIL&FzARZG<$ZboF7F8RhngI75*~Ir zY1@vf+wGfcw%h2JRlW*p=ffo(iVl7$f&OoGoFBdPa#ogFj)uO^`oJa)_}i<#+v>me zMJW7;e)Vn}!y8Sr6jmy)4|PW*~!~a?`mME#(hWCW$^G-R&maOe?OMF znU(pXcOv|e%U1oJlRE;(26`1{GJ~?e33x@`8ZD1K@Jku8?Uf++y4^EpXYa^zT$Zg; zBE$Ll)e7rB3Vi_QE3M*G4G)-k8;-HIF+BJ8f^XvX&y<;0@KomJ)P?8$>b6gj&dp}M z@=32YWkifUN{V{&=0Vk_-0E`%RUfOEjG3d+gOAVA?1}0MYi%`aT(0jEdO~%Xf*P!! z@$}s=)3s%&6K`_o-i)!#R`@6AD(9=Mnd` zpx~e1=rYOgIrRuFrtfxeyo9e&E&G<1XR%F`a++1hEw|GaKVhH#wT-Xb<39~k+gn$x zb#GjbzUb9g7w!D5Z@gM*xRCf!3UkrFTvDB~a6_Xu=WTVO9?jpl_iF_|-WI?5$}gxI zy$!tfb-f#XA9A;+_Pc8z97VZSSZf@9p&+;VticDJyG37PkMDR6kG8z4x^+V!NgZwT zd&kHHKP)?`vdV?CdG)>H;WIj&f3z;EJz8XA&D~S{YYjNdf&HQO^k-jbu56zRPn&0K zNxo^c?wXE$@$)FXJ zxGO!c;IT}}-80nuz~W+;Raw;e8x6Pd9g^xNWYKeGjT^d^pDj{^nsrZ^E(JVQF3TKn<)zvv<+8(_r`R}cd2kciI*u19)RD|SLe|Q2-N?h#{D_E$g2eZ{MDve zaKxv^CwB)HmRa1dQ_@$^OkkQC>#|Jb6-Z8ry|&#Sb2@h7NBqdHuu4X(Cw3+R|ALh~ zLp6if_$~k)ceLYHPIIy2yDaUX)5G(V;HI|18Te({NsXJF3y(a83?``(?Wm8s=)c zb;YhwOF&izzHZNRst;xY<{r^IMY@IVsq*>{r>MD(Tj8Y4l%5yxx5}zpQ)SDPv*GLX zs%#Q58_B;iZ*6bPQaUdwyFahAd{;nll8PM3lSzwxaP*~{S&W{AdEZ@&P1u2o$tBeW zC5GiYmV-&;+*pz~7zlK1gQm{oJzr)0Taz2}4HH79&V;9O3>(^Ng|!632G{mE)%n#| zlCn;%d++hq$BrCiv6=I5i^pDVe*2G^9Ykxq8?L5| zg5RQ54UTUxd*5Jyf35SMHg#xySL4S@pLh(5=Ha#m`3K&g|HGyZJVg1WaIZTqq^`vJ zqzP_ucTANZJ?QSDRv))J)&GR^28V)+Usf;+BuZAGm{z)2qfI&Q&iP1`YSc_h&tt(Jq*jvaLLK5ibCv8 z6`o9NTsao|?z+oC$xPQbGWW4P#&_`x>cl^5iaGmxr%@4ZXjvYzpw;Gn7rEQ+{Nvrk z`9Hd&t${Ov87q>pH2Y3)(j{rx>u0Yt=Bj0VY*X)W$L~!0E5pj9c~V!V&K#+Unxc?` z)}DA>bTVr887_I@Qrqv|^5g7?#gs*@Zs9AMYv?ms2lLEBngNDpH!(8C8-U<)<&cK6A2byHTJ^lzQ3M zij*DE-(wGayoS`%GRkq;G6gN^z(#uUQ1=1L&uxHl-QkHRI&1UnIiHx`b zlUhQ>^K3l@EuZ-L8|^=F{2uR=d|xpm+^egxXM*g>!jtq^F!V`Lr0S;cH4_*|-0eo8 zhduow#?Mvz282uCBmKWo&=iVDAOxDaP?P&u(pGdFxW3@LUxkpz+Yw^r^l<*fn0VO= zy`IgCzSGpbMy-~uL4Gqx8r|QgCSaep>&N0c`+j4vebxJq&ax%?ENoM-K!kh82>x4U zp)B$P^(c5b^|LwA30%=|^I7%F@q4n@0}b zD~oRa5U9@yEinI$1#!qm&j7!tw&aYlgGYRD<{_&c=4sD9R_$|2EzUACKbAZFg8#=O z*y{21w}b*AlRyqm7=_5RP8!5?l2%Q!Y-bC(atFgmY?H&;K*H>!90n^Cva%b)PASAEM-TYwT3QOSdx)j zx>2Sxm0>08=IfKT>DOp=d|!7Z9P4U?TeG=ywu1AMgLr_Ag(#nEiX@))meEVi+^z*v zW73+6-xV59lXr}gEGzcNJyS*tEt16^Op(6uthr@JpMeBY3{x-qcvAArBMNE%*$Mh7TA7l89CPsNza|GLMn638X;&LF z*QrFhss6fu;}J>h^JLGF-CY8Lp0ppHBA1QQi?6QCI7N-+hUrC|_&~PIzN-4}R7ioQ zEKomsW0odz(A;2XzG;`X72_TG*jbD82xZ!yBdzP|x&mtB-oMj!ufWgHIGeDRzJ~c= z$tuCdAmAnQDB0O12KU+q{ck2BkFB1lh9O zQPzd!Lc$hxuw+e4Bt(_%Ct0`5ke!~s>&T9eB}%SpmS)x&Z6}SVZC;hWl(f1tufq{L z&JxQW_WlyRs&XX{3V?{&otq|}P>oCbbG~C-KPRQ(rV;rBoC0|sh`fWXsj_`bLJHMp z^_^47eX=p{P*RM0nPTK(%07m*c7dgCKxkp+FCK?KOd)%7wzcFuzf(r-mb5!@h!@OXV5FzbYAMRBbxmd^kh+DK=MVpg$p52Ph^L9%U9%$_{ zaSy!>aGDE18=tbNUKy`QD&&yksjX;Rs6t(9*-<< zOV!M9)dn?8G^c!cg9WgXU`05~V zgrBUb-M4aD!9#4GQ|-a66JxE2Je5^D+p=`5lb1$RTJ5-|YjvbYS=OEsAXnjZI+)oT z*XtO0Cw+raTET;7?+Z2OhgYfAg?OntSjP6q(eC@=p`^+>QbWbk_-iG#E7quCu{}gw zdRNQeSuHDq95UOHleQZifQ`o-3KnCb#IsIBjJ3ewXY(H z=~(#{c3f}#n4p!CX}mW?&-yMFdLA`9C!NIAr$;MK5 zNPxfQCBXdP^)h3|!VQ}$U)g%c9y6Avzb%@LErSGwYFN>~&@`!f)Baset9g0D&4U2f zR6j;>8(fuTK7N3+3~H2eWqZ6;uNQV#>S4dDGR`!K><_oiY^H2kF8bW_R|>x6fS^Q3 z3>jh+zw^MyHxM(-OkS=TLH|TZN->~tHH4gV$S{f_IzMqzhuZo5OtjI|ONEo8ycj?s} zeIGf_+b44@HNbdN?e<}EV)m2y9_Jhu^*tEse=c@ z0!TH0YjcIcHH1{7Oq?p)4a?pzj)6>ePkayRPe+!s?&!hs(YyL;jv(&MOP!Zg ztE`&o7*~yFuMT?WI#BK`6tjNm=dC)u93sau#u40yt%)Ypc82Id5_n}%(z6VkC;*^* zs?oWF5IIM~@B=3n6}O)Y9Ez7`6|ZP|SXdj8X2E&ippvG&upSwD-e$}74L6CvrANA* zr%fia($b9a-`}p@SyCch_OdzM?-XuE5QHZj+q_aXbSkn*0Z1kHJZ3OvJQsz)eY0?e zb%ei^BzvvpJpAV)G)-^y%O*H^kXuwrT>r^F##x%{+>VyQe>PXvG>uW1aEy6uCNXWr z@^T&mJDi&efr_;^Bk|eNn|8_DEv4~a4>U>8U^c_AJE;k|-aWGvoG0?YzB_`L7=k~* zl?7ao^4fqBzg~Cz=idDmQ)_DBpqLmE7|g?<`8BIyxJrIOXoe#k>0Z+w597QiYc27l zPr__V!r@Pvq@IMldzWJy@k1*Bxs2p8T9`<0u#0-KHII$I{nTg1_H0Abv}PXoEvop` ziLyI`V}XYSQFwHgFcjWfRc#&fCry@*L!q-S_QOxt#`?vxZz|C`dsb-qEEjR;_=P`j zFsFieJI4VL@b-E7;G$PIO^&SW+^9{*FQoo_O}9pheNG}-RSJ+`6tf}!#jW3oD8zs{ zt`C&q)rk0JB$O2LaP#XYKj!stmgO}TF{d@h@Av+j>)rYAHs8AsfTjkm${=&gNPGWo z@?+;I*n>#hUD^`VOWW)=?Z5hDjUb|Z(>$;yit2)}<^fI%y9(zq92HxcWN!^Th;!N% zw%5`+Co#|bFMjFmMIer@mgR|zf{?+&umf1)zay1>rYK;ZV2v87^=UY%r}K{V{9##A z?x7T6NfYcLQM22S_{1!)6<=Z5TZQpUV{1(*iWj}j0Yr4*qi-VW99aH4pnwYj#P=1^ zWeN$Y+wSrOKK#+HnR5b!UjLUkXT1Ky#diSJ8<@Fc zYceBz9Q$H$KJL&%e^Zj{vjB^lwBqLksI7DAS%X+pF%^2unnpH$ta6i`P7AMd!dK${ z?oE=eWo?m`4c}t%{NY)yIN(2Y0Uo_;Ws#jmade#{=f`YvBom9dkYQ_Kee=C zH0?<^)|lQhePP%FZe4oDS!(_{KRKaNpI`=y1=H>E&#a(S-ROpcp%PN0o_DDU$3ER8 zL7i4En-lO~cMN=`s?Q^Kd12pe zMficx4M(&LWF&dj=DSb`K^V(j026Tb2%c=Cd$&Fiw!J+j8-?geGx6V7Dt==Z9Y0l4 z_vU)6mI@4$Jj|D3G!)!RjBGlpJ<38{VY{rQt-D zK{h}}(KFwtnKfN|1MX1f>|=O*?>|W=fRh>#{EtAiG1&bG3e&a)j4wEV6HU)E)j1TT zRM8f;e_sI0FG~FPNif_dB4SVAQ>>A#EXPR8wvtms!Ru%?) ztZf$NUa`tE%20`w5KdC=Y5>>GtrSepS(Hv_%j0kTPAm4>$)d71N|rzWbk`7-G;!8J za~&t~97qy@D9bu?s@f8VH|;9;Ybi@$apvJ1htOY~AWy~PgX@krW?j@MaYP6;zkDf# zO`k&WgM;jJcK(N#;T^LkVn29%!V9pu35Rp~8#bgJ;P9CQ=|G}+9gqh{9Lrd`8zT|E)yTJ&baEvheZn-{E_Rcr}`dW_z!EP)YdPSs7o$g@H;HS_e0&>t0@;?f79Wm7icCHi;-lqH27s@MD{Wb`g$< z>>3m6$E@79NpiNqn3^Oa8DjXCBe5`30Vq@(^WyQBDn5>In;dl-yck9M;$?1%kMm3T zxQ8n5%7FnuU?E)n*s2}qtkqxN#F)iN^`&yJPcpOHq|UaQxj>d5q+t+@KnZ$aN{m-l zx#1jDwiT$pX-S)RXdg`pHpRE%(l@519!W~HzNra^+uNU0qlSAY3XJ{PFJ=cNt<4L^ zKl{biAdPMp)776O^@epD$~h37%A@t{tYjs*$F%E{wB)=vED=Ezif7HC#73P}ecamvjbH@Pe}GPG-;xYqTVy8;7u4>E(;*fPjfP>)g zlGQb=+G~}yE%Bo+aWHP1q@|U@B&}WWPsm8k&18?a51v_J3^o(a4@MTBCp#o&26!q+ zT{H*iG|qb{js~1?1IEW^?1LEx(>CQ@#=mHd?cTG>3HQd(4l3C9Zk;KYjrM7P`(2UA zV{P(5ZWKS%Nx6Y-4T(K)C^1+LKh(!7i{j`Q4d3d!`0&?VgV<_2%O_UWEeX65|wde(grbe@3tBaoK<+*W| zYi;~grfbRhexsRl@>W&>jDvV&0x&l*=KR}kyVmZEW`_c2IsEU(SQY0h`IlB1&=WKJ zLpEF2Ts=k2cc09O=!D^*fkuTC)G1H0k1@!@^8tycXZD~f?)6TZgF>gSsu8eoQ*a;= zy@rTP55k7Sk%5WHfras$!1a<8v%24;^i3MY3Vx!*L5TPm_B}T=CeWi07SRyU4oJi` zQ=r*J1LuVC1dppFY^c*GKY3}`q)qZ-25wEB+LE^^v z1gCdW36HyeFfH#o1`K1Ymc`+e{=E0=h1rPLi-Iw8L;*zyDNZ-R$}L2xIn^xBnzLKK z#@$PGc$7&_xA9^chT&j4A{?edl#iu0*^dMub)irj!IE#Qb?ge?(Mw?4KK9_APvYsK zUxSM&g%ezV)$w0X{pzCM5Cu;#m!Z2tcBERj{r$?T;|XreC7xR4cvO-mFm?99LM;^7hF_& zKJ~1fBi+BC`)CyK-Eu~7sF%bPK$-UzFrBp(Ip4HhA>mN_Cip!`k|W)=K<551n9SfW za}MQgH#+v>Owlp_;EVX%NdzhY{q$bKq3Q^wmj3<~z9dW)`}Ka+WyeS@Hdw(k17$>G7G`Asctw zOj*dp?i8?pH8%ZGGj1}*4PEV{36~wr99EaIwx@n<8w2#Kd%;$m^|g8GL$BQJrLJQG z{{)Z`|5=<%jH|hL3^vIs44K6vs}641tKR6wIf84>kUaAan&`5Qyw6&?M_P2X60Fxu z<`bin8EU#m?*tog-a!8=EL1GlIGEj~wR?g`?p-KtW6&*JD1i`Uo-+;=z&VymO4c}F z?wxWA-oTFNvwE$%Mcm@HLh4%#tbF z$9(nCb<^zh4+ienxxZuBRDVK| zb+;%bJZAm?3tYHDCu-%8BpVxVgMOc~7%iKOXRh@-INv3q{3VL^Odnglo$jhjnvep1 z)JBC5vWV!Of&KofJY>hpqknyj`@4=45lGxvWK4HIsnnE2o9-gtxB&Hph+~WFXv@-t z_^B%R;e+mV0ZThekgswET@391^tI5j(M)4rQYt?*_bcCOunuI7ixFZI;N=7F*!!j1 zjHPBLJb04*@h1GzD$XyFwj0xvN~havkS3^WT}OX+!61}x_^b&}!r03;D%+87>ezA& z#Tw&Rd)3QYWnIduq~zmH%cf~f6U4gtT^NwBZ|{WoxoV#AH2R}ErWR3od7L*{n2T2_S@<9N3||qk=4@wFjK*=UZVwW7osFUX1JtGdyi3Tqw(ZQTSkJ(M=ppU zq5r5*Q&HOWnoHjq$);{8UjtDXBSH>0{V8GXZGMg%ZO?f39rz>E8%4I@{C$asF*6mV?H7^Wp9zVnPVqslLRj`FRB%U0 zIh^^%Ckw(agd`+27nNQvdELv+h$QOI2NfT=20I!eM`N6We@HVIEZrgq#}J6AS5y;D zm`LZDn$LP<<@VykOQqgE?#b7f98uZ65j(Ih+BVs)O*^Jc2I!>jT6?&B z#ZHIxN+0{AUqd*Uy@bTn1B^SneCf$W@KZ5z>8u6>Jqb5saSTG)*B)=qWX?m`A_{{; zxTixx_L7|Tq0_JFrF*iYDeuZ%O@z8*@Jt)RCr3qN|H;M2l5!9uu1<;bQET@0r6>mR z8;FEizE@P$E_;+esCx0yRd04#?`pCIC$*E%|HgEY#ew!B`G=<)DQ|r&UFV*^vMQSj znZY&)Vlid9aAkrD6g3R7N&h?OZx;TKw+8ICt+n?TY4*to@@)eUV8k}HN7!#ZHu`V@UcBA_{%ry?t}yc~@Z5?&B&4nj zna5c$iS4f8@{*=`Ps%>HvVftlbrXOk45jA7k|-&2nQbghi#hO#z1_SoF`PEf&Bi5O zXEOIk4*d`$b-n2I&eZlF0%$!A(7c9D3m!lRyd+mVsH!%Wnp6h6W%&BZ&y-y5lBwi3 zJ&y`+>dy7B^Q`+xExp~jZYBS@2;{t?@=PWmO?!Vv)i=|@B5QHKR6?hRzaTwD7?)H242;X@SMruJnVJiaKukSLgh$qrPZo-3(d6l zlWMy0SF^I6U!T7c1Pgsd^?EJq`GYnSJBYRz@0uYdeH)U&eWLzKSqrwEOJC_2HC^Z8 z54Jv~eUHKlxP@~_o+5m%XFy1gW4J9V z^>yAcp!eWUPWZiR8Zc^iXm_j1PFFAfv2|(! zXE_efWBj%$D`c!?T@|65B}Gb7cORsP)y#REz)S-AJoXgj*m>^tFI;{$BCYeA@aTT` zne)Sx3>R9RR86>S>`wtQx+CCmk&7o6A8Jf&$kX9ITje_x*kdbAf1LgCATZRjvm?_w z_k*b>{n%A=z&j#GGGZ}(2HEv4iY{$AS)hbO@fu)1Z)!f8l=;E6+?LUKHlp$u)70w2 z9NYtz%b+AU{=xquXM;O#(+SUcgKl&P&nwUQNzKG!e}-HNJWbw|+#J0lwZ8x_=tAhY z{e#Dwk5yBRr98pgFo7$#dy~h~q7ZK2C9&&5q-V$;?QNdzhB*g)ccxa~gjsbsyS*hVZi zj!@Pi9cjH|d`*({xSG-H%sti;w@mu9#{OXPY~Q>n z-lMn1%6pv&?A8&-zdt_v30ct|Cx59#&j3~rCtHSfR{(MfIRMyL|UrEl0JzxW{OV3wK@4kqV8 z75oL(=I{$IA5?v>@KQz10CvqO_dyj~gK2xG@ApFAJ&`%;^&tzm$4#Q+>4%q!c0hgX zHTMs9wU{(pipyBQweu|Eb~y7T3#*xrvhq~E(Y8|$u5SUfqx^T~%8 zt^e2FS%+28eewQK0@97Ngn%?iACL}_R8l&myO9RzkdO}PlzkBU9v)7&jq&An0&M)BcyV%-suB=nam8x@|ZI5&hXr8yW z8$MR50sdlw>l~j}`LX-q&E@sp53dgb9q3|b01IV8`_ZnlQTl*PYDYE2tKAKac*Q*? zz}W+-4vAdS;HuF3Eb&R9@%m({B!}EybHw-f1F4oz=77b05t;is^#?lJ{m|k;`tg3j2vQ zFspMo$*UF2`=0S=%GEj)SS2LrKfBWXy@-=+L(_`nu31hjNb0kG&M2dv8z2&4}V1GFI`=EnX z8$wv1fp1>8z+X8S+ZtOknH%UE>o6Ic>lhlaFH#le zgq!}~gf&bF9H49!#Dzdb14Qe<53q)U(m?1}8jf_Kb2AnpT1lwdfU10wl#tvbSY7J8#@n(+?=PlD4EhCs?_aw)ze4+J7drY>g zR(Vk*VmQKt7u=oJLt#IM>53~97g}ANx^Q(RRa1M4&&W9IzrXKDtgJk~ux){nlG;q1 zJ!vYX${4$_zHVC6c!|x(^f>8gk@ws-lzXo(CeEj_6@f+oI})0L4-6)WAs*j8J|8(I z;z*P>RFSHJvsK0FGxp+E!NNAB)j>!%s8k~snXqBd)NH!Ou&yoft1NAp0vI%Vawzf# zXJ<=fZ7~HAJ@-3R%bx5$jpB~;VSmS=!kOglNzl(X759(lG@5v`_(jID+4vOg2``|<%oQj41uYexR1EsHY)XxlD@FT< z3^y`J6!#Q_a<54mZ+Br;-tWTImejbYT!|hg=lR&GE>4hn49u-CLXzYkdD`W&!iQ$ zemCoB>Rze5K5BN4v8?>Vb*K#0@pJSYI*nK%Y++9S42d&LE24Dko)emc(~tcug%%HN zSm4ilSbST&q@G37WpX^d z?)BH3btKH)w%1&k&*FS=Q{Z7|yiM@SS7f1Tg$FvEGsm2>C6iF%0b8=@kxVJfCzBJx zy`u^Do)IrHBNok~rG0H-q+mz-onM^JPhy@a=J0v+QFIy+AAIC$pj=Z1+QvY%zc_L* zDhr1VC3`T5$aM}A1GbN=^SdSHv839eZ}!NBN1x@B^6Sxd9({&?Pjx<;iKhz-1Pga2IR?D!yl3-pmvEbBN&2pJk>9NCekK-k@QB+K4p~UHTm|_rYJ$t} zekzxDVx8tvTp^kf|p_#Ni^qXh+xq`_#E_bExcNQD)ev=M` zX0(jq)tfJUA5AedWFyPORqSXgMHcXJ0N*o<&sLk%jQ^r$3d`r|-(_%LbERUBP^Rt#$Kplk2MZ}?xCRZAhaY!N z*I;^_?H)HbioZG}AJB#BS{)^s!o#y~{6ZL-k7$>%p-~!Qdt$B>eJ?*vbwGRs)6K`Z z+%EG&8TSXd$Y7x`*0>{ZZ;Ua$yHO6xvpC*jx-Tq}eYRj@aEDAWPDt*D)3>QHZ75HU zMdL3p#7Sqv2Q^_NHt#c%dl0C@#Az1zoZ8I{N>?X_gN9uKklqg>_gnBo3q&DWv8YeS zqNrMyA_wrJt~x+}Vtf12;*JPuB~*XWYE9FZb}aPHO_+x5+NQZ2e@~iO{CSFY#1Q@z z;4RT21!=`_hQBASaikX7V404Id!IRcJkI)kyls3J{k;BV`iEDVq>Ah*Bq_d%@ms;y z&lyy0*=3`k*`HHtAQAP(ph&R_QpZt~?*N3CDEK;F5vAIf}5Ij)R7&MS3L zC)R8!c-4$})9B*E^q@IyXq@F?>5Yr9YInQKEBq1*Hl6w1=;>e-S!7@_DNNCu3FQc2 zy$B|>;Qp@bDY$?M1`5wa33M>nZd?j;ClZf88IeTemxrqDZ1%V<24 zz;2?>^)73EX^?cUlRfvfZL=BxdkxwQ%Dc{n7n#WT8vCGvq)e`{f3%faqv$C;dK z>Rfy@8=|ZW#a1oeXiCPB)>hl`o26WMWf9RnyvU8^q^%l6b$Ym~cwZk0wn<)uvKc#B zPr#&pNyoOf(sUZuTak)y!3c!`*IZ0we0P;EGD)F-OiXg@38nTm$GU0$7{1j4C`I>s*L-J+)4Dq5)VT2K?Fi(4_ig>ZZ35fOhvwY zSK{|JK7L&|ci#=T@Sgo*L;hf-f;!*Pr3&;mV|B#_mQ>&i5qd6RBfN@_mNJUFx3*H{ zRH?@sxWm7EN>$aDQ$I(FW^kU^-|M{}OsqUE8bQ8Lk?Xv>^vMmLoAEpM8r0Vpqn8Fm zN1xpy^sQgdJm;cgjkYb^uyGxvFg90=?R71E$SsW8_KEMDuUXoV=0TM3$@c3-`d&xt z_{k>@*6~|C^)(H_eP(`@!F}f5(^Sc_q_LB7$hAlB^4E-;%qBUW_Yu#<+CAQ-94~>E zJ@B7;8PU1K(jxc#aj__2zEH z(u=oI)`?0;&-$mp*jW8i?KslP_LBjWqgL}&A5&|ka`DJb(+cDR%JE_& zR9L)?we}3A4ybYDKvxIFJ~U+BK`N=L1wW!M{!!r3L&`psMma^h>B>v{Cj#*(&CN;< z^~f|A1BTUpXx?1X+PQz-)hqL?GTpovdte0Xuz1?v6wrMSiNt#xOTRXy|3e|3Lf$HRdcC@#76# zGV-mlO*QTJax%XAu>6vrcf*`7?NTnF#YJ(n45+)2EDKi- zW7Q=`B~~ufpVBV+Sz88#<4?NfZ+TC=c+PUl@2&Ur6WNKm)KE2zY~Et5*7~)WYpDOA zh>yKz3blFQCoY2_7~vS9InVJBFT^aA&QZ#_0Da|BK5@3`aJ(Ku@P%#>4^8mscS(mD z$rsFlyPJZn+%vQ9BpsXXIu4rTF3V_!LIHsVB*t*@&TL?m_Dt54&OF8MFmEGPocpYIwR` zs%`}HUXG{2C>qo3?@J`z>zNdK$ffB$HY}s#YF~5J2aP<+!#&B6NSchKf!9ZWu>PzOA>0;{_x)nlaqG?nX9-xH8D{}^V?5-Az% z_6hu8vqr$Q`+Xc&_0Qd;ox|7Dj0!mVkMA=Tx%+XtLAib|d$M^qo%Eg(d9Ih^P-4^f z2f~jpfUDi>YZ%bY73$AO(@{*NKM;sCHGp|4h><4izmevo&2$4!)6Ua5uZ&k>U+`p; zJZh$%m~}5vC9Ah#Qtfey=2L#{_;!Idw7z6_#?iR`;s8WOE8xrEECmjAi$MSE@8eUh zw{Sk!#KgM(fVQBb=NNv2*MN-b6!^aMQ!@`MXN6!A?_FTj8Hw!DChE{ibw8yfa^PJDN# z$0Dy#$O_JDxPlgnTiHE(E5|Yn@w0WDiTR*=HuxFKDCo*~Twp!B^y0)lwwUd(+bv3f zVDreh-p}$ifxqF}CSMBQ$UdDm;*I$%sZZjjlYk5IZ?d|&2{7%CAwUq5m zn_SU+v$Zrj-XP;XrDeY=4BAp1Cl6%)hUUEE0Cwt(5|;hMI>XgqJ9S(|miKd^!JQ>> zG9%Wk4U(;?EguxkB^qE|112n^i*e6kX3VGIV>8h4(^v9oSluU1axTAxiw!fQxN`&* zh=&n6mwm0n{U{cw|2RzNN!@A}$;D~a?8lW2ml)X;p0_FaB}nWy;ievX^QJX{Um7k? z3>~~0cAwvS=p31?-XasH(i}RO`7V?kAl#HkVL?<+r~|^y^&}V%w-3YVH{mAdTOiyN zjKDFNGrmWiS)oQWvQc03l{Z_e9X?!7%?-XvT6xdNbKd%C!A@7orucn(B9iWkvw@GW z6u@!Y-Wb?#r8F{o1$Ltt+Y0Y>prvM4wv^f@`#HZ98Dt#UFlDgQ7!3-T-s8$19amdE z@h$~*A8eQcJ-3CW@k|Zt1;u=vX0enhk*V9Ut_?cdYx5voR*VrO><<-ZK{hCy4nUHh z#WU=vPW%m~44P7TPoek-tq+Ygf@eXP=er!Dfur@(@?iutG1qdUfuXvI=^f;AEAqO= zX3wH0UJ0f-b_(vjQkWHpml|fcY<3$R1tL({;D)C9AkBAk!K`->{9e9svCV7Jc<}6z z-v(Gf)kQH|1&$e2*FCMcOK}H>1SKeiRYR!PZY?g?m+(lxC+MWMS(f#$bL4A~5)tv{t z;&~s4KqdL{1~2R|UA97i2=poVzX(+9kzI)n<&X)YRMT@2R;~~(Mp?G#aif@JNd~z6 zO!}fIk(Ryjp#ZGSsk)}@$Z&-;5k|2q;s?%gi~ z1|feV=UMD<@>F713y{!s>J~3-376x;V{yJZq}R5VSBzzLiNsNOB$@x@^XmSja@dS4 z`n?X5$NXn59~G{BKkzi-4uQY(d%TR$u_pdFq)XeD5-x+Px|LhU7=$dDBg)`S>ajw+ zT+?It4nBG=Z<{G2;MuWgoy5bf>|xbXf!daQMsau|Dbs?wr-u8Av}-o#ZYx{I7aWP{ zzUcm-f!B+o3C*1b58gI(8bn6SEq;HY{*tb+y5>tvjmFUFg>^hir=0om5sn+5oLRRQ zpDibXJ_Ul?B-=MRCHg*u#X;LgqaHKoK^Nbllqc;v1$^sk3{RP*%eNYu`Xj|?aP%i7 zk(sPz>y9VQ2ip002LhRK!_U?=Vr=KFJ-Pk9%1X;(&SwhAt2y+NFlv)@fvL`0?iD-d ztr$hhy)?6he<@IuIMrjL#Hq^Y=957(0q5VI!lJf~mfzgguFLI}<0=N*Vw#=I`Bk@n zO6}=@g|1qRB5}Hj3}S>J!Q@Ns7+!<^;r<+}2X78GNsjmOYuevBByP(R90g8&of&aK zt%nI;;G>L}iL&lLL*Bo`CXk4}nfo5mgKFlQw3SQp0M?GZeJBNI@(7*W>hrf`r^|YC z5np}pjU`?rTQ%sMAnjE{PSe$9RM9aC|$yNUKJdMbJClK863 zeAGe);#T4|n$Bv9Xb;xriGArsOa&Rgr7Utt%hNu7{T`v3O=M@h?i}c`Ymwrs0WlKE{ifU4t>2YS8qtOhgQ!@N0V*33s?S91zT3R z+-J~ENVp0Iep{?nnr3nwtX0+66aHw_3QVoCYQi(Qc5a$%p`0Kx*ExbhUvp)^ZFNj% zLp*4K-J`kIUA8#Eto+RXh2=N6f~MAn4QI<}c}K*SibulZI@|f??fp#xjth)LG{jX4 z*!{LJqb0mh6^asv^c!8G{l=>FI(eQOJhXcTYU=fRbFOfYBk+g%Rm}L5=1+@|W}&JF zT3lS6zDtkCNcZ1mkgncp;UqBhV&%PW+GvQWSuDf9aR&%WyZ#AEVFc6ActsUa41+gw z_75ye{6=;~Un(3gUDrD{IFzWIRV2QBwLd*TaZkU4lrNHBv-BXz|5DzvJY20D8_OO2VT(#S^L- zDj(zUJ-CfmoLO;)wSKWM-tUXpiOK66a<#0r={?WwcJ<%Rn+LAO9{0)3SW_>Z=ImqL zvH0YaV$1r%xN3V$4QK9wyr{YeK@ohm1O;!lfl0)wQw%Y?sJ>%P zD)KOF=jzo5pEL%l-~!6NVUw`O^zAt0ffOxwpd@Q#NTr+FXFCMiMkUUl9*0ihhQ04+ zW7s*rOrzX9YiAoFRnzcLDDYAMe(`4OY$-j`EG~j2ZS;^@dHnSyL-u1Z+a>T*PHLV! z^g$Gon9_TFm&ayztuH%2`k^cOAv(Q`^Hk~V$|B|3 zLYZPB*>;6ivP_M%*Ga#Z7jpr+-;jj9gUK|B*qyj^QZ97naUQf)RGPYgtK8f!uY^Df zS6Ei(y(V7w7Qv#!ZisO8d}U-F4TxJI1g~R@gk=f9)Djl(zZf6{D1A#kIU7qWTP8hA z8-ts;l`I_=isl{Y=j;=3clH0p%{NjIm;^$8y#sSZiabL+DVbm|v`E6STmjXZpxbVd z&{3miAo(V)?(|r1c}m(7r9RL_HnrEVXh)Oh1z7lLS3OFBAr4&&ZE>h6=ax=0gQaSO z91p{L#}XZCiLD~%Ym4{Za{O(KXCMreOm7KBL>!JS3>JieC>LLu?0eiqf$*fffzP{Q z;PX=Skz6$u>1LsxFvx#rD?!GJXe6&pc(Z_Se#fY@RR|sxtJsj;W1qZ(@$yhmi7_d; z_1U|4&FMycQ}%$UbE^2>iQ~&ct!0kf>xAo*v#$QzQ@X zja$lbsmsD4KJ*qLO-w!*!#f`4PnC*F4WHsZq~<#0-w^RF2tp@_40=Fz+2`e9FK9uB zwViH_P#3SfZ=m}A!QL%45`P<<*dN2o;;KpFGd=8mQ0R^b9kxzJJnmH4MT6K z-xbTWggIZ;GOWg0)E%9=FvnlEX%EBn}hW_A={S z^^^sXd+<(Z!b1hoc?x@K;|-y4k@&|f=0@Stb9?X)h=c;Vj93q&wy^NO>D+_z!FevO z#ei3C_ZGZ7IRfr2cm5v7XS$bsH{nS7A%_3h;W_dp^(^;NH?eWPv-r5mQ&>jqA{ndU zaC5G;X+{F4*&*+3-?7l$ORZg1QTM^*v~X8n3mL~x2l1{QPu_gTcJ6n^q8nPE*j1UK zFL4A`6D)3KvKyBSH{uH}$NNv;Tdu;Iu$XTf&xq*js=T*p6_gW>=>h2RPo)M;cQW5B zgKY#Rtk8c|s*aV_|Ci}cnI16}T^Z5r<7ypD@JFG_&@ zbL)qd-tHw(gh}0V&7y%r_wcD(Fn#5!NHYfv40ViD?@F0$<|^gJo0eyy#=gYZI8|rH zH;rKutSuQevJ-Z4c*nJ?Rt1Cnu%rC#xt3g!YU?L{8P0o{VHvdaY?8zs@-=wyst@2Y zP=&)SVcDiOYAM2@Z82W^e=usx^~E6XvVF)Pvfxfp2d$=0m)17HrB+*x!<>Usx(K&F zir5pPM&oqggTwCq(BJiLxrzJ-*7AW4L=DeSq0fq&3gAb)(W2BAF?VQOO;mJd znmuQ?&lZr}6$93exlZz|Ft=vFX2Xk_VhKO)@+0v|Zop}N zv{0oi<%!p}j`Xri_~QM-bl(npb-=7a-i{VuM=kGr*hart#;WM@=j@KF{yeDf8Q<7z z(eI2s|A6M27Q;O+au+VME-z>+<%mv|6)J{sfn#}i4ZOdk(aNS_^wr=yO-Ntf1^C3r z`m*BQ5EC=FX#746jL>z!G9pjFnVNX~&On5tPzZb^MPuJaArv$KpiD zVDt{AOb<;2kbJOtGsbg$&+wNtS35;od|8sfNb9S%Ot^Uz6DC&CncAYxYIApaDUoH;$ z1E>B|VuqF8v_pAe_YrT)+_p5`l4m=a5t=Wbn_HPuFSvmx{mt?*NUA8do!AmG+OK+ z|2Y{bXa>;F+mm$Nd*Kg(lq&?_-sFEviGKDi&>UThn zN?Ror0M`V3)qg9q{sZU%IXPN324=QQj5qt+C$>5f!Ddi{Kup?DAk1Gr69lRSQse$j z4w&1bJ~bRf_MKNRTRZ|8?F{W#xT$JWlk#+K>7BP2{^zTvBfK-upB zANnKR^7P9$1lyDQAvXzF$v~>me@hJiD-Vj+55&KQ__aO|jiO1+ zDjN=9U*s=UgGdZ-kKd{RFh~HE>?aO*C!_m=_;3CG<^8Xg z5NX%QgY{x4AdsCPV6oq5B6>e)Kg##-krR@|zIr)*cLe0&1~mNdm{u#u7%oT{7i_#w zaX@K~C2nIZ?IB~hAz_MZG1PF#L7@J45a_>WYW!Cb2iTk@kuQ1lq-hy2X+E{1?t6NF2DlB(_bUt62lnA-|Ug1`P^wz1SgfwBWBb zVSv6W;&Gev0P8Ot4oIBI*S4x|Kv{&iZ*z2L{=$K%=2teyOyfXOt%t>J`{1(ug#%H} z@21oQYiU6s?1S6op;G$`2cn*{$5Bxx0iVtREaUy%&bYpiIjj)%TzgcTfAb`aKRML? zf8jvXb96mU8}QN&+3 z5cPZMe>RI;X?!9SX_$eX1%_(gB3kRZ}yXKcf=K;TQnG_Fp&<_5AmG#eM$^2cn*R&txLg06W_PzV-KdL7)AF15wYc+)MX+fbk1o z@-}Ds>MtCKdakY~2+#+{Q-8hN!}~NEH01FDlAC9agH1ocR>Ws}^YRMBsTZzhn9|AY&l5clLwAjToRb#X$P{ z@0fZW$QX#tT@~uLCJuC|7eILMJ0?IMG6rI6XSqnm;{uT{HqaY>$K0`ojDgtLG#?ey zaDW)~As|4q-y+Lr4nHurbJSZSAAUdVr=Xib+Kp-$9!q2w-G2?T)8o%FB|MhefmS0c*-~IL5 mfZuO){tBpO`vvgdZBIEVxSK^gAU@z<3oynIaRC7a=>GtsAay?g literal 0 HcmV?d00001 From db18d80dc8eb33c2a2d219f85f6be160323e107a Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Mon, 7 Sep 2026 17:17:14 +0200 Subject: [PATCH 06/13] Add the .NET 10 port of the Cosmos DB for MongoDB web app sample MongoDB.Driver store keeping the {_id, username, activity, timestamp} documents, md5 ids and the three indexes of the Python sample, created once at startup instead of on every operation; artifacts switch to DOTNETCORE|10.0 with a source zip for the Oryx build, dotnet_version in Terraform and 'dotnetcore' in Bicep. call-web-app.sh probes container port 8000, the port this sample sets through WEBSITES_PORT, instead of 80. Co-Authored-By: Claude Fable 5.1 --- .../dotnet/README.md | 153 +++ .../dotnet/bicep/README.md | 287 ++++++ .../dotnet/bicep/deploy.sh | 156 +++ .../dotnet/bicep/main.bicep | 407 ++++++++ .../dotnet/bicep/main.bicepparam | 11 + .../bicep/modules/app-service-plan.bicep | 154 +++ .../dotnet/bicep/modules/log-analytics.bicep | 45 + .../dotnet/bicep/modules/mongo-db.bicep | 217 ++++ .../bicep/modules/private-dns-zone.bicep | 41 + .../bicep/modules/private-endpoint.bicep | 72 ++ .../bicep/modules/virtual-network.bicep | 239 +++++ .../dotnet/bicep/modules/web-app.bicep | 213 ++++ .../dotnet/images/architecture.png | Bin 0 -> 110103 bytes .../dotnet/images/vacation-planner.png | Bin 0 -> 85690 bytes .../dotnet/scripts/README.md | 271 +++++ .../dotnet/scripts/call-web-app.sh | 198 ++++ .../dotnet/scripts/deploy.sh | 945 ++++++++++++++++++ .../dotnet/scripts/validate.sh | 135 +++ .../dotnet/src/Models/Activity.cs | 4 + .../dotnet/src/Pages/Delete.cshtml | 2 + .../dotnet/src/Pages/Delete.cshtml.cs | 22 + .../dotnet/src/Pages/Index.cshtml | 265 +++++ .../dotnet/src/Pages/Index.cshtml.cs | 46 + .../dotnet/src/Pages/_ViewImports.cshtml | 4 + .../dotnet/src/Program.cs | 31 + .../dotnet/src/Services/ActivityId.cs | 15 + .../dotnet/src/Services/IActivityStore.cs | 21 + .../dotnet/src/Services/MongoActivityStore.cs | 85 ++ .../dotnet/src/Services/MongoOptions.cs | 32 + .../dotnet/src/Services/StoreInitializer.cs | 33 + .../dotnet/src/VacationPlanner.csproj | 11 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/favicon.ico | Bin 0 -> 36791 bytes .../dotnet/src/wwwroot/style.css | 341 +++++++ .../dotnet/terraform/README.md | 291 ++++++ .../dotnet/terraform/deploy.sh | 83 ++ .../dotnet/terraform/main.tf | 192 ++++ .../modules/app_service_plan/main.tf | 25 + .../modules/app_service_plan/outputs.tf | 19 + .../modules/app_service_plan/variables.tf | 42 + .../modules/cosmosdb_mongodb/main.tf | 78 ++ .../modules/cosmosdb_mongodb/outputs.tf | 30 + .../modules/cosmosdb_mongodb/variables.tf | 87 ++ .../terraform/modules/log_analytics/main.tf | 14 + .../terraform/modules/log_analytics/output.tf | 30 + .../modules/log_analytics/variables.tf | 37 + .../terraform/modules/nat_gateway/main.tf | 42 + .../terraform/modules/nat_gateway/output.tf | 14 + .../modules/nat_gateway/variables.tf | 43 + .../modules/network_security_group/main.tf | 53 + .../modules/network_security_group/outputs.tf | 9 + .../network_security_group/variables.tf | 51 + .../modules/private_dns_zone/main.tf | 25 + .../modules/private_dns_zone/outputs.tf | 9 + .../modules/private_dns_zone/variables.tf | 20 + .../modules/private_endpoint/main.tf | 26 + .../modules/private_endpoint/outputs.tf | 19 + .../modules/private_endpoint/variables.tf | 61 ++ .../terraform/modules/storage_account/main.tf | 29 + .../modules/storage_account/outputs.tf | 24 + .../modules/storage_account/variables.tf | 93 ++ .../terraform/modules/virtual_network/main.tf | 55 + .../modules/virtual_network/outputs.tf | 19 + .../modules/virtual_network/variables.tf | 40 + .../dotnet/terraform/modules/web_app/main.tf | 71 ++ .../terraform/modules/web_app/outputs.tf | 24 + .../terraform/modules/web_app/variables.tf | 89 ++ .../dotnet/terraform/outputs.tf | 23 + .../dotnet/terraform/providers.tf | 24 + .../dotnet/terraform/terraform.tfvars | 3 + .../dotnet/terraform/variables.tf | 298 ++++++ .../dotnet/visio/architecture.vsdx | Bin 0 -> 579554 bytes 72 files changed, 6557 insertions(+) create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/README.md create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/README.md create mode 100755 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/deploy.sh create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicepparam create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/app-service-plan.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/log-analytics.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/mongo-db.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-dns-zone.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-endpoint.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/virtual-network.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/web-app.bicep create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/images/architecture.png create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/images/vacation-planner.png create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/README.md create mode 100755 samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/call-web-app.sh create mode 100755 samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/deploy.sh create mode 100755 samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/validate.sh create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Models/Activity.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/ActivityId.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/IActivityStore.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoOptions.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/StoreInitializer.cs create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/appsettings.json create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/wwwroot/favicon.ico create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/src/wwwroot/style.css create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/README.md create mode 100755 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/deploy.sh create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/output.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/output.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/main.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/outputs.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/providers.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/terraform.tfvars create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/variables.tf create mode 100644 samples/web-app-cosmosdb-mongodb-api/dotnet/visio/architecture.vsdx diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/README.md b/samples/web-app-cosmosdb-mongodb-api/dotnet/README.md new file mode 100644 index 0000000..59ee963 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/README.md @@ -0,0 +1,153 @@ +# Azure Web App with Azure CosmosDB for MongoDB + +This sample demonstrates a ASP.NET Core Razor Pages single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` collection of the `sampledb` MongoDB database on an [Azure CosmosDB for MongoDB](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/introduction) account. + +## Architecture + +The following diagram illustrates the architecture of the solution: + +![Architecture Diagram](./images/architecture.png) + +The web app enables users to plan and manage vacation activities, with all data persisted in a CosmosDB-backed MongoDB collection. The solution is composed of the following Azure resources: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Dedicated to [regional VNet integration](https://learn.microsoft.com/azure/azure-functions/functions-networking-options?tabs=azure-portal#outbound-networking-features) with the Function App. + - *pe-subnet*: Used for hosting Azure Private Endpoints. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone): Handles DNS resolution for the CosmosDB for MongoDB Private Endpoint within the virtual network. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview): Secures network access to the CosmosDB for MongoDB account via a private IP within the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Provides deterministic outbound connectivity for the Web App. Included for completeness; the sample app does not call any external services. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): Enforces inbound and outbound traffic rules across the virtual network's subnets. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics from all resources in the solution. +8. [Azure Cosmos DB for MongoDB](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/introduction): A globally distributed database account optimized for MongoDB workloads, with multi-region failover enabled. +9. [MongoDB Database](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/overview): The `sampledb` database that holds all application data. +10. [MongoDB Collection](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/overview): The `activities` collection within `sampledb`, used to store vacation activity records. +11. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +12. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core Razor Pages single-page application (*Vacation Planner*), connected to CosmosDB for MongoDB via VNet integration. +13. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): *(Optional)* Configures continuous deployment from a public GitHub repository. + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/) +- [MongoDB C# Driver](https://www.mongodb.com/docs/drivers/csharp/current/) +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep), if you plan to install the sample via Bicep. +- [Terraform](https://developer.hashicorp.com/terraform/downloads), if you plan to install the sample via Terraform. + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and set it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the image, execute: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator by running: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application to LocalStack for Azure using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All deployment methods have been fully tested against Azure and the LocalStack for Azure local emulator. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process involves downloading and building Docker images. This is a one-time operation—subsequent deployments will be significantly faster. Depending on your internet connection and system resources, this initial setup may take several minutes. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the following user interface for adding and removing activities: + +![Architecture Diagram](./images/vacation-planner.png) + +You can use the `call-web-app.sh` Bash script below to call the web app. The script demonstrates three methods for calling web apps: + +1. **Through the LocalStack for Azure emulator**: Call the web app via the emulator using its default host name. The emulator acts as a proxy to the web app. +2. **Via localhost and host port mapped to the container's port**: Use `127.0.0.1` with the host port mapped to the container's port `80`. +3. **Via container IP address**: Use the app container's IP address on port `80`. This technique is only available when accessing the web app from the Docker host machine. +4. **Via the default hostname**: Call the web app via the default hostname `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## MongoDB Tooling + +You can utilize [MongoDB Compass](https://www.mongodb.com/try/download/compass) to explore and manage your MongoDB databases and collections. Ensure you connect using `mongodb://localhost:port` connection string, where `port` corresponds to the port published by the MongoDB container on the host and mapped to the internal MongoDB port `27017`. + +Alternatively, you can use the [MongoDB Shell](https://www.mongodb.com/docs/mongodb-shell/) to interact with and administer your MongoDB instance, as shown in the following table: + +```bash +~$ mongosh mongodb://localhost:32770 +Current Mongosh Log ID: 6914588406320f60899dc29c +Connecting to: mongodb://localhost:32770/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.5.9 +Using MongoDB: 8.0.15 +Using Mongosh: 2.5.9 + +For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/ + +------ + The server generated these startup warnings when booting + 2025-11-12T09:28:07.726+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem + 2025-11-12T09:28:07.892+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted + 2025-11-12T09:28:07.892+00:00: For customers running the current memory allocator, we suggest changing the contents of the following sysfsFile + 2025-11-12T09:28:07.892+00:00: We suggest setting the contents of sysfsFile to 0. + 2025-11-12T09:28:07.892+00:00: vm.max_map_count is too low + 2025-11-12T09:28:07.892+00:00: We suggest setting swappiness to 0 or 1, as swapping can cause performance problems. +------ + +test> show dbs +admin 100.00 KiB +config 108.00 KiB +local 40.00 KiB +sampledb 180.00 KiB +test> use sampledb +switched to db sampledb +sampledb> show collections +activities +sampledb> db.activities.find().pretty() +[ + { + _id: '39ab62c2aaa0015ed5309876053e4146', + username: 'Paolo', + activity: 'Go to Paris', + timestamp: '2025-11-12T09:31:43.338268' + }, + { + _id: '4fb8f53442d3ebe9167245f9555bac51', + username: 'Paolo', + activity: 'Go to Madrid', + timestamp: '2025-11-12T09:31:50.109456' + }, + { + _id: '84646160cb1db21a7083b4c5b6e2d9d0', + username: 'Paolo', + activity: 'Go to Rome', + timestamp: '2025-11-12T09:32:21.781936' + } +] +``` + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure CosmosDB for MongoDB API](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/introduction) +- [Quickstart: Deploy an ASP.NET web app to Azure App Service](https://learn.microsoft.com/en-us/azure/app-service/quickstart-dotnetcore?pivots=development-environment-cli) +- [Quickstart: CosmosDB for MongoDB](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/quickstart-dotnet) +- [Azure Identity client library for .NET](https://learn.microsoft.com/en-us/dotnet/api/overview/azure/identity-readme) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/README.md b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/README.md new file mode 100644 index 0000000..4ba1684 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/README.md @@ -0,0 +1,287 @@ +# Bicep Deployment + +This directory contains the Bicep template and a deployment script for provisioning Azure services in LocalStack for Azure. For further details about the sample application, refer to the [Azure Web App with Azure CosmosDB for MongoDB](../README.md). + +## Prerequisites + +Before deploying this solution, ensure you have the following tools installed: + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/): Local Azure cloud emulator for development and testing +- [Visual Studio Code](https://code.visualstudio.com/): Code editor installed on one of the [supported platforms](https://code.visualstudio.com/docs/supporting/requirements#_platforms) +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep): VS Code extension for Bicep language support and IntelliSense +- [Docker](https://docs.docker.com/get-docker/): Container runtime required for LocalStack +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli): Azure command-line interface +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +### Installing lstk CLI + +Deploying to LocalStack requires the `lstk` CLI, which routes Azure CLI commands to the emulator (run `lstk az start-interception` before deploying). Install it using Homebrew: + +```bash +brew install localstack/tap/lstk +``` + +or npm: + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). For more information, see the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +## Architecture Overview + +The [deploy.sh](deploy.sh) script creates the [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli) for all the Azure resources, while the Bicep modules create the following Azure resources: + +1. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Dedicated to [regional VNet integration](https://learn.microsoft.com/azure/azure-functions/functions-networking-options?tabs=azure-portal#outbound-networking-features) with the Function App. + - *pe-subnet*: Used for hosting Azure Private Endpoints. +2. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone): Handles DNS resolution for the CosmosDB for MongoDB Private Endpoint within the virtual network. +3. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview): Secures network access to the CosmosDB for MongoDB account via a private IP within the VNet. +4. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Provides deterministic outbound connectivity for the Web App. Included for completeness; the sample app does not call any external services. +5. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): Enforces inbound and outbound traffic rules across the virtual network's subnets. +6. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics from all resources in the solution. +7. [Azure Cosmos DB for MongoDB](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/introduction): A globally distributed database account optimized for MongoDB workloads, with multi-region failover enabled. +8. [MongoDB Database](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/overview): The `sampledb` database that holds all application data. +9. [MongoDB Collection](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/overview): The `activities` collection within `sampledb`, used to store vacation activity records. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the ASP.NET Core Razor Pages single-page application (*Vacation Planner*), connected to CosmosDB for MongoDB via VNet integration. +12. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): *(Optional)* Configures continuous deployment from a public GitHub repository. + +The web app enables users to plan and manage vacation activities, with all data persisted in a CosmosDB-backed MongoDB collection. For more information on the sample application, see [Azure Web App with Azure CosmosDB for MongoDB](../README.md). + +## Configuration + +Before deploying the `main.bicep` template, update the `bicep.bicepparam` file with your specific values: + +```bicep +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param databaseName = 'sampledb' +param collectionName = 'activities' +param username = 'paolo' +param primaryRegion = 'westeurope' +param secondaryRegion = 'northeurope' +``` + +## Provisioning Scripts + +See [deploy.sh](deploy.sh) for the complete deployment automation. The script performs: + +- Detects environment (LocalStack vs Azure Cloud) and uses appropriate CLI +- Creates resource group if it doesn't exist +- Optionally validates the Bicep template +- Optionally runs what-if deployment for preview +- Deploys the main.bicep template with parameters from [main.bicepparam](main.bicepparam) +- Extracts deployment outputs (Web App name, CosmosDB details) +- Creates zip package of the ASP.NET Core application source +- Deploys the zip to Azure Web App + +## Deployment + +You can set up the Azure emulator by utilizing LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `bicep` folder: + +```bash +cd samples/web-app-cosmosdb-mongodb-api/dotnet/bicep +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +Once the deployment completes, run the [validate.sh](../scripts/validate.sh) script to confirm that all resources were provisioned and configured as expected: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEBAPP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.mongo.cosmos.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mongodb-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEBAPP_NAME="${PREFIX}-webapp-${SUFFIX}" +COSMOSDB_ACCOUNT_NAME="${PREFIX}-mongodb-${SUFFIX}" +MONGODB_DATABASE_NAME="sampledb" +COLLECTION_NAME="activities" +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEBAPP_NAME] web app:\n" +az webapp show \ + --name "$WEBAPP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Azure CosmosDB account +echo -e "\n[$COSMOSDB_ACCOUNT_NAME] cosmosdb account:\n" +az cosmosdb show \ + --name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,DocumentEndpoint:documentEndpoint}' \ + --output table \ + --only-show-errors + +# Check MongoDB database +echo -e "\n[$MONGODB_DATABASE_NAME] mongodb database:\n" +az cosmosdb mongodb database show \ + --name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check MongoDB collection +echo -e "\n[$COLLECTION_NAME] mongodb collection:\n" +az cosmosdb mongodb collection show \ + --name "$COLLECTION_NAME" \ + --database-name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEBAPP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEBAPP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure Bicep Documentation](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/) +- [Bicep Language Reference](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-functions) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/deploy.sh b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/deploy.sh new file mode 100755 index 0000000..cd7172f --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/deploy.sh @@ -0,0 +1,156 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +TEMPLATE="main.bicep" +PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOCATION="westeurope" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1> /dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + --query 'properties.outputs' -o json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + WEB_APP_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.webAppName.value') + ACCOUNT_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.accountName.value') + DATABASE_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.databaseName.value') + COLLECTION_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.collectionName.value') + DOCUMENT_ENDPOINT=$(echo "$DEPLOYMENT_JSON" | jq -r '.documentEndpoint.value') + echo "Deployment details:" + echo "Web App Name: $WEB_APP_NAME" + echo "Database Account Name: $ACCOUNT_NAME" + echo "Database Name: $DATABASE_NAME" + echo "Collection Name: $COLLECTION_NAME" + echo "Document Endpoint: $DOCUMENT_ENDPOINT" +else + echo "Failed to deploy Bicep template [$TEMPLATE]" + exit 1 +fi + +if [[ -z "$WEB_APP_NAME" || -z "$ACCOUNT_NAME" ]]; then + echo "Web App Name or Cosmos DB Account Name is empty. Exiting." + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicep new file mode 100644 index 0000000..ef4e9d4 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicep @@ -0,0 +1,407 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'dotnetcore' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the primary replica region for the Cosmos DB account.') +param primaryRegion string = 'westeurope' + +@description('Specifies the secondary replica region for the Cosmos DB account.') +param secondaryRegion string = 'northeurope' + +@allowed([ + 'Eventual' + 'ConsistentPrefix' + 'Session' + 'BoundedStaleness' + 'Strong' +]) +@description('Specifies the default consistency level of the Cosmos DB account.') +param defaultConsistencyLevel string = 'Eventual' + +@allowed([ + '3.2' + '3.6' + '4.0' + '4.2' + '5.0' + '6.0' + '7.0' + '8.0' +]) + + +@description('Specifies the Cosmos DB server version to use.') +param serverVersion string = '7.0' + +@minValue(10) +@maxValue(2147483647) +@description('Specifies the max stale requests. Required for BoundedStaleness. Valid ranges, Single Region: 10 to 2147483647. Multi Region: 100000 to 2147483647.') +param maxStalenessPrefix int = 100000 + +@minValue(5) +@maxValue(86400) +@description('Specifies the max lag time (seconds). Required for BoundedStaleness. Valid ranges, Single Region: 5 to 84600. Multi Region: 300 to 86400.') +param maxIntervalInSeconds int = 300 + +@description('Specifies the name for the Mongo DB database.') +param databaseName string = 'sampledb' + +@minValue(400) +@maxValue(1000000) +@description('Specifies the shared throughput for the Mongo DB database, up to 25 collections.') +param sharedThroughput int = 400 + +@description('Specifies the name for the Mongo DB collection.') +param collectionName string = 'activities' + +@minValue(400) +@maxValue(1000000) +@description('Specifies the dedicated throughput for the Mongo DB collection.') +param dedicatedThroughput int = 400 + +@description('Specifies a list of field names for which to create single-field indexes on the MongoDB collection.') +param mongoDbIndexKeys array = ['_id','username', 'activity', 'timestamp'] + +@description('Specifies the username for the application.') +param username string = 'paolo' + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string = '' + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'app-subnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetNsgName string = '' + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string = '' + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the name of the private endpoint to the Azure CosmosDB for MongoDB API account.') +param cosmosDbPrivateEndpointName string = '' + +@description('Specifies the name of the Azure Log Analytics resource.') +param logAnalyticsName string = '' + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param logAnalyticsSku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param logAnalyticsRetentionInDays int = 60 + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +//******************************************** +// Variables +//******************************************** +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var accountName = '${prefix}-mongodb-${suffix}' +var privateDnsZoneName = 'privatelink.mongo.cosmos.azure.com' + +//******************************************** +// Modules and Resources +//******************************************** +module workspace 'modules/log-analytics.bicep' = { + name: 'workspace' + params: { + // properties + name: empty(logAnalyticsName) ? toLower('${prefix}-log-analytics-${suffix}') : logAnalyticsName + location: location + tags: tags + sku: logAnalyticsSku + retentionInDays: logAnalyticsRetentionInDays + } +} + +module mongoDb 'modules/mongo-db.bicep' = { + name: 'mongoDb' + params: { + name: accountName + location: location + primaryRegion: primaryRegion + secondaryRegion: secondaryRegion + defaultConsistencyLevel: defaultConsistencyLevel + serverVersion: serverVersion + maxStalenessPrefix: maxStalenessPrefix + maxIntervalInSeconds: maxIntervalInSeconds + databaseName: databaseName + sharedThroughput: sharedThroughput + collectionName: collectionName + dedicatedThroughput: dedicatedThroughput + mongoDbIndexKeys: mongoDbIndexKeys + workspaceId: workspace.outputs.id + tags: tags + } +} + +module network 'modules/virtual-network.bicep' = { + name: 'network' + params: { + virtualNetworkName: empty(virtualNetworkName) ? toLower('${prefix}-vnet-${suffix}') : virtualNetworkName + virtualNetworkAddressPrefixes: virtualNetworkAddressPrefixes + webAppSubnetName: webAppSubnetName + webAppSubnetAddressPrefix: webAppSubnetAddressPrefix + webAppSubnetNsgName: empty(webAppSubnetNsgName) ? toLower('${prefix}-webapp-subnet-nsg-${suffix}') : webAppSubnetNsgName + peSubnetName: peSubnetName + peSubnetAddressPrefix: peSubnetAddressPrefix + peSubnetNsgName: empty(peSubnetNsgName) ? toLower('${prefix}-pe-subnet-nsg-${suffix}') : peSubnetNsgName + natGatewayName: empty(natGatewayName) ? toLower('${prefix}-nat-gateway-${suffix}') : natGatewayName + natGatewayZones: natGatewayZones + natGatewayPublicIpPrefixName: toLower('${prefix}-nat-gateway-pip-prefix-${suffix}') + natGatewayPublicIpPrefixLength: natGatewayPublicIpPrefixLength + natGatewayIdleTimeoutMins: natGatewayIdleTimeoutMins + delegationServiceName: skuTier == 'FlexConsumption' ? 'Microsoft.App/environments' : 'Microsoft.Web/serverfarms' + workspaceId: workspace.outputs.id + location: location + tags: tags + } +} + +module privateDnsZone 'modules/private-dns-zone.bicep' = { + name: 'privateDnsZone' + params: { + name: privateDnsZoneName + vnetId: network.outputs.virtualNetworkId + tags: tags + } +} + +module privateEndpoints 'modules/private-endpoint.bicep' = { + name: 'privateEndpoints' + params: { + name: empty(cosmosDbPrivateEndpointName) + ? toLower('${prefix}-mongodb-pe-${suffix}') + : cosmosDbPrivateEndpointName + privateLinkServiceId: mongoDb.outputs.id + privateDnsZoneId: privateDnsZone.outputs.id + vnetId: network.outputs.virtualNetworkId + subnetId: network.outputs.peSubnetId + groupIds: [ + 'mongodb' + ] + location: location + tags: tags + } +} + +module appServicePlan 'modules/app-service-plan.bicep' = { + name: 'appServicePlan' + params: { + name: appServicePlanName + location: location + skuName: skuName + skuTier: skuTier + kind: appServicePlanKind + reserved: reserved + zoneRedundant: zoneRedundant + workspaceId: workspace.outputs.id + tags: tags + } +} + +module webApp 'modules/web-app.bicep' = { + name: webAppName + params: { + name: webAppName + location: location + kind: webAppKind + httpsOnly: httpsOnly + runtimeName: runtimeName + runtimeVersion: runtimeVersion + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + repoUrl: repoUrl + virtualNetworkName: network.outputs.virtualNetworkName + subnetName: network.outputs.webAppSubnetName + hostingPlanName: appServicePlan.outputs.name + accountName: mongoDb.outputs.name + databaseName: mongoDb.outputs.databaseName + collectionName: mongoDb.outputs.collectionName + username: username + workspaceId: workspace.outputs.id + tags: tags + } +} + +//******************************************** +// Outputs +//******************************************** +output webAppName string = webApp.outputs.name +output accountName string = mongoDb.outputs.name +output databaseName string = mongoDb.outputs.databaseName +output collectionName string = collectionName +output documentEndpoint string = mongoDb.outputs.documentEndpoint diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicepparam b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicepparam new file mode 100644 index 0000000..aac557d --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/main.bicepparam @@ -0,0 +1,11 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param databaseName = 'sampledb' +param collectionName = 'activities' +param username = 'paolo' +param primaryRegion = 'westeurope' +param secondaryRegion = 'northeurope' diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/app-service-plan.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/app-service-plan.bicep new file mode 100644 index 0000000..4b5cfb3 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/app-service-plan.bicep @@ -0,0 +1,154 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the App Service Plan.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param kind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** + +var diagnosticSettingsName = 'default' +var logCategories = [] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: name + location: location + tags: tags + kind: kind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: zoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: appServicePlan + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = appServicePlan.id +output name string = appServicePlan.name diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/log-analytics.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/log-analytics.bicep new file mode 100644 index 0000000..2618829 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/log-analytics.bicep @@ -0,0 +1,45 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Log Analytics workspace.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param sku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param retentionInDays int = 60 + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** +resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' = { + name: name + tags: tags + location: location + properties: { + sku: { + name: sku + } + retentionInDays: retentionInDays + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = workspace.id +output name string = workspace.name +output customerId string = workspace.properties.customerId diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/mongo-db.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/mongo-db.bicep new file mode 100644 index 0000000..b95aef4 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/mongo-db.bicep @@ -0,0 +1,217 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies a globally unique name the Azure Web App.') +param name string + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the name for the Mongo DB database.') +param databaseName string = 'sampledb' + +@minValue(400) +@maxValue(1000000) +@description('Specifies the shared throughput for the Mongo DB database, up to 25 collections.') +param sharedThroughput int = 400 + +@description('Specifies the name for the Mongo DB collection.') +param collectionName string = 'activities' + +@minValue(400) +@maxValue(1000000) +@description('Specifies the dedicated throughput for the Mongo DB collection.') +param dedicatedThroughput int = 400 + +@description('Specifies a list of field names for which to create single-field indexes on the MongoDB collection.') +param mongoDbIndexKeys array = ['_id','username', 'activity', 'timestamp'] + +@description('Specifies the primary replica region for the Cosmos DB account.') +param primaryRegion string = 'westeurope' + +@description('Specifies the secondary replica region for the Cosmos DB account.') +param secondaryRegion string = 'northeurope' + +@allowed([ + 'Eventual' + 'ConsistentPrefix' + 'Session' + 'BoundedStaleness' + 'Strong' +]) +@description('Specifies the default consistency level of the Cosmos DB account.') +param defaultConsistencyLevel string = 'Eventual' + +@allowed([ + '3.2' + '3.6' + '4.0' + '4.2' + '5.0' + '6.0' + '7.0' + '8.0' +]) + +@description('Specifies the Cosmos DB server version to use.') +param serverVersion string = '7.0' + +@minValue(10) +@maxValue(2147483647) +@description('Specifies the max stale requests. Required for BoundedStaleness. Valid ranges, Single Region: 10 to 2147483647. Multi Region: 100000 to 2147483647.') +param maxStalenessPrefix int = 100000 + +@minValue(5) +@maxValue(86400) +@description('Specifies the max lag time (seconds). Required for BoundedStaleness. Valid ranges, Single Region: 5 to 84600. Multi Region: 300 to 86400.') +param maxIntervalInSeconds int = 300 + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + + +//******************************************** +// Variables +//******************************************** +var consistencyPolicy = { + Eventual: { + defaultConsistencyLevel: 'Eventual' + } + ConsistentPrefix: { + defaultConsistencyLevel: 'ConsistentPrefix' + } + Session: { + defaultConsistencyLevel: 'Session' + } + BoundedStaleness: { + defaultConsistencyLevel: 'BoundedStaleness' + maxStalenessPrefix: maxStalenessPrefix + maxIntervalInSeconds: maxIntervalInSeconds + } + Strong: { + defaultConsistencyLevel: 'Strong' + } +} +var locations = [ + { + locationName: primaryRegion + failoverPriority: 0 + isZoneRedundant: false + } + { + locationName: secondaryRegion + failoverPriority: 1 + isZoneRedundant: false + } +] +var diagnosticSettingsName = 'default' +var logCategories = [ + 'DataPlaneRequests' + 'MongoRequests' +] +var metricCategories = [ + 'Requests' +] +var logs = [for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var metrics = [for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** +resource account 'Microsoft.DocumentDB/databaseAccounts@2025-04-15' = { + name: toLower(name) + location: location + kind: 'MongoDB' + tags: tags + properties: { + consistencyPolicy: consistencyPolicy[defaultConsistencyLevel] + locations: locations + databaseAccountOfferType: 'Standard' + enableAutomaticFailover: true + apiProperties: { + serverVersion: serverVersion + } + capabilities: [ + { + name: 'DisableRateLimitingResponses' + } + ] + } +} + +resource database 'Microsoft.DocumentDB/databaseAccounts/mongodbDatabases@2025-04-15' = { + parent: account + name: databaseName + tags: tags + properties: { + resource: { + id: databaseName + } + options: { + throughput: sharedThroughput + } + } +} + +resource collection 'Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections@2025-04-15' = { + parent: database + name: collectionName + tags: tags + properties: { + resource: { + id: collectionName + shardKey: { + username: 'Hash' + } + // Use a for loop to dynamically create the 'indexes' array based on the 'mongoDbIndexKeys' parameter + indexes: [for key in mongoDbIndexKeys: { + key: { + keys: [ + key + ] + } + }] + } + options: { + throughput: dedicatedThroughput + } + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { + name: diagnosticSettingsName + scope: account + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = account.id +output name string = account.name +output documentEndpoint string = account.properties.documentEndpoint +output databaseId string = database.id +output databaseName string = database.name +output collectionId string = collection.id +output collectionName string = collection.name diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-dns-zone.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-dns-zone.bicep new file mode 100644 index 0000000..d849259 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-dns-zone.bicep @@ -0,0 +1,41 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private DNS zone.') +param name string + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private DNS Zones +resource privateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = { + name: name + location: 'global' + tags: tags +} + +// Virtual Network Links +resource privateDnsZoneVirtualNetworkLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2024-06-01' = { + parent: privateDnsZone + name: 'link-to-vnet' + location: 'global' + properties: { + registrationEnabled: false + virtualNetwork: { + id: vnetId + } + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateDnsZone.id +output name string = privateDnsZone.name diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-endpoint.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-endpoint.bicep new file mode 100644 index 0000000..8fd35b8 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/private-endpoint.bicep @@ -0,0 +1,72 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private endpoint.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource ID of the subnet where private endpoints will be created.') +param subnetId string + +@description('Specifies the group IDs for the private link service connection.') +param groupIds array + +@description('Specifies the resource ID of the target resource.') +param privateLinkServiceId string + +@description('Specifies the resource ID of the private DNS zone.') +param privateDnsZoneId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private Endpoints +resource privateEndpoint 'Microsoft.Network/privateEndpoints@2025-05-01' = { + name: name + location: location + tags: tags + properties: { + privateLinkServiceConnections: [ + { + name: '${name}-pls-connection' + properties: { + privateLinkServiceId: privateLinkServiceId + groupIds: groupIds + } + } + ] + subnet: { + id: subnetId + } + } +} + +resource privateDnsZoneGroupName 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2025-05-01' = { + parent: privateEndpoint + name: 'private-dns-zone-group' + properties: { + privateDnsZoneConfigs: [ + { + name: 'dnsConfig' + properties: { + privateDnsZoneId: privateDnsZoneId + } + } + ] + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateEndpoint.id +output name string = privateEndpoint.name diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/virtual-network.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/virtual-network.bicep new file mode 100644 index 0000000..1c7a088 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/virtual-network.bicep @@ -0,0 +1,239 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'functionAppSubnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet which contains the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the private endpoint to the Azure CosmosDB for MongoDB API account.') +param peSubnetNsgName string = '' + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the name of the public IP prefix for the Azure NAT Gateway.') +param natGatewayPublicIpPrefixName string + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the delegation service name.') +param delegationServiceName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var nsgLogCategories = [ + 'NetworkSecurityGroupEvent' + 'NetworkSecurityGroupRuleCounter' +] +var nsgLogs = [for category in nsgLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetLogCategories = [ + 'VMProtectionAlerts' +] +var vnetMetricCategories = [ + 'AllMetrics' +] +var vnetLogs = [for category in vnetLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetMetrics = [for category in vnetMetricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** + +// Virtual Network +resource vnet 'Microsoft.Network/virtualNetworks@2024-03-01' = { + name: virtualNetworkName + location: location + tags: tags + properties: { + addressSpace: { + addressPrefixes: [ + virtualNetworkAddressPrefixes + ] + } + subnets: [ + { + name: webAppSubnetName + properties: { + addressPrefix: webAppSubnetAddressPrefix + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + networkSecurityGroup: { + id: webAppSubnetNsg.id + } + natGateway: { + id: natGateway.id + } + delegations: [ + { + name: 'delegation' + properties: { + serviceName: delegationServiceName + } + } + ] + } + } + { + name: peSubnetName + properties: { + addressPrefix: peSubnetAddressPrefix + networkSecurityGroup: { + id: peSubnetNsg.id + } + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + natGateway: { + id: natGateway.id + } + } + } + ] + } +} + +resource webAppSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: webAppSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +resource peSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: peSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +// NAT Gateway +resource natGatewayPublicIpPrefix 'Microsoft.Network/publicIPPrefixes@2025-05-01' = { + name: natGatewayPublicIpPrefixName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIPAddressVersion: 'IPv4' + prefixLength: natGatewayPublicIpPrefixLength + } +} + +resource natGateway 'Microsoft.Network/natGateways@2025-05-01' = { + name: natGatewayName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIpPrefixes: [ + { + id: natGatewayPublicIpPrefix.id + } + ] + idleTimeoutInMinutes: natGatewayIdleTimeoutMins + } +} + +resource peSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: peSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource webAppSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webAppSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource vnetDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: vnet + properties: { + workspaceId: workspaceId + logs: vnetLogs + metrics: vnetMetrics + } +} + +//******************************************** +// Outputs +//******************************************** +output virtualNetworkId string = vnet.id +output virtualNetworkName string = vnet.name +output webAppSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, webAppSubnetName) +output webAppSubnetName string = webAppSubnetName +output peSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, peSubnetName) +output peSubnetName string = peSubnetName diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/web-app.bicep b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/web-app.bicep new file mode 100644 index 0000000..dccb5e9 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/bicep/modules/web-app.bicep @@ -0,0 +1,213 @@ +//******************************************** +// Parameters +//******************************************** + +@description('Specifies a globally unique name the Azure Web App.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param kind string = 'app,linux' + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'dotnetcore' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = true + +@description('Specifies the name of the hosting plan.') +param hostingPlanName string + +@description('Specifies the name of the Azure Cosmos DB account.') +param accountName string + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the name of the subnet used by Azure Functions for the regional virtual network integration.') +param subnetName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the name for the Mongo DB database.') +param databaseName string = 'sampledb' + +@description('Specifies the name for the Mongo DB collection.') +param collectionName string = 'activities' + +@description('Specifies the username for the application.') +param username string = 'paolo' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** + +// Generates a unique container name for deployments. +var diagnosticSettingsName = 'default' +var logCategories = [ + 'AppServiceHTTPLogs' + 'AppServiceConsoleLogs' + 'AppServiceAppLogs' + 'AppServiceAuditLogs' + 'AppServiceIPSecAuditLogs' + 'AppServicePlatformLogs' + 'AppServiceAuthenticationLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' existing = { + name: virtualNetworkName +} + +resource subnet 'Microsoft.Network/virtualNetworks/subnets@2024-05-01' existing = { + parent: virtualNetwork + name: subnetName +} + +resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' existing = { + name: hostingPlanName +} + +resource account 'Microsoft.DocumentDB/databaseAccounts@2024-12-01-preview' existing = { + name: toLower(accountName) +} + +resource webApp 'Microsoft.Web/sites@2025-03-01' = { + name: name + location: location + tags: tags + kind: kind + properties: { + httpsOnly: httpsOnly + serverFarmId: hostingPlan.id + virtualNetworkSubnetId: subnet.id + outboundVnetRouting: { + allTraffic: true + } + siteConfig: { + linuxFxVersion: toUpper('${runtimeName}|${runtimeVersion}') + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: 'SystemAssigned' + } +} + + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + COSMOSDB_CONNECTION_STRING: account.listConnectionStrings().connectionStrings[0].connectionString + COSMOSDB_DATABASE_NAME: databaseName + COSMOSDB_COLLECTION_NAME: collectionName + WEBSITES_PORT: '8000' + LOGIN_NAME: username + } +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webApp + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = webApp.id +output name string = webApp.name +output defaultHostName string = webApp.properties.defaultHostName diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/images/architecture.png b/samples/web-app-cosmosdb-mongodb-api/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6e11d5cccd8f0718f2f188899f852175bd2ed5 GIT binary patch literal 110103 zcmcF~byQVd*Y80^1Vp4&N>sYLK|tvS=|;M{L*Ph*bhmVOH%NDPHyl8^@8WsBZ`|+x zcgG#?g>lA)Gxj-q@3rQd^A~gZOG^r&AiYC^Kp-e0!e3+|kf$o(HS^*Lc*l3WzZo2; zY`-em3RvrD+ZtJzzn3>M(}Tzx+P!CBc`vA^^PYhY{6WvkLC3;D$M&9*j-HNgj{les zd=9}@MB*#L?vr<~pQ90E$j*Vc5G{q3Z6FY2^v4(6=z{w#c=MS7p9DC+G!*$(8y*5z zXfE=FPu_8Me*sxd-tM0Fp0T~fvbpmspVn)#h=vtnX0%f3!qfa{_(|5zs_{wDW+QX6 z=Cisvg)hx=k>L%>{QS7O*~0wimWJq@%(z#*+_#C69gx^9H^#AX+{_mfu z#6p6(^W8V~VwhKRQekKfXVT%WSd!@s#X|W+92^7=49+ws&*9Kmaq?w^;I}2*Ldqyn z%`kSG&FO2$dTV1x_sgS|@dJqjmN;%2UfyOeFE3c7Y1Ir(8jmyr10$oETQVdO|M6Q` zr5?IHk9@q=2oo2%Q~0%Yqege@e+hp|@wj(#b8}NyUzo^OG#H52+w+FKgYuWU-#J?$ zLTjm2tE8P!rI57?QE*ubTyiB1pFvDtfSKJ->fm*Kc~`s=9nQa!+kf>ltW6`1Cu{ld zA6$#?1_sE)_!1vfX)t3FCedhP6=3U49h*ZbQYpc!vx7;TI8;hn@?-p{!M!{3O}4Np^;XE-oyrRrL1m&f#!zz}S4gMkc4$bcP|?$lAuHbF8vr#SiUc&AEui41ARs9(f!2wwl{Tq=HYHI3W793F)vsos)-Eph6KmMVe{HQYqf-lU*1&n<|;;-eD zlxhq|J~-Q*Y!2*C%#<4-C%h1e+?8WzmW1}j&}JLA<&Sf({6b7ZAUgNIfbH#x)$e6k zP(iYZ%Iy#!E$2*mb)p+Fn7B_q{BgW|l^&iKE=O&*0c%?Mfu;-n7B|oO$$t0XtjqcG z=a})g9;04u9wGr(FW=b7;^t#Fw+-SvLTui-Hki+~!>l^@H@bZoLCUgAF29LD

({ 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

A%9I;ra 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⁣46^_T- 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 + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `scripts` folder: + +```bash +cd samples/web-app-cosmosdb-mongodb-api/dotnet/scripts +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +Once the deployment completes, run the [validate.sh](../scripts/validate.sh) script to confirm that all resources were provisioned and configured as expected: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEBAPP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.mongo.cosmos.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mongodb-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEBAPP_NAME="${PREFIX}-webapp-${SUFFIX}" +COSMOSDB_ACCOUNT_NAME="${PREFIX}-mongodb-${SUFFIX}" +MONGODB_DATABASE_NAME="sampledb" +COLLECTION_NAME="activities" +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEBAPP_NAME] web app:\n" +az webapp show \ + --name "$WEBAPP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Azure CosmosDB account +echo -e "\n[$COSMOSDB_ACCOUNT_NAME] cosmosdb account:\n" +az cosmosdb show \ + --name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,DocumentEndpoint:documentEndpoint}' \ + --output table \ + --only-show-errors + +# Check MongoDB database +echo -e "\n[$MONGODB_DATABASE_NAME] mongodb database:\n" +az cosmosdb mongodb database show \ + --name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check MongoDB collection +echo -e "\n[$COLLECTION_NAME] mongodb collection:\n" +az cosmosdb mongodb collection show \ + --name "$COLLECTION_NAME" \ + --database-name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEBAPP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEBAPP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure CLI Documentation](https://docs.microsoft.com/en-us/cli/azure/) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/call-web-app.sh b/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/call-web-app.sh new file mode 100755 index 0000000..9c3945f --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/call-web-app.sh @@ -0,0 +1,198 @@ +#!/bin/bash + +get_docker_container_name_by_prefix() { + local app_prefix="$1" + local container_name + + # Check if Docker is running + if ! docker info >/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 8000) + echo "Getting the host port mapped to internal port 8000 in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "8000") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --max-time 10 --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl --max-time 10 -s "http://$container_ip:8000/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl --max-time 10 -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl --max-time 10 -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/deploy.sh b/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/deploy.sh new file mode 100755 index 0000000..eab28e6 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/deploy.sh @@ -0,0 +1,945 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +DIAGNOSTIC_SETTINGS_NAME='default' +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +VIRTUAL_NETWORK_ADDRESS_PREFIX="10.0.0.0/8" +WEB_APP_SUBNET_NAME="app-subnet" +WEB_APP_SUBNET_PREFIX="10.0.0.0/24" +PE_SUBNET_NAME="pe-subnet" +PE_SUBNET_PREFIX="10.0.1.0/24" +VIRTUAL_NETWORK_LINK_NAME="link-to-vnet" +PRIVATE_DNS_ZONE_NAME="privatelink.mongo.cosmos.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mongodb-pe-${SUFFIX}" +PRIVATE_ENDPOINT_GROUP="mongodb" +PRIVATE_DNS_ZONE_GROUP_NAME="default" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +COSMOSDB_ACCOUNT_NAME="${PREFIX}-mongodb-${SUFFIX}" +MONGODB_API_VERSION="7.0" +MONGODB_DATABASE_NAME="sampledb" +COLLECTION_NAME="activities" +INDEXES='[{"key":{"keys":["_id"]}},{"key":{"keys":["username"]}},{"key":{"keys":["activity"]}},{"key":{"keys":["timestamp"]}}]' +SHARD="username" +THROUGHPUT=400 +RUNTIME="dotnetcore" +RUNTIME_VERSION="10.0" +LOGIN_NAME="paolo" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit +# Create a resource group +echo "Creating resource group [$RESOURCE_GROUP_NAME]..." +az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Resource group [$RESOURCE_GROUP_NAME] created successfully." +else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit 1 +fi + +# Check if the CosmosDB account already exists +echo "Checking if [$COSMOSDB_ACCOUNT_NAME] CosmosDB account already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az cosmosdb show \ + --name $COSMOSDB_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$COSMOSDB_ACCOUNT_NAME] CosmosDB account already exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$COSMOSDB_ACCOUNT_NAME] CosmosDB account in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a CosmosDB account with MongoDB kind + az cosmosdb create \ + --name $COSMOSDB_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --locations regionName=$LOCATION \ + --kind MongoDB \ + --server-version $MONGODB_API_VERSION \ + --default-consistency-level Session \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$COSMOSDB_ACCOUNT_NAME] CosmosDB account successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$COSMOSDB_ACCOUNT_NAME] CosmosDB account in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$COSMOSDB_ACCOUNT_NAME] CosmosDB account already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Retrieve account resource id +echo "Getting [$COSMOSDB_ACCOUNT_NAME] CosmosDB account resource id in the [$RESOURCE_GROUP_NAME] resource group..." +COSMOSDB_ACCOUNT_ID=$(az cosmosdb show \ + --name $COSMOSDB_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query id \ + --output tsv \ + --only-show-errors) + +if [ -n "$COSMOSDB_ACCOUNT_ID" ]; then + echo "CosmosDB account resource id retrieved successfully: $COSMOSDB_ACCOUNT_ID" +else + echo "Failed to retrieve CosmosDB account resource id." + exit 1 +fi + +# Retrieve document endpoint +echo "Getting [$COSMOSDB_ACCOUNT_NAME] CosmosDB account document endpoint in the [$RESOURCE_GROUP_NAME] resource group..." +DOCUMENT_ENDPOINT=$(az cosmosdb show \ + --name $COSMOSDB_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "documentEndpoint" \ + --output tsv \ + --only-show-errors) + +if [ -n "$DOCUMENT_ENDPOINT" ]; then + echo "Document endpoint retrieved successfully: $DOCUMENT_ENDPOINT" +else + echo "Failed to retrieve document endpoint." + exit 1 +fi + +# Check if the MongoDB database already exists +echo "Checking if [$MONGODB_DATABASE_NAME] MongoDB database already exists in the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account..." +az cosmosdb mongodb database show \ + --account-name $COSMOSDB_ACCOUNT_NAME \ + --name $MONGODB_DATABASE_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MONGODB_DATABASE_NAME] MongoDB database already exists in the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account" + echo "Creating [$MONGODB_DATABASE_NAME] MongoDB database in the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account..." + + # Create MongoDB database in the CosmosDB account + az cosmosdb mongodb database create \ + --account-name $COSMOSDB_ACCOUNT_NAME \ + --name $MONGODB_DATABASE_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --output json \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$MONGODB_DATABASE_NAME] MongoDB database successfully created in the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account" + else + echo "Failed to create [$MONGODB_DATABASE_NAME] MongoDB database in the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account" + exit 1 + fi +else + echo "[$MONGODB_DATABASE_NAME] MongoDB database already exists in the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account" +fi + +# Check if the MongoDB database collection already exists +echo "Checking if [$COLLECTION_NAME] collection already exists in the [$MONGODB_DATABASE_NAME] MongoDB database..." +az cosmosdb mongodb collection show \ + --account-name $COSMOSDB_ACCOUNT_NAME \ + --database-name $MONGODB_DATABASE_NAME \ + --name $COLLECTION_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$COLLECTION_NAME] collection already exists in the [$MONGODB_DATABASE_NAME] MongoDB database" + echo "Creating [$COLLECTION_NAME] collection in the [$MONGODB_DATABASE_NAME] MongoDB database..." + + # Create a MongoDB database collection + az cosmosdb mongodb collection create \ + --account-name $COSMOSDB_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --database-name $MONGODB_DATABASE_NAME \ + --name $COLLECTION_NAME \ + --idx "$INDEXES" \ + --shard $SHARD \ + --throughput $THROUGHPUT \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$COLLECTION_NAME] collection successfully created in the [$MONGODB_DATABASE_NAME] MongoDB database" + else + echo "Failed to create [$COLLECTION_NAME] collection in the [$MONGODB_DATABASE_NAME] MongoDB database" + exit 1 + fi +else + echo "[$COLLECTION_NAME] collection already exists in the [$MONGODB_DATABASE_NAME] MongoDB database" +fi + +# List CosmosDB connection strings +echo "Listing connection strings for CosmosDB account [$COSMOSDB_ACCOUNT_NAME]..." +COSMOSDB_CONNECTION_STRING=$(az cosmosdb keys list \ + --name $COSMOSDB_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --type connection-strings \ + --query "connectionStrings[0].connectionString" \ + --output tsv) + +if [ $? -eq 0 ]; then + echo "CosmosDB connection strings retrieved successfully." + echo "Connection String: $COSMOSDB_CONNECTION_STRING" +else + echo "Failed to retrieve CosmosDB connection strings." +fi + +# Check if the network security group for the web app subnet already exists +echo "Checking if [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the network security group for the web app subnet + az network nsg create \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the web app subnet +echo "Getting [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_SUBNET_NSG_ID=$(az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_SUBNET_NSG_ID ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id retrieved successfully: $WEB_APP_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the network security group for the private endpoint subnet already exists +echo "Checking if [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the network security group for the private endpoint subnet + az network nsg create \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the private endpoint subnet +echo "Getting [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +PE_SUBNET_NSG_ID=$(az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $PE_SUBNET_NSG_ID ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id retrieved successfully: $PE_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the public IP prefix for the NAT Gateway already exists +echo "Checking if [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the public IP prefix for the NAT Gateway + az network public-ip prefix create \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --length 31 \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the NAT Gateway already exists +echo "Checking if [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the NAT Gateway + az network nat gateway create \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --public-ip-prefixes "$PIP_PREFIX_NAME" \ + --idle-timeout 4 \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$NAT_GATEWAY_NAME] NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$NAT_GATEWAY_NAME] NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the virtual network + az network vnet create \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --address-prefixes "$VIRTUAL_NETWORK_ADDRESS_PREFIX" \ + --subnet-name "$WEB_APP_SUBNET_NAME" \ + --subnet-prefix "$WEB_APP_SUBNET_PREFIX" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + echo "Associating [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group..." + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + az network vnet subnet update \ + --name "$WEB_APP_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --nat-gateway "$NAT_GATEWAY_NAME" \ + --network-security-group "$WEB_APP_SUBNET_NSG_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NAME] subnet successfully associated with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + else + echo "Failed to associate [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + exit 1 + fi +else + echo "[$VIRTUAL_NETWORK_NAME] virtual network already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the subnet already exists +echo "Checking if [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network..." +az network vnet subnet show \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network" + echo "Creating [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the subnet + az network vnet subnet create \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --address-prefix "$PE_SUBNET_PREFIX" \ + --network-security-group "$PE_SUBNET_NSG_NAME" \ + --private-endpoint-network-policies "Disabled" \ + --private-link-service-network-policies "Disabled" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NAME] subnet successfully created in the [$VIRTUAL_NETWORK_NAME] virtual network" + else + echo "Failed to create [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$PE_SUBNET_NAME] subnet already exists in the [$VIRTUAL_NETWORK_NAME] virtual network" +fi + +# Retrieve the virtual network resource id +echo "Getting [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group..." +VIRTUAL_NETWORK_ID=$(az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors \ + --query id \ + --output tsv) + +if [[ -n $VIRTUAL_NETWORK_ID ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network resource id retrieved successfully: $VIRTUAL_NETWORK_ID" +else + echo "Failed to retrieve [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit +fi + +# Check if the private DNS Zone already exists +echo "Checking if [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the private DNS Zone + az network private-dns zone create \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network link between the private DNS zone and the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists..." +az network private-dns link vnet show \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists" + + echo "Creating [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network + az network private-dns link vnet create \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --virtual-network "$VIRTUAL_NETWORK_ID" \ + --registration-enabled false \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network already exists" +fi + +# Check if the private endpoint already exists +echo "Checking if private endpoint [$PRIVATE_ENDPOINT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group..." +privateEndpointId=$(az network private-endpoint list \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --query "[?name=='$PRIVATE_ENDPOINT_NAME'].id" \ + --output tsv) + +if [[ -z $privateEndpointId ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] does not exist in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_ENDPOINT_NAME] private endpoint for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a private endpoint for the CosmosDB account + az network private-endpoint create \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --subnet "$PE_SUBNET_NAME" \ + --private-connection-resource-id "$COSMOSDB_ACCOUNT_ID" \ + --group-id "$PRIVATE_ENDPOINT_GROUP" \ + --connection-name "mongodb-connection" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] successfully created for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create a private endpoint for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the private DNS zone grou is already created for the CosmosDB account private endpoint +echo "Checking if the private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists..." +NAME=$(az network private-endpoint dns-zone-group show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --query name \ + --output tsv \ + --only-show-errors 2>/dev/null) + +if [[ -z $NAME ]]; then + echo "No private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint actually exists" + echo "Creating private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint..." + + # Create the private DNS zone group for the CosmosDB account private endpoint + az network private-endpoint dns-zone-group create \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --private-dns-zone "$PRIVATE_DNS_ZONE_NAME" \ + --zone-name "mongodb-zone" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint successfully created" + else + echo "Failed to create private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint" + exit + fi +else + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists" +fi + +# Create app service plan +echo "Creating app service plan [$APP_SERVICE_PLAN_NAME]..." +az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "app service plan [$APP_SERVICE_PLAN_NAME] created successfully." +else + echo "Failed to create app service plan [$APP_SERVICE_PLAN_NAME]." + exit 1 +fi + +# Get the app service plan resource id +echo "Getting [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group..." +APP_SERVICE_PLAN_ID=$(az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $APP_SERVICE_PLAN_ID ]]; then + echo "[$APP_SERVICE_PLAN_NAME] app service plan resource id retrieved successfully: $APP_SERVICE_PLAN_ID" +else + echo "Failed to retrieve [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Create the web app +echo "Creating web app [$WEB_APP_NAME]..." +az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --vnet "$VIRTUAL_NETWORK_NAME" \ + --subnet "$WEB_APP_SUBNET_NAME" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Get the web app resource id +echo "Getting [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_ID=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_ID ]]; then + echo "[$WEB_APP_NAME] web app resource id retrieved successfully: $WEB_APP_ID" +else + echo "Failed to retrieve [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network... +echo "Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network..." + +az resource update \ + --ids "$WEB_APP_ID" \ + --set properties.outboundVnetRouting.allTraffic=true \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Forced tunneling enabled for web app [$WEB_APP_NAME]." +else + echo "Failed to enable forced tunneling for web app [$WEB_APP_NAME]." + exit 1 +fi + +# Set web app settings +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + COSMOSDB_CONNECTION_STRING="$COSMOSDB_CONNECTION_STRING" \ + COSMOSDB_DATABASE_NAME="$MONGODB_DATABASE_NAME" \ + COSMOSDB_COLLECTION_NAME="$COLLECTION_NAME" \ + LOGIN_NAME="$LOGIN_NAME" \ + WEBSITES_PORT="8000" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +# Check if the log analytics workspace already exists +echo "Checking if [$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$LOG_ANALYTICS_NAME] Log Analytics workspace actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the Log Analytics workspace + az monitor log-analytics workspace create \ + --name "$LOG_ANALYTICS_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --query-access "Enabled" \ + --retention-time 30 \ + --sku "PerNode" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check whether the diagnostic settings for the web app already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app..." + + # Create the diagnostic settings for the web app to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "AppServiceHTTPLogs", "enabled": true}, + {"category": "AppServiceConsoleLogs", "enabled": true}, + {"category": "AppServiceAppLogs", "enabled": true}, + {"category": "AppServiceAuditLogs", "enabled": true}, + {"category": "AppServiceIPSecAuditLogs", "enabled": true}, + {"category": "AppServicePlatformLogs", "enabled": true}, + {"category": "AppServiceAuthenticationLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist" +fi + +# Check whether the diagnostic settings for the app service plan already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan..." + + # Create the diagnostic settings for the app service plan to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist" +fi + +# Check whether the diagnostic settings for the CosmosDB account already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$COSMOSDB_ACCOUNT_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account..." + + # Create the diagnostic settings for the CosmosDB account to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$COSMOSDB_ACCOUNT_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "DataPlaneRequests", "enabled": true}, + {"category": "MongoRequests", "enabled": true} + ]' \ + --metrics '[ + {"category": "Requests", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$COSMOSDB_ACCOUNT_NAME] CosmosDB account already exist" +fi + +# Check whether the diagnostic settings for the virtual network already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the diagnostic settings for the virtual network to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "VMProtectionAlerts", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist" +fi + +# Check whether the diagnostic settings for the network security group for the web app subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the diagnostic settings for the network security group for the web app subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist" +fi + +# Check whether the diagnostic settings for the network security group for the private endpoint subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the diagnostic settings for the network security group for the private endpoint subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist" +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# List the contents of the zip package +echo "Contents of the zip package [$ZIPFILE]:" +unzip -l "$ZIPFILE" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +echo "Using standard az webapp deploy command for AzureCloud environment." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/validate.sh b/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/validate.sh new file mode 100755 index 0000000..fd2815c --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/scripts/validate.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.mongo.cosmos.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mongodb-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +COSMOSDB_ACCOUNT_NAME="${PREFIX}-mongodb-${SUFFIX}" +MONGODB_DATABASE_NAME="sampledb" +COLLECTION_NAME="activities" +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check Azure CosmosDB account +echo -e "\n[$COSMOSDB_ACCOUNT_NAME] cosmosdb account:\n" +az cosmosdb show \ + --name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,DocumentEndpoint:documentEndpoint}' \ + --output table \ + --only-show-errors + +# Check MongoDB database +echo -e "\n[$MONGODB_DATABASE_NAME] mongodb database:\n" +az cosmosdb mongodb database show \ + --name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check MongoDB collection +echo -e "\n[$COLLECTION_NAME] mongodb collection:\n" +az cosmosdb mongodb collection show \ + --name "$COLLECTION_NAME" \ + --database-name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Models/Activity.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Models/Activity.cs new file mode 100644 index 0000000..c39b073 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Models/Activity.cs @@ -0,0 +1,4 @@ +namespace VacationPlanner.Models; + +///

A planned vacation activity: the store's identifier plus the free-text description. +public sealed record Activity(string Id, string Text); diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml new file mode 100644 index 0000000..386fa85 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml @@ -0,0 +1,2 @@ +@page "/delete/{id}" +@model DeleteModel diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs new file mode 100644 index 0000000..8412e78 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. +public class DeleteModel(IActivityStore store) : PageModel +{ + public IActionResult OnGet() => RedirectToPage("/Index"); + + public async Task OnPostAsync(string id, CancellationToken cancellationToken) + { + if (!string.IsNullOrWhiteSpace(id)) + { + await store.DeleteAsync(id, cancellationToken); + TempData["Flash"] = "Activity deleted."; + } + + return RedirectToPage("/Index"); + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..bd617e2 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,265 @@ +@page +@model IndexModel + + + + + + Vacation Planner + + + + + + + + + +
+
+

🌴 Vacation Planner

+

@Model.Activities.Count activit@(Model.Activities.Count != 1 ? "ies" : "y") planned

+
+
+ + +
+
+ + +
+ + + + + + + + + @foreach (var activity in Model.Activities) + { + + + + + + } + @if (Model.Activities.Count == 0) + { + + + + } + +
ActivityActions
@activity.Text + + +
+ +
+
No vacation plans yet — add your first activity!
+
+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..94b6b33 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Models; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +public class IndexModel(IActivityStore store) : PageModel +{ + public IReadOnlyList Activities { get; private set; } = []; + + /// Flash messages set by the previous request (the equivalent of Flask's flash()). + public IReadOnlyList Flashes => TempData["Flash"] is string message ? [message] : []; + + [BindProperty(Name = "activity")] + public string? Activity { get; set; } + + [BindProperty(Name = "row_id")] + public string? RowId { get; set; } + + public async Task OnGetAsync(CancellationToken cancellationToken) + { + Activities = await store.ListAsync(cancellationToken); + } + + public async Task OnPostAsync(CancellationToken cancellationToken) + { + var text = Activity?.Trim(); + var id = RowId?.Trim(); + if (!string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(id)) + { + await store.UpdateAsync(id, text, cancellationToken); + TempData["Flash"] = "Activity updated!"; + } + else + { + await store.AddAsync(text, cancellationToken); + TempData["Flash"] = "Activity added!"; + } + } + + return RedirectToPage(); + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..ec62511 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using VacationPlanner +@using VacationPlanner.Models +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs new file mode 100644 index 0000000..f0dbb34 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs @@ -0,0 +1,31 @@ +using VacationPlanner.Services; + +var builder = WebApplication.CreateBuilder(args); + +// Code deployments built by Oryx export ASPNETCORE_URLS; custom images and local runs only set PORT. +if (Environment.GetEnvironmentVariable("ASPNETCORE_URLS") is null + && Environment.GetEnvironmentVariable("PORT") is { Length: > 0 } port) +{ + builder.WebHost.UseUrls($"http://*:{port}"); +} + +// Read and validate the configuration up front so a misconfigured deployment fails at startup. +var mongoOptions = MongoOptions.FromEnvironment(); + +builder.Services.AddRazorPages(); +builder.Services.AddSingleton(sp => + new MongoActivityStore(mongoOptions, sp.GetRequiredService>())); +builder.Services.AddHostedService(sp => + new StoreInitializer(sp.GetRequiredService(), sp.GetRequiredService>())); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/health", async (IActivityStore store, CancellationToken cancellationToken) => + await store.IsHealthyAsync(cancellationToken) + ? Results.Json(new { status = "ok" }) + : Results.Json(new { status = "unavailable" }, statusCode: StatusCodes.Status503ServiceUnavailable)); + +app.Run(); diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/ActivityId.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/ActivityId.cs new file mode 100644 index 0000000..8654aaf --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/ActivityId.cs @@ -0,0 +1,15 @@ +using System.Security.Cryptography; +using System.Text; + +namespace VacationPlanner.Services; + +/// MD5 of username + activity + timestamp: the id scheme shared by the Vacation Planner samples. +public static class ActivityId +{ + public static string Create(string username, string activity) + { + var timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"); + var hash = MD5.HashData(Encoding.UTF8.GetBytes($"{username}_{activity}_{timestamp}")); + return Convert.ToHexStringLower(hash); + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/IActivityStore.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/IActivityStore.cs new file mode 100644 index 0000000..3b24e5f --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/IActivityStore.cs @@ -0,0 +1,21 @@ +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Persistence for the planner's activities. Every call goes to the backing store; nothing is cached in-process. +public interface IActivityStore +{ + /// Creates whatever the store needs (container, table, collection) before the first request. + Task InitializeAsync(CancellationToken cancellationToken); + + Task> ListAsync(CancellationToken cancellationToken); + + Task AddAsync(string text, CancellationToken cancellationToken); + + Task UpdateAsync(string id, string text, CancellationToken cancellationToken); + + Task DeleteAsync(string id, CancellationToken cancellationToken); + + /// Cheap connectivity probe used by GET /health. + Task IsHealthyAsync(CancellationToken cancellationToken); +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs new file mode 100644 index 0000000..9e2ce76 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs @@ -0,0 +1,85 @@ +using MongoDB.Bson; +using MongoDB.Driver; +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Activities as documents {_id, username, activity, timestamp} in an Azure Cosmos DB for MongoDB collection. +public sealed class MongoActivityStore : IActivityStore +{ + private readonly IMongoDatabase _database; + private readonly IMongoCollection _collection; + private readonly MongoOptions _options; + private readonly ILogger _logger; + + public MongoActivityStore(MongoOptions options, ILogger logger) + { + _options = options; + _logger = logger; + var client = new MongoClient(options.ConnectionString); + _database = client.GetDatabase(options.DatabaseName); + _collection = _database.GetCollection(options.CollectionName); + } + + public async Task InitializeAsync(CancellationToken cancellationToken) + { + var existing = await (await _database.ListCollectionNamesAsync(cancellationToken: cancellationToken)).ToListAsync(cancellationToken); + if (existing.Contains(_options.CollectionName)) + { + _logger.LogInformation("Collection '{Collection}' already exists in database '{Database}'", _options.CollectionName, _options.DatabaseName); + return; + } + + await _database.CreateCollectionAsync(_options.CollectionName, cancellationToken: cancellationToken); + var keys = Builders.IndexKeys; + await _collection.Indexes.CreateManyAsync( + [ + new CreateIndexModel(keys.Ascending("username")), + new CreateIndexModel(keys.Ascending("activity")), + new CreateIndexModel(keys.Ascending("timestamp")), + ], cancellationToken); + _logger.LogInformation("Created collection '{Collection}' in database '{Database}'", _options.CollectionName, _options.DatabaseName); + } + + public async Task> ListAsync(CancellationToken cancellationToken) + { + var filter = Builders.Filter.Eq("username", _options.Username); + var documents = await _collection.Find(filter).ToListAsync(cancellationToken); + return documents.Select(d => new Activity(d["_id"].AsString, d["activity"].AsString)).ToList(); + } + + public Task AddAsync(string text, CancellationToken cancellationToken) + { + var document = new BsonDocument + { + ["_id"] = ActivityId.Create(_options.Username, text), + ["username"] = _options.Username, + ["activity"] = text, + ["timestamp"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"), + }; + return _collection.InsertOneAsync(document, cancellationToken: cancellationToken); + } + + public Task UpdateAsync(string id, string text, CancellationToken cancellationToken) => + _collection.UpdateOneAsync( + Builders.Filter.Eq("_id", id), + Builders.Update.Set("activity", text), + cancellationToken: cancellationToken); + + public Task DeleteAsync(string id, CancellationToken cancellationToken) => + _collection.DeleteOneAsync(Builders.Filter.Eq("_id", id), cancellationToken); + + public async Task IsHealthyAsync(CancellationToken cancellationToken) + { + try + { + await _database.RunCommandAsync(new BsonDocument("ping", 1), cancellationToken: cancellationToken); + return true; + } + catch (Exception ex) + { + _logger.LogWarning(ex, "MongoDB health check failed"); + return false; + } + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoOptions.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoOptions.cs new file mode 100644 index 0000000..871c308 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoOptions.cs @@ -0,0 +1,32 @@ +namespace VacationPlanner.Services; + +/// Settings read from the same environment variables the Python sample uses. +public sealed record MongoOptions(string ConnectionString, string DatabaseName, string CollectionName, string Username) +{ + public static MongoOptions FromEnvironment() + { + var connectionString = Environment.GetEnvironmentVariable("COSMOSDB_CONNECTION_STRING") + ?? Environment.GetEnvironmentVariable("MONGODB_CONNECTION_STRING"); + if (string.IsNullOrEmpty(connectionString)) + { + throw new InvalidOperationException("Missing required environment variable: COSMOSDB_CONNECTION_STRING or MONGODB_CONNECTION_STRING"); + } + + var username = Environment.GetEnvironmentVariable("LOGIN_NAME") ?? "paolo"; + if (string.IsNullOrWhiteSpace(username)) + { + throw new InvalidOperationException("Username cannot be None or empty"); + } + + return new MongoOptions( + ConnectionString: connectionString, + DatabaseName: Require("COSMOSDB_DATABASE_NAME"), + CollectionName: Require("COSMOSDB_COLLECTION_NAME"), + Username: username); + } + + private static string Require(string name) => + Environment.GetEnvironmentVariable(name) is { Length: > 0 } value + ? value + : throw new InvalidOperationException($"Missing required environment variable: {name}"); +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/StoreInitializer.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/StoreInitializer.cs new file mode 100644 index 0000000..c74eb50 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/StoreInitializer.cs @@ -0,0 +1,33 @@ +namespace VacationPlanner.Services; + +/// +/// Runs at startup with a bounded retry, so the app fails fast +/// (and the container exits) when the backing service never becomes reachable. +/// +public sealed class StoreInitializer( + IActivityStore store, + ILogger logger, + int attempts = 1, + TimeSpan delay = default) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + for (var attempt = 1; ; attempt++) + { + try + { + await store.InitializeAsync(cancellationToken); + logger.LogInformation("Activity store initialized after {Attempts} attempt(s).", attempt); + return; + } + catch (Exception ex) when (attempt < attempts && !cancellationToken.IsCancellationRequested) + { + logger.LogWarning(ex, "Activity store not ready (attempt {Attempt}/{Attempts}); retrying in {Delay}s.", + attempt, attempts, delay.TotalSeconds); + await Task.Delay(delay, cancellationToken); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/VacationPlanner.csproj b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..9a89b96 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,11 @@ + + + net10.0 + enable + enable + VacationPlanner + + + + + diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/appsettings.json b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/wwwroot/favicon.ico b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b1d5cf37d81c073dbacd66df3f69d9240359dda GIT binary patch literal 36791 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 D + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `terraform` folder: + +```bash +cd samples/web-app-cosmosdb-mongodb-api/dotnet/terraform +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +Once the deployment completes, run the [validate.sh](../scripts/validate.sh) script to confirm that all resources were provisioned and configured as expected: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEBAPP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.mongo.cosmos.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mongodb-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEBAPP_NAME="${PREFIX}-webapp-${SUFFIX}" +COSMOSDB_ACCOUNT_NAME="${PREFIX}-mongodb-${SUFFIX}" +MONGODB_DATABASE_NAME="sampledb" +COLLECTION_NAME="activities" +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEBAPP_NAME] web app:\n" +az webapp show \ + --name "$WEBAPP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Azure CosmosDB account +echo -e "\n[$COSMOSDB_ACCOUNT_NAME] cosmosdb account:\n" +az cosmosdb show \ + --name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,DocumentEndpoint:documentEndpoint}' \ + --output table \ + --only-show-errors + +# Check MongoDB database +echo -e "\n[$MONGODB_DATABASE_NAME] mongodb database:\n" +az cosmosdb mongodb database show \ + --name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check MongoDB collection +echo -e "\n[$COLLECTION_NAME] mongodb collection:\n" +az cosmosdb mongodb collection show \ + --name "$COLLECTION_NAME" \ + --database-name "$MONGODB_DATABASE_NAME" \ + --account-name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEBAPP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEBAPP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Terraform Azure Provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/deploy.sh b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/deploy.sh new file mode 100755 index 0000000..fd202c9 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/deploy.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Intialize Terraform +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" + +if [[ $? != 0 ]]; then + echo "Terraform plan failed. Exiting." + exit 1 +fi + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) +ACCOUNT_NAME=$(terraform output -raw cosmosdb_account_name) + +if [[ -z "$RESOURCE_GROUP_NAME" || -z "$WEB_APP_NAME" || -z "$ACCOUNT_NAME" ]]; then + echo "Resource Group Name, Web App Name, or Cosmos DB Account Name is empty. Exiting." + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/main.tf new file mode 100644 index 0000000..f020a3e --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/main.tf @@ -0,0 +1,192 @@ +# Local Variables +locals { + prefix = lower(var.prefix) + suffix = lower(var.suffix) + resource_group_name = "${var.prefix}-rg" + log_analytics_name = "${local.prefix}-log-analytics-${local.suffix}" + virtual_network_name = "${local.prefix}-vnet-${local.suffix}" + nat_gateway_name = "${local.prefix}-nat-gateway-${local.suffix}" + private_endpoint_name = "${local.prefix}-mongodb-pe-${local.suffix}" + webapp_subnet_nsg_name = "${local.prefix}-webapp-subnet-nsg-${local.suffix}" + pe_subnet_nsg_name = "${local.prefix}-pe-subnet-nsg-${local.suffix}" + cosmosdb_account_name = "${local.prefix}-mongodb-${local.suffix}" + app_service_plan_name = "${local.prefix}-app-service-plan-${local.suffix}" + web_app_name = "${local.prefix}-webapp-${local.suffix}" +} + +# Data Sources +data "azurerm_client_config" "current" { +} + +# Create a resource group +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +# Create a log analytics workspace +module "log_analytics_workspace" { + source = "./modules/log_analytics" + name = local.log_analytics_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + tags = var.tags +} + +# Create a virtual network with subnets +module "virtual_network" { + source = "./modules/virtual_network" + resource_group_name = azurerm_resource_group.example.name + location = var.location + vnet_name = local.virtual_network_name + address_space = var.vnet_address_space + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + subnets = [ + { + name : var.webapp_subnet_name + address_prefixes : var.webapp_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : "Microsoft.Web/serverFarms" + }, + { + name : var.pe_subnet_name + address_prefixes : var.pe_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : null + } + ] +} + +# Create a network security group and associate it with the webapp subnet +module "webapp_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.webapp_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } +} + +# Create a network security group and associate it with the private endpoint subnet +module "pe_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.pe_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.pe_subnet_name) = module.virtual_network.subnet_ids[var.pe_subnet_name] + } +} + +# Create a NAT gateway and associate it with the webapp subnet +module "nat_gateway" { + source = "./modules/nat_gateway" + name = local.nat_gateway_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + sku_name = var.nat_gateway_sku_name + idle_timeout_in_minutes = var.nat_gateway_idle_timeout_in_minutes + zones = var.nat_gateway_zones + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } + tags = var.tags +} + +# Create a private DNS zone for the CosmosDB MongoDB account and link it to the virtual network +module "private_dns_zone" { + source = "./modules/private_dns_zone" + name = "privatelink.mongo.cosmos.azure.com" + resource_group_name = azurerm_resource_group.example.name + tags = var.tags + virtual_networks_to_link = { + (module.virtual_network.name) = { + subscription_id = data.azurerm_client_config.current.subscription_id + resource_group_name = azurerm_resource_group.example.name + } + } +} + +# Create a private endpoint for the CosmosDB MongoDB account in the pe_subnet subnet +module "private_endpoint" { + source = "./modules/private_endpoint" + name = local.private_endpoint_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + subnet_id = module.virtual_network.subnet_ids[var.pe_subnet_name] + tags = var.tags + private_connection_resource_id = module.cosmosdb_mongodb.id + is_manual_connection = false + subresource_name = "mongodb" + private_dns_zone_group_name = "private-dns-zone-group" + private_dns_zone_group_ids = [module.private_dns_zone.id] +} + +# Create CosmosDB MongoDB resources using module +module "cosmosdb_mongodb" { + source = "./modules/cosmosdb_mongodb" + name = local.cosmosdb_account_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + mongo_server_version = var.mongodb_server_version + consistency_level = var.consistency_level + primary_region = var.primary_region + secondary_region = var.secondary_region + database_name = var.cosmosdb_database_name + database_throughput = var.database_throughput + collection_name = var.cosmosdb_collection_name + index_keys = var.mongodb_index_keys + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Create App Service Plan using module +module "app_service_plan" { + source = "./modules/app_service_plan" + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Create Web App using module +module "web_app" { + source = "./modules/web_app" + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + service_plan_id = module.app_service_plan.id + https_only = var.https_only + virtual_network_subnet_id = module.virtual_network.subnet_ids[var.webapp_subnet_name] + vnet_route_all_enabled = true + public_network_access_enabled = var.public_network_access_enabled + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + dotnet_version = var.dotnet_version + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + COSMOSDB_CONNECTION_STRING = module.cosmosdb_mongodb.primary_mongodb_connection_string + COSMOSDB_DATABASE_NAME = module.cosmosdb_mongodb.database_name + COSMOSDB_COLLECTION_NAME = var.cosmosdb_collection_name + LOGIN_NAME = var.login_name + WEBSITES_PORT = var.websites_port + } +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/main.tf new file mode 100644 index 0000000..98a3e4d --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_service_plan" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_service_plan.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/outputs.tf new file mode 100644 index 0000000..f1455ea --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/outputs.tf @@ -0,0 +1,19 @@ +output "id" { + value = azurerm_service_plan.example.id + description = "Specifies the resource id of the App Service Plan" +} + +output "name" { + value = azurerm_service_plan.example.name + description = "Specifies the name of the App Service Plan" +} + +output "location" { + value = azurerm_service_plan.example.location + description = "Specifies the location of the App Service Plan" +} + +output "resource_group_name" { + value = azurerm_service_plan.example.resource_group_name + description = "Specifies the resource group name of the App Service Plan" +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/variables.tf new file mode 100644 index 0000000..e543066 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/app_service_plan/variables.tf @@ -0,0 +1,42 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the App Service Plan." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the App Service Plan." + type = string +} + +variable "sku_name" { + description = "(Required) Specifies the SKU name for the App Service Plan." + type = string +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/main.tf new file mode 100644 index 0000000..1cd082c --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/main.tf @@ -0,0 +1,78 @@ +resource "azurerm_cosmosdb_account" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + offer_type = "Standard" + kind = "MongoDB" + mongo_server_version = var.mongo_server_version + automatic_failover_enabled = false + tags = var.tags + + consistency_policy { + consistency_level = var.consistency_level + max_interval_in_seconds = 300 + max_staleness_prefix = 100000 + } + + geo_location { + location = var.primary_region + failover_priority = 0 + } + + geo_location { + location = var.secondary_region + failover_priority = 1 + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_cosmosdb_mongo_database" "example" { + name = var.database_name + resource_group_name = var.resource_group_name + account_name = azurerm_cosmosdb_account.example.name + throughput = var.database_throughput +} + +resource "azurerm_cosmosdb_mongo_collection" "example" { + name = var.collection_name + resource_group_name = var.resource_group_name + account_name = azurerm_cosmosdb_account.example.name + database_name = azurerm_cosmosdb_mongo_database.example.name + + default_ttl_seconds = var.default_ttl_seconds + shard_key = var.shard_key + throughput = var.collection_throughput + + # Dynamically create the 'index' blocks using a for_each loop over the variable + dynamic "index" { + # The for_each expression iterates over the list of keys from the variable + for_each = var.index_keys + content { + # The value of the current item in the iteration (e.g., "$**", "_id", etc.) + keys = [index.value] + } + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_cosmosdb_account.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "DataPlaneRequests" + } + + enabled_log { + category = "MongoRequests" + } + + enabled_metric { + category = "Requests" + } +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/outputs.tf new file mode 100644 index 0000000..09bcd7e --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/outputs.tf @@ -0,0 +1,30 @@ +output "id" { + value = azurerm_cosmosdb_account.example.id + description = "Specifies the resource id of the Cosmos DB account" +} + +output "name" { + value = azurerm_cosmosdb_account.example.name + description = "Specifies the name of the Cosmos DB account" +} + +output "endpoint" { + value = azurerm_cosmosdb_account.example.endpoint + description = "Specifies the endpoint of the Cosmos DB account" +} + +output "primary_mongodb_connection_string" { + value = azurerm_cosmosdb_account.example.primary_mongodb_connection_string + description = "Specifies the primary MongoDB connection string" + sensitive = true +} + +output "database_name" { + value = azurerm_cosmosdb_mongo_database.example.name + description = "Specifies the name of the MongoDB database" +} + +output "collection_name" { + value = azurerm_cosmosdb_mongo_collection.example.name + description = "Specifies the name of the MongoDB collection" +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/variables.tf new file mode 100644 index 0000000..71e3cbe --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/cosmosdb_mongodb/variables.tf @@ -0,0 +1,87 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the Cosmos DB account." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Cosmos DB account." + type = string +} + +variable "mongo_server_version" { + description = "(Optional) Specifies the version of MongoDB API for the Azure Cosmos DB account." + type = string + default = "7.0" +} + +variable "consistency_level" { + description = "(Required) Specifies the consistency level for the Azure Cosmos DB account." + type = string + default = "Eventual" +} + +variable "primary_region" { + description = "(Required) Specifies the primary region for the Azure Cosmos DB account." + type = string +} + +variable "secondary_region" { + description = "(Required) Specifies the secondary region for the Azure Cosmos DB account." + type = string +} + +variable "database_name" { + description = "(Required) Specifies the name of the MongoDB database." + type = string +} + +variable "database_throughput" { + description = "(Optional) Specifies the throughput for the MongoDB database." + type = number + default = 400 +} + +variable "collection_name" { + description = "(Required) Specifies the name of the MongoDB collection." + type = string +} + +variable "collection_throughput" { + description = "(Optional) Specifies the throughput for the MongoDB collection." + type = number + default = 400 +} + +variable "default_ttl_seconds" { + description = "(Optional) Specifies the default TTL in seconds for documents in the collection." + type = string + default = "777" +} + +variable "shard_key" { + description = "(Optional) Specifies the shard key for the MongoDB collection." + type = string + default = "username" +} + +variable "index_keys" { + description = "A list of field names for which to create single-field indexes on the MongoDB collection." + type = list(string) + default = ["_id"] +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/main.tf new file mode 100644 index 0000000..2f88414 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/main.tf @@ -0,0 +1,14 @@ +resource "azurerm_log_analytics_workspace" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku = var.sku + tags = var.tags + retention_in_days = var.retention_in_days != "" ? var.retention_in_days : null + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/output.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/output.tf new file mode 100644 index 0000000..fe2c398 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/output.tf @@ -0,0 +1,30 @@ +output "id" { + value = azurerm_log_analytics_workspace.example.id + description = "Specifies the resource id of the log analytics workspace" +} + +output "location" { + value = azurerm_log_analytics_workspace.example.location + description = "Specifies the location of the log analytics workspace" +} + +output "name" { + value = azurerm_log_analytics_workspace.example.name + description = "Specifies the name of the log analytics workspace" +} + +output "resource_group_name" { + value = azurerm_log_analytics_workspace.example.resource_group_name + description = "Specifies the name of the resource group that contains the log analytics workspace" +} + +output "workspace_id" { + value = azurerm_log_analytics_workspace.example.workspace_id + description = "Specifies the workspace id of the log analytics workspace" +} + +output "primary_shared_key" { + value = azurerm_log_analytics_workspace.example.primary_shared_key + description = "Specifies the workspace key of the log analytics workspace" + sensitive = true +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/variables.tf new file mode 100644 index 0000000..2db6a01 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/log_analytics/variables.tf @@ -0,0 +1,37 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Log Analytics workspace" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure Log Analytics workspace" + type = string +} + +variable "sku" { + description = "(Optional) Specifies the sku of the Azure Log Analytics workspace" + type = string + default = "PerGB2018" + + validation { + condition = contains(["Free", "Standalone", "PerNode", "PerGB2018"], var.sku) + error_message = "The log analytics sku is incorrect." + } +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Log Analytics workspace." + type = map(any) + default = {} +} + +variable "retention_in_days" { + description = " (Optional) Specifies the workspace data retention in days. Possible values are either 7 (Free Tier only) or range between 30 and 730." + type = number + default = 30 +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/main.tf new file mode 100644 index 0000000..cc384af --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/main.tf @@ -0,0 +1,42 @@ +resource "azurerm_public_ip" "example" { + name = "${var.name}PublicIp" + location = var.location + resource_group_name = var.resource_group_name + allocation_method = "Static" + sku = "Standard" + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku_name = var.sku_name + idle_timeout_in_minutes = var.idle_timeout_in_minutes + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway_public_ip_association" "example" { + nat_gateway_id = azurerm_nat_gateway.example.id + public_ip_address_id = azurerm_public_ip.example.id +} + +resource "azurerm_subnet_nat_gateway_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + nat_gateway_id = azurerm_nat_gateway.example.id +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/output.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/output.tf new file mode 100644 index 0000000..1e3fd03 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/output.tf @@ -0,0 +1,14 @@ +output "name" { + value = azurerm_nat_gateway.example.name + description = "Specifies the name of the Azure NAT Gateway" +} + +output "id" { + value = azurerm_nat_gateway.example.id + description = "Specifies the resource id of the Azure NAT Gateway" +} + +output "public_ip_address" { + value = azurerm_public_ip.example.ip_address + description = "Contains the public IP address of the Azure NAT Gateway." +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/variables.tf new file mode 100644 index 0000000..c1c8ea5 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/nat_gateway/variables.tf @@ -0,0 +1,43 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure NAT Gateway" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure NAT Gateway" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure NAT Gateway" + type = map(any) + default = {} +} + +variable "sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the NAT Gateway" + type = map(string) +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/main.tf new file mode 100644 index 0000000..c649652 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/main.tf @@ -0,0 +1,53 @@ +resource "azurerm_network_security_group" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + dynamic "security_rule" { + for_each = try(var.security_rules, []) + content { + name = try(security_rule.value.name, null) + priority = try(security_rule.value.priority, null) + direction = try(security_rule.value.direction, null) + access = try(security_rule.value.access, null) + protocol = try(security_rule.value.protocol, null) + source_port_range = try(security_rule.value.source_port_range, null) + source_port_ranges = try(security_rule.value.source_port_ranges, null) + destination_port_range = try(security_rule.value.destination_port_range, null) + destination_port_ranges = try(security_rule.value.destination_port_ranges, null) + source_address_prefix = try(security_rule.value.source_address_prefix, null) + source_address_prefixes = try(security_rule.value.source_address_prefixes, null) + destination_address_prefix = try(security_rule.value.destination_address_prefix, null) + destination_address_prefixes = try(security_rule.value.destination_address_prefixes, null) + source_application_security_group_ids = try(security_rule.value.source_application_security_group_ids, null) + destination_application_security_group_ids = try(security_rule.value.destination_application_security_group_ids, null) + } + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet_network_security_group_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + network_security_group_id = azurerm_network_security_group.example.id +} + +resource "azurerm_monitor_diagnostic_setting" "settings" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_network_security_group.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "NetworkSecurityGroupEvent" + } + + enabled_log { + category = "NetworkSecurityGroupRuleCounter" + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/outputs.tf new file mode 100644 index 0000000..b8ca8d5 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the network security group" + value = azurerm_network_security_group.example.name +} + +output "id" { + description = "Specifies the resource id of the network security group" + value = azurerm_network_security_group.example.id +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/variables.tf new file mode 100644 index 0000000..04eb07e --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/network_security_group/variables.tf @@ -0,0 +1,51 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Network Security Group" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Network Security Group" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Network Security Group" + type = string +} + +variable "security_rules" { + description = "(Optional) Specifies the security rules of the Azure Network Security Group" + type = list(object({ + name = string + priority = number + direction = string + access = string + protocol = string + source_port_range = string + source_port_ranges = list(string) + destination_port_range = string + destination_port_ranges = list(string) + source_address_prefix = string + source_address_prefixes = list(string) + destination_address_prefix = string + destination_address_prefixes = list(string) + source_application_security_group_ids = list(string) + destination_application_security_group_ids = list(string) + })) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the Azure Network Security Group" + type = map(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Network Security Group" + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace" + type = string +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/main.tf new file mode 100644 index 0000000..e61df00 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_private_dns_zone" "example" { + name = var.name + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "example" { + for_each = var.virtual_networks_to_link + + name = "link_to_${lower(basename(each.key))}" + private_dns_zone_id = azurerm_private_dns_zone.example.id + virtual_network_id = "/subscriptions/${each.value.subscription_id}/resourceGroups/${each.value.resource_group_name}/providers/Microsoft.Network/virtualNetworks/${each.key}" + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/outputs.tf new file mode 100644 index 0000000..ca141f3 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the private dns zone" + value = azurerm_private_dns_zone.example.name +} + +output "id" { + description = "Specifies the resource id of the private dns zone" + value = azurerm_private_dns_zone.example.id +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/variables.tf new file mode 100644 index 0000000..8d0c0cc --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_dns_zone/variables.tf @@ -0,0 +1,20 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private DNS Zone" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Private DNS Zone" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Private DNS Zone" + default = {} +} + +variable "virtual_networks_to_link" { + description = "(Optional) Specifies the subscription id, resource group name, and name of the virtual networks to which create a virtual network link" + type = map(any) + default = {} +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/main.tf new file mode 100644 index 0000000..62bfbfb --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/main.tf @@ -0,0 +1,26 @@ +resource "azurerm_private_endpoint" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + subnet_id = var.subnet_id + tags = var.tags + + private_service_connection { + name = "${var.name}Connection" + private_connection_resource_id = var.private_connection_resource_id + is_manual_connection = var.is_manual_connection + subresource_names = try([var.subresource_name], null) + request_message = try(var.request_message, null) + } + + private_dns_zone_group { + name = var.private_dns_zone_group_name + private_dns_zone_ids = var.private_dns_zone_group_ids + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/outputs.tf new file mode 100644 index 0000000..367ab51 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the private endpoint." + value = azurerm_private_endpoint.example.name +} + +output "id" { + description = "Specifies the resource id of the private endpoint." + value = azurerm_private_endpoint.example.id +} + +output "private_dns_zone_group" { + description = "Specifies the private dns zone group of the private endpoint." + value = azurerm_private_endpoint.example.private_dns_zone_group +} + +output "private_dns_zone_configs" { + description = "Specifies the private dns zone(s) configuration" + value = azurerm_private_endpoint.example.private_dns_zone_configs +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/variables.tf new file mode 100644 index 0000000..2b7a888 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/private_endpoint/variables.tf @@ -0,0 +1,61 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private Endpoint. Changing this forces a new resource to be created." + type = string +} + +variable "resource_group_name" { + description = "(Required) The name of the resource group. Changing this forces a new resource to be created." + type = string +} + +variable "private_connection_resource_id" { + description = "(Required) Specifies the resource id of the private link service" + type = string +} + +variable "location" { + description = "(Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created." + type = string +} + +variable "subnet_id" { + description = "(Required) Specifies the resource id of the subnet" + type = string +} + +variable "is_manual_connection" { + description = "(Optional) Specifies whether the Azure Private Endpoint connection requires manual approval from the remote resource owner." + type = string + default = false +} + +variable "subresource_name" { + description = "(Optional) Specifies a subresource name which the Azure Private Endpoint is able to connect to." + type = string + default = null +} + +variable "request_message" { + description = "(Optional) Specifies a message passed to the owner of the remote resource when the Azure Private Endpoint attempts to establish the connection to the remote resource." + type = string + default = null +} + +variable "private_dns_zone_group_name" { + description = "(Required) Specifies the Name of the Private DNS Zone Group. Changing this forces a new private_dns_zone_group resource to be created." + type = string +} + +variable "private_dns_zone_group_ids" { + description = "(Required) Specifies the list of Private DNS Zones to include within the private_dns_zone_group." + type = list(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Azure Private Endpoint." + default = {} +} + +variable "private_dns" { + default = {} +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/main.tf new file mode 100644 index 0000000..27fb626 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/main.tf @@ -0,0 +1,29 @@ +resource "azurerm_storage_account" "example" { + name = var.name + resource_group_name = var.resource_group_name + + location = var.location + account_kind = var.account_kind + account_tier = var.account_tier + account_replication_type = var.replication_type + is_hns_enabled = var.is_hns_enabled + shared_access_key_enabled = var.shared_access_key_enabled + tags = var.tags + + network_rules { + default_action = (length(var.ip_rules) + length(var.virtual_network_subnet_ids)) > 0 ? "Deny" : var.default_action + ip_rules = var.ip_rules + virtual_network_subnet_ids = var.virtual_network_subnet_ids + bypass = var.bypass + } + + identity { + type = "SystemAssigned" + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/outputs.tf new file mode 100644 index 0000000..02d32ec --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/outputs.tf @@ -0,0 +1,24 @@ +output "name" { + description = "Specifies the name of the storage account" + value = azurerm_storage_account.example.name +} + +output "id" { + description = "Specifies the resource id of the storage account" + value = azurerm_storage_account.example.id +} + +output "primary_access_key" { + description = "Specifies the primary access key of the storage account" + value = azurerm_storage_account.example.primary_access_key +} + +output "principal_id" { + description = "Specifies the principal id of the system assigned managed identity of the storage account" + value = azurerm_storage_account.example.identity[0].principal_id +} + +output "primary_blob_endpoint" { + description = "Specifies the primary blob endpoint of the storage account" + value = azurerm_storage_account.example.primary_blob_endpoint +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/variables.tf new file mode 100644 index 0000000..d1e61d7 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/storage_account/variables.tf @@ -0,0 +1,93 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Storage Account" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure Storage Account" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Storage Account" + type = string +} + +variable "account_kind" { + description = "(Optional) Specifies the account kind of the Azure Storage Account" + default = "StorageV2" + type = string + + validation { + condition = contains(["Storage", "StorageV2"], var.account_kind) + error_message = "The account kind of the Azure Storage Account is invalid." + } +} + +variable "account_tier" { + description = "(Optional) Specifies the account tier of the Azure Storage Account" + default = "Standard" + type = string + + validation { + condition = contains(["Standard", "Premium"], var.account_tier) + error_message = "The account tier of the Azure Storage Account is invalid." + } +} + +variable "replication_type" { + description = "(Optional) Specifies the replication type of the Azure Storage Account" + default = "LRS" + type = string + + validation { + condition = contains(["LRS", "ZRS", "GRS", "GZRS", "RA-GRS", "RA-GZRS"], var.replication_type) + error_message = "The replication type of the Azure Storage Account is invalid." + } +} + +variable "is_hns_enabled" { + description = "(Optional) Specifies the replication type of the Azure Storage Account" + default = false + type = bool +} + +variable "default_action" { + description = "Allow or disallow public access to all blobs or containers in the Azure Storage Accounts. The default interpretation is true for this property." + default = "Allow" + type = string +} + +variable "ip_rules" { + description = "Specifies IP rules for the Azure Storage Account" + default = [] + type = list(string) +} + +variable "virtual_network_subnet_ids" { + description = "Specifies a list of resource ids for subnets" + default = [] + type = list(string) +} + +variable "kind" { + description = "(Optional) Specifies the kind of the Azure Storage Account" + default = "" +} + +variable "bypass" { + description = " (Optional) Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Valid options are any combination of Logging, Metrics, AzureServices, or None." + default = ["Logging", "Metrics", "AzureServices"] + type = set(string) +} + +variable "shared_access_key_enabled" { + description = "(Optional) Indicates whether the storage account permits requests to be authorized with the account access key via Shared Key. If false, then all requests, including shared access signatures, must be authorized with Azure Active Directory (Azure AD). Defaults to true." + default = true + type = bool +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Storage Account" + default = {} +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/main.tf new file mode 100644 index 0000000..cec00f4 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/main.tf @@ -0,0 +1,55 @@ +resource "azurerm_virtual_network" "example" { + name = var.vnet_name + address_space = var.address_space + location = var.location + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet" "example" { + for_each = { for subnet in var.subnets : subnet.name => subnet if subnet != null } + + name = each.key + resource_group_name = var.resource_group_name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = each.value.address_prefixes + private_endpoint_network_policies = each.value.private_endpoint_network_policies + private_link_service_network_policies_enabled = each.value.private_link_service_network_policies_enabled + + dynamic "delegation" { + for_each = each.value.delegation != null ? [each.value.delegation] : [] + content { + name = "delegation" + + service_delegation { + name = delegation.value + } + } + } + + lifecycle { + ignore_changes = [ + delegation + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_virtual_network.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "VMProtectionAlerts" + } + + enabled_metric { + category = "AllMetrics" + } +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/outputs.tf new file mode 100644 index 0000000..b464308 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the virtual network" + value = azurerm_virtual_network.example.name +} + +output "vnet_id" { + description = "Specifies the resource id of the virtual network" + value = azurerm_virtual_network.example.id +} + +output "subnet_ids" { + description = "Contains a list of the the resource id of the subnets" + value = { for subnet in azurerm_subnet.example : subnet.name => subnet.id } +} + +output "subnet_ids_as_list" { + description = "Returns the list of the subnet ids as a list of strings." + value = [for subnet in azurerm_subnet.example : subnet.id] +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/variables.tf new file mode 100644 index 0000000..f8c0b0e --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/virtual_network/variables.tf @@ -0,0 +1,40 @@ +variable "resource_group_name" { + description = "Resource Group name" + type = string +} + +variable "location" { + description = "Location in which to deploy the network" + type = string +} + +variable "vnet_name" { + description = "VNET name" + type = string +} + +variable "address_space" { + description = "VNET address space" + type = list(string) +} + +variable "subnets" { + description = "Subnets configuration" + type = list(object({ + name = string + address_prefixes = list(string) + private_endpoint_network_policies = string + private_link_service_network_policies_enabled = bool + delegation = string + })) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Virtual Network resource." + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/main.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/main.tf new file mode 100644 index 0000000..a2eed3a --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/main.tf @@ -0,0 +1,71 @@ +resource "azurerm_linux_web_app" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + service_plan_id = var.service_plan_id + https_only = var.https_only + virtual_network_subnet_id = var.virtual_network_subnet_id + public_network_access_enabled = var.public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + identity { + type = "SystemAssigned" + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + vnet_route_all_enabled = var.vnet_route_all_enabled + application_stack { + dotnet_version = var.dotnet_version + } + } + + app_settings = var.app_settings + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_linux_web_app.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "AppServiceHTTPLogs" + } + + enabled_log { + category = "AppServiceConsoleLogs" + } + + enabled_log { + category = "AppServiceAppLogs" + } + + enabled_log { + category = "AppServiceAuditLogs" + } + + enabled_log { + category = "AppServiceIPSecAuditLogs" + } + + enabled_log { + category = "AppServicePlatformLogs" + } + + enabled_log { + category = "AppServiceAuthenticationLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/outputs.tf new file mode 100644 index 0000000..d7b6981 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/outputs.tf @@ -0,0 +1,24 @@ +output "id" { + value = azurerm_linux_web_app.example.id + description = "Specifies the resource id of the Web App" +} + +output "name" { + value = azurerm_linux_web_app.example.name + description = "Specifies the name of the Web App" +} + +output "default_hostname" { + value = azurerm_linux_web_app.example.default_hostname + description = "Specifies the default hostname of the Web App" +} + +output "outbound_ip_addresses" { + value = azurerm_linux_web_app.example.outbound_ip_addresses + description = "Specifies the outbound IP addresses of the Web App" +} + +output "principal_id" { + value = azurerm_linux_web_app.example.identity[0].principal_id + description = "Specifies the Principal ID of the System Assigned Managed Identity" +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/variables.tf new file mode 100644 index 0000000..81e6679 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/modules/web_app/variables.tf @@ -0,0 +1,89 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the Web App." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Web App." + type = string +} + +variable "service_plan_id" { + description = "(Required) Specifies the ID of the App Service Plan within which to create this Web App." + type = string +} + +variable "https_only" { + description = "(Optional) Specifies whether the Web App requires HTTPS connections." + type = bool + default = false +} + +variable "virtual_network_subnet_id" { + description = "(Optional) The subnet id which will be used by this Web App for regional virtual network integration." + type = string + default = null +} + +variable "vnet_route_all_enabled" { + description = "(Optional) Specifies whether to route all traffic from the Web App into the virtual network. This is only applicable if virtual_network_subnet_id is specified. Defaults to false." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "always_on" { + description = "(Optional) Specifies whether the Web App is Always On enabled." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Web App." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests." + type = string + default = "1.2" +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "app_settings" { + description = "(Optional) A map of key-value pairs for App Settings." + type = map(string) + default = {} +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/outputs.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/outputs.tf new file mode 100644 index 0000000..0faff98 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/outputs.tf @@ -0,0 +1,23 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "cosmosdb_account_name" { + value = module.cosmosdb_mongodb.name +} + +output "cosmosdb_document_endpoint" { + value = module.cosmosdb_mongodb.endpoint +} + +output "app_service_plan_name" { + value = module.app_service_plan.name +} + +output "web_app_name" { + value = module.web_app.name +} + +output "web_app_url" { + value = module.web_app.default_hostname +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/providers.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/providers.tf new file mode 100644 index 0000000..1f06025 --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/providers.tf @@ -0,0 +1,24 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=5.1.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "azure.localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/terraform.tfvars b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/terraform.tfvars new file mode 100644 index 0000000..919af4f --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/terraform.tfvars @@ -0,0 +1,3 @@ +prefix = "local" +suffix = "test" +location = "westeurope" \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/variables.tf b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/variables.tf new file mode 100644 index 0000000..60f05dd --- /dev/null +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/terraform/variables.tf @@ -0,0 +1,298 @@ +variable "prefix" { + description = "(Optional) Specifies the prefix for the name of the Azure resources." + type = string + default = "local" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "(Optional) Specifies the suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "(Required) Specifies the location for all resources." + type = string + default = "westeurope" +} + +variable "primary_region" { + description = "(Required) Specifies the primary region for the Azure Cosmos DB account." + type = string + default = "westeurope" +} + +variable "secondary_region" { + description = "(Required) Specifies the secondary region for the Azure Cosmos DB account." + type = string + default = "northeurope" +} + +variable "mongodb_server_version" { + description = "(Optional) Specifies the version of MongoDB API for the Azure Cosmos DB account." + type = string + default = "7.0" + + validation { + condition = contains([ + "3.2", + "3.6", + "4.0", + "4.2", + "5.0", + "6.0", + "7.0", + "8.0" + ], var.mongodb_server_version) + error_message = "The mongodb_server_version must be one of the supported versions: 3.2, 3.6, 4.0, 4.2, 5.0, 6.0, 7.0, 8.0." + } +} + +variable "database_throughput" { + description = "(Optional) Specifies the throughput for the MongoDB database." + type = number + default = 400 +} + +variable "consistency_level" { + description = "(Required) Specifies the consistency level for the Azure Cosmos DB account." + type = string + default = "Eventual" + + validation { + condition = contains([ + "Strong", + "BoundedStaleness", + "Session", + "Eventual" + ], var.consistency_level) + error_message = "The consistency_level must be one of the allowed values." + } +} + +variable "cosmosdb_database_name" { + description = "(Optional) Specifies the name of the Azure Cosmos DB for MongoDB database." + type = string + default = "sampledb" +} + +variable "cosmosdb_collection_name" { + description = "(Optional) Specifies the name of the Azure Cosmos DB for MongoDB collection." + type = string + default = "activities" +} + +variable "mongodb_index_keys" { + description = "A list of field names for which to create single-field indexes on the MongoDB collection." + type = list(string) + default = ["_id", "username", "activity", "timestamp"] +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan. Possible values include Windows, Linux, and WindowsContainer. Changing this forces a new resource to be created." + type = string + default = "Linux" + + validation { + condition = contains([ + "Windows", + "Linux", + "WindowsContainer" + ], var.os_type) + error_message = "The os_type must be either 'Windows', 'Linux', or 'WindowsContainer'." + } +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "sku_tier" { + description = "(Optional) Specifies the tier name for the hosting plan." + type = string + default = "Standard" + + validation { + condition = contains([ + "Basic", + "Standard", + "ElasticPremium", + "Premium", + "PremiumV2", + "Premium0V3", + "PremiumV3", + "PremiumMV3", + "Isolated", + "IsolatedV2", + "WorkflowStandard", + "FlexConsumption" + ], var.sku_tier) + error_message = "The sku_tier must be one of the allowed values." + } +} +variable "sku_name" { + description = "(Optional) Specifies the SKU name for the hosting plan." + type = string + default = "S1" + + validation { + condition = contains([ + "B1", "B2", "B3", + "S1", "S2", "S3", + "EP1", "EP2", "EP3", + "P1", "P2", "P3", + "P1V2", "P2V2", "P3V2", + "P0V3", "P1V3", "P2V3", "P3V3", + "P1MV3", "P2MV3", "P3MV3", "P4MV3", "P5MV3", + "I1", "I2", "I3", + "I1V2", "I2V2", "I3V2", "I4V2", "I5V2", "I6V2", + "WS1", "WS2", "WS3", + "FC1" + ], var.sku_name) + error_message = "The sku_name must be one of the allowed values." + } +} + +variable "dotnet_version" { + description = "(Optional) Specifies the version of .NET to run. Possible values include 8.0, 9.0 and 10.0." + type = string + default = "10.0" + + validation { + condition = contains(["8.0", "9.0", "10.0"], var.dotnet_version) + error_message = "The dotnet_version must be one of the supported versions: 8.0, 9.0, 10.0." + } +} + +variable "https_only" { + description = "(Optional) Specifies whether the Linux Web App require HTTPS connections. Defaults to false." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests. Possible values include: 1.0, 1.1, 1.2 and 1.3. Defaults to 1.2." + type = string + default = "1.2" + + validation { + condition = contains([ + "1.0", + "1.1", + "1.2", + "1.3" + ], var.minimum_tls_version) + error_message = "The minimum_tls_version must be one of the allowed values." + } +} + +variable "always_on" { + description = "(Optional) Specifies whether the Linux Web App is Always On enabled. Defaults to true." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Linux Web App." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "login_name" { + description = "(Required) Specifies the login name for the application." + type = string + default = "paolo" +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} + +variable "vnet_name" { + description = "Specifies the name of the virtual network." + default = "VNet" + type = string +} + +variable "vnet_address_space" { + description = "Specifies the address space of the virtual network." + default = ["10.0.0.0/8"] + type = list(string) +} + +variable "webapp_subnet_name" { + description = "Specifies the name of the web app subnet." + default = "app-subnet" + type = string +} + +variable "webapp_subnet_address_prefix" { + description = "Specifies the address prefix of the web app subnet." + default = ["10.0.0.0/24"] + type = list(string) +} + +variable "pe_subnet_name" { + description = "Specifies the name of the subnet that contains the private endpoints." + default = "pe-subnet" + type = string +} + +variable "pe_subnet_address_prefix" { + description = "Specifies the address prefix of the subnet that contains the private endpoints." + default = ["10.0.1.0/24"] + type = list(string) +} + +variable "nat_gateway_name" { + description = "(Required) Specifies the name of the NAT Gateway" + type = string + default = "NatGateway" +} + +variable "nat_gateway_sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "nat_gateway_idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "nat_gateway_zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = ["1"] +} + +variable "websites_port" { + description = "(Optional) Specifies the port on which the Web App will listen. Defaults to 8000." + type = number + default = 8000 +} \ No newline at end of file diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/visio/architecture.vsdx b/samples/web-app-cosmosdb-mongodb-api/dotnet/visio/architecture.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..ea0bb4debfb35f1427f8cade7498ad174a864a12 GIT binary patch literal 579554 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
2s7j%1u?tCk1+?1IYwUJ#0JtPz2edFhBtkT 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 z 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

)O@ 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

A%9I;ra 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⁣46^_T- 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 + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `scripts` folder: + +```bash +cd samples/web-app-cosmosdb-nosql-api/dotnet/scripts +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +WEB_APP_NAME="${PREFIX}-webapp-nosql-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${WEB_APP_NAME}" +COSMOSDB_ACCOUNT_NAME="${WEB_APP_NAME}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check Azure Cosmos DB account +echo -e "\n[$COSMOSDB_ACCOUNT_NAME] cosmos db account:\n" +az cosmosdb show \ + --name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,DocumentEndpoint:documentEndpoint,Kind:kind}' \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure CLI Documentation](https://docs.microsoft.com/en-us/cli/azure/) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/call-web-app.sh b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/call-web-app.sh new file mode 100755 index 0000000..a82964c --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/call-web-app.sh @@ -0,0 +1,199 @@ +#!/bin/bash + +get_docker_container_name_by_prefix() { + local app_prefix="$1" + local container_name + + # Check if Docker is running + if ! docker info >/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 80) + echo "Getting the host port mapped to internal port 80 in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "80") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + exit 1 + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl --max-time 10 http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --max-time 10 --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl --max-time 10 -s "http://$container_ip/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl --max-time 10 -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl --max-time 10 -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh new file mode 100755 index 0000000..56904dd --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh @@ -0,0 +1,126 @@ +#!/bin/bash + + +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-nosql-${SUFFIX}" +COSMOSDB_ACCOUNT_NAME="${PREFIX}-nosqlapi-${SUFFIX}" +ZIPFILE="${WEB_APP_NAME}.zip" + +RANDOM_SUFFIX=$(echo $RANDOM) +NEW_DB_NAME="vacationplanner_${RANDOM_SUFFIX}" +AZURECOSMOSDB_DATABASENAME=$NEW_DB_NAME +AZURECOSMOSDB_CONTAINERNAME="activities_${RANDOM_SUFFIX}" +AURECOSMOSDB_PARTITION_KEY="/username" + +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists" + echo "Creating resource group [$RESOURCE_GROUP_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1> /dev/null \ + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created." + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists." +fi + +echo "Create CosmosDB NoSQL Account" + export AZURECOSMOSDB_ENDPOINT=$(az cosmosdb create \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $WEB_APP_NAME \ + --locations regionName=$LOCATION \ + --query "documentEndpoint" \ + --output tsv) + +echo "Account created" +echo "AZURECOSMOSDB_ENDPOINT set to $AZURECOSMOSDB_ENDPOINT" + +echo "Create CosmosDB NoSQL Database" +az cosmosdb sql database create \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $AZURECOSMOSDB_DATABASENAME \ + --account-name $WEB_APP_NAME + +echo "Create CosmosDB NoSQL Container" +az cosmosdb sql container create \ + --resource-group $RESOURCE_GROUP_NAME \ + --account-name $WEB_APP_NAME \ + --database-name $AZURECOSMOSDB_DATABASENAME \ + --name $AZURECOSMOSDB_CONTAINERNAME \ + --partition-key-path $AURECOSMOSDB_PARTITION_KEY \ + --throughput 400 + +echo "Fetching DB Account primary master key" +export AZURECOSMOSDB_PRIMARY_KEY=$(az cosmosdb keys list \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $WEB_APP_NAME \ + --query "primaryMasterKey" \ + --output tsv) +echo "Primary master key is $AZURECOSMOSDB_PRIMARY_KEY" + +echo "Creating App service" +az appservice plan create --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP_NAME --sku B1 --is-linux +echo "App service created" + +echo "Creating Web App" +az webapp create --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP_NAME --plan $WEB_APP_NAME --runtime DOTNETCORE:10.0 +echo "Web App created" + +echo "Configure appsettings environment variables" +az webapp config appsettings set \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $WEB_APP_NAME \ + --settings AZURECOSMOSDB_ENDPOINT=$AZURECOSMOSDB_ENDPOINT \ + AZURECOSMOSDB_DATABASENAME=$AZURECOSMOSDB_DATABASENAME \ + AZURECOSMOSDB_CONTAINERNAME=$AZURECOSMOSDB_CONTAINERNAME \ + AZURECOSMOSDB_PRIMARY_KEY=$AZURECOSMOSDB_PRIMARY_KEY + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $WEB_APP_NAME + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +echo "Using az webapp deploy command for LocalStack emulator environment." +az webapp deploy \ + --resource-group $RESOURCE_GROUP_NAME \ + --name $WEB_APP_NAME \ + --src-path ${ZIPFILE} \ + --type zip \ + --async true + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/validate.sh b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/validate.sh new file mode 100755 index 0000000..542412a --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/validate.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +WEB_APP_NAME="${PREFIX}-webapp-nosql-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${WEB_APP_NAME}" +COSMOSDB_ACCOUNT_NAME="${WEB_APP_NAME}" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,State:state,Location:location,DefaultHostName:defaultHostName}' \ + --output table \ + --only-show-errors + +# Check Azure Cosmos DB account +echo -e "\n[$COSMOSDB_ACCOUNT_NAME] cosmos db account:\n" +az cosmosdb show \ + --name "$COSMOSDB_ACCOUNT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,DocumentEndpoint:documentEndpoint,Kind:kind}' \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Models/Activity.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Models/Activity.cs new file mode 100644 index 0000000..c39b073 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Models/Activity.cs @@ -0,0 +1,4 @@ +namespace VacationPlanner.Models; + +///

A planned vacation activity: the store's identifier plus the free-text description. +public sealed record Activity(string Id, string Text); diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml new file mode 100644 index 0000000..386fa85 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml @@ -0,0 +1,2 @@ +@page "/delete/{id}" +@model DeleteModel diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs new file mode 100644 index 0000000..2d9f0e9 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +/// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. +public class DeleteModel(IActivityStore store) : PageModel +{ + public IActionResult OnGet() => RedirectToPage("/Index"); + + public async Task OnPostAsync(string id, CancellationToken cancellationToken) + { + if (!string.IsNullOrWhiteSpace(id)) + { + await store.DeleteAsync(id, cancellationToken); + TempData["Flash"] = "Activity deleted successfully."; + } + + return RedirectToPage("/Index"); + } +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml new file mode 100644 index 0000000..bd617e2 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml @@ -0,0 +1,265 @@ +@page +@model IndexModel + + + + + + Vacation Planner + + + + + + + + + +
+
+

🌴 Vacation Planner

+

@Model.Activities.Count activit@(Model.Activities.Count != 1 ? "ies" : "y") planned

+
+
+ + +
+
+ + +
+ + + + + + + + + @foreach (var activity in Model.Activities) + { + + + + + + } + @if (Model.Activities.Count == 0) + { + + + + } + +
ActivityActions
@activity.Text + + +
+ +
+
No vacation plans yet — add your first activity!
+
+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs new file mode 100644 index 0000000..c2d1287 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using VacationPlanner.Models; +using VacationPlanner.Services; + +namespace VacationPlanner.Pages; + +public class IndexModel(IActivityStore store) : PageModel +{ + public IReadOnlyList Activities { get; private set; } = []; + + /// Flash messages set by the previous request (the equivalent of Flask's flash()). + public IReadOnlyList Flashes => TempData["Flash"] is string message ? [message] : []; + + [BindProperty(Name = "activity")] + public string? Activity { get; set; } + + [BindProperty(Name = "row_id")] + public string? RowId { get; set; } + + public async Task OnGetAsync(CancellationToken cancellationToken) + { + Activities = await store.ListAsync(cancellationToken); + } + + public async Task OnPostAsync(CancellationToken cancellationToken) + { + var text = Activity?.Trim(); + var id = RowId?.Trim(); + if (!string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(id)) + { + await store.UpdateAsync(id, text, cancellationToken); + TempData["Flash"] = "Activity updated."; + } + else + { + await store.AddAsync(text, cancellationToken); + TempData["Flash"] = "Activity added."; + } + } + + return RedirectToPage(); + } +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/_ViewImports.cshtml b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..ec62511 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using VacationPlanner +@using VacationPlanner.Models +@namespace VacationPlanner.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs new file mode 100644 index 0000000..ce4f77f --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs @@ -0,0 +1,31 @@ +using VacationPlanner.Services; + +var builder = WebApplication.CreateBuilder(args); + +// Code deployments built by Oryx export ASPNETCORE_URLS; custom images and local runs only set PORT. +if (Environment.GetEnvironmentVariable("ASPNETCORE_URLS") is null + && Environment.GetEnvironmentVariable("PORT") is { Length: > 0 } port) +{ + builder.WebHost.UseUrls($"http://*:{port}"); +} + +// Read and validate the configuration up front so a misconfigured deployment fails at startup. +var cosmosOptions = CosmosOptions.FromEnvironment(); + +builder.Services.AddRazorPages(); +builder.Services.AddSingleton(sp => + new CosmosActivityStore(cosmosOptions, sp.GetRequiredService>())); +builder.Services.AddHostedService(sp => + new StoreInitializer(sp.GetRequiredService(), sp.GetRequiredService>())); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.MapRazorPages(); + +app.MapGet("/health", async (IActivityStore store, CancellationToken cancellationToken) => + await store.IsHealthyAsync(cancellationToken) + ? Results.Json(new { status = "ok" }) + : Results.Json(new { status = "unavailable" }, statusCode: StatusCodes.Status503ServiceUnavailable)); + +app.Run(); diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityDocument.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityDocument.cs new file mode 100644 index 0000000..c3e2552 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityDocument.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace VacationPlanner.Services; + +/// The Cosmos DB item shape shared with the Python sample: {id, username, activity, timestamp}. +public sealed class ActivityDocument +{ + [JsonProperty("id")] + public string Id { get; set; } = ""; + + [JsonProperty("username")] + public string Username { get; set; } = ""; + + [JsonProperty("activity")] + public string Activity { get; set; } = ""; + + [JsonProperty("timestamp")] + public string Timestamp { get; set; } = ""; +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityId.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityId.cs new file mode 100644 index 0000000..8654aaf --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityId.cs @@ -0,0 +1,15 @@ +using System.Security.Cryptography; +using System.Text; + +namespace VacationPlanner.Services; + +/// MD5 of username + activity + timestamp: the id scheme shared by the Vacation Planner samples. +public static class ActivityId +{ + public static string Create(string username, string activity) + { + var timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"); + var hash = MD5.HashData(Encoding.UTF8.GetBytes($"{username}_{activity}_{timestamp}")); + return Convert.ToHexStringLower(hash); + } +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs new file mode 100644 index 0000000..bc92fb7 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs @@ -0,0 +1,106 @@ +using System.Net; +using Microsoft.Azure.Cosmos; +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Activities as items in an Azure Cosmos DB for NoSQL container partitioned by /username. +public sealed class CosmosActivityStore : IActivityStore +{ + private readonly CosmosClient _client; + private readonly CosmosOptions _options; + private readonly ILogger _logger; + private Container? _container; + + public CosmosActivityStore(CosmosOptions options, ILogger logger) + { + _options = options; + _logger = logger; + // Gateway mode talks plain HTTPS to the account endpoint, which is what the LocalStack emulator + // exposes; Direct mode (the SDK default) needs the TCP replica endpoints of a real account. + _client = new CosmosClient(options.Endpoint, options.Key, new CosmosClientOptions + { + ConnectionMode = ConnectionMode.Gateway, + LimitToEndpoint = true, + }); + } + + public async Task InitializeAsync(CancellationToken cancellationToken) + { + var database = await _client.CreateDatabaseIfNotExistsAsync(_options.DatabaseName, cancellationToken: cancellationToken); + var container = await database.Database.CreateContainerIfNotExistsAsync( + new ContainerProperties(_options.ContainerName, "/username"), throughput: 400, cancellationToken: cancellationToken); + _container = container.Container; + _logger.LogInformation("Cosmos DB database '{Database}' and container '{Container}' are ready", _options.DatabaseName, _options.ContainerName); + } + + public async Task> ListAsync(CancellationToken cancellationToken) + { + var query = new QueryDefinition("SELECT * FROM c WHERE c.username = @username").WithParameter("@username", _options.Username); + var activities = new List(); + using var iterator = Container.GetItemQueryIterator(query); + while (iterator.HasMoreResults) + { + foreach (var document in await iterator.ReadNextAsync(cancellationToken)) + { + activities.Add(new Activity(document.Id, document.Activity)); + } + } + + return activities; + } + + public Task AddAsync(string text, CancellationToken cancellationToken) + { + var document = new ActivityDocument + { + Id = ActivityId.Create(_options.Username, text), + Username = _options.Username, + Activity = text, + Timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"), + }; + return Container.CreateItemAsync(document, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + } + + public async Task UpdateAsync(string id, string text, CancellationToken cancellationToken) + { + try + { + var item = await Container.ReadItemAsync(id, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + item.Resource.Activity = text; + await Container.ReplaceItemAsync(item.Resource, id, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + } + catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound) + { + _logger.LogWarning("Activity {Id} was not found; nothing to update", id); + } + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + try + { + await Container.DeleteItemAsync(id, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + } + catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound) + { + _logger.LogWarning("Activity {Id} was not found; nothing to delete", id); + } + } + + public async Task IsHealthyAsync(CancellationToken cancellationToken) + { + try + { + await Container.ReadContainerAsync(cancellationToken: cancellationToken); + return true; + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Cosmos DB health check failed"); + return false; + } + } + + private Container Container => _container ?? _client.GetContainer(_options.DatabaseName, _options.ContainerName); +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosOptions.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosOptions.cs new file mode 100644 index 0000000..4412f8f --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosOptions.cs @@ -0,0 +1,26 @@ +namespace VacationPlanner.Services; + +/// Settings read from the same environment variables the Python sample uses. +public sealed record CosmosOptions(string Endpoint, string Key, string DatabaseName, string ContainerName, string Username) +{ + public static CosmosOptions FromEnvironment() + { + var username = Environment.GetEnvironmentVariable("LOGIN_NAME") ?? "alex"; + if (string.IsNullOrWhiteSpace(username)) + { + throw new InvalidOperationException("Username cannot be empty"); + } + + return new CosmosOptions( + Endpoint: Require("AZURECOSMOSDB_ENDPOINT"), + Key: Require("AZURECOSMOSDB_PRIMARY_KEY"), + DatabaseName: Require("AZURECOSMOSDB_DATABASENAME"), + ContainerName: Require("AZURECOSMOSDB_CONTAINERNAME"), + Username: username); + } + + private static string Require(string name) => + Environment.GetEnvironmentVariable(name) is { Length: > 0 } value + ? value + : throw new InvalidOperationException($"Missing required environment variable: {name}"); +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/IActivityStore.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/IActivityStore.cs new file mode 100644 index 0000000..3b24e5f --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/IActivityStore.cs @@ -0,0 +1,21 @@ +using VacationPlanner.Models; + +namespace VacationPlanner.Services; + +/// Persistence for the planner's activities. Every call goes to the backing store; nothing is cached in-process. +public interface IActivityStore +{ + /// Creates whatever the store needs (container, table, collection) before the first request. + Task InitializeAsync(CancellationToken cancellationToken); + + Task> ListAsync(CancellationToken cancellationToken); + + Task AddAsync(string text, CancellationToken cancellationToken); + + Task UpdateAsync(string id, string text, CancellationToken cancellationToken); + + Task DeleteAsync(string id, CancellationToken cancellationToken); + + /// Cheap connectivity probe used by GET /health. + Task IsHealthyAsync(CancellationToken cancellationToken); +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/StoreInitializer.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/StoreInitializer.cs new file mode 100644 index 0000000..c74eb50 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/StoreInitializer.cs @@ -0,0 +1,33 @@ +namespace VacationPlanner.Services; + +/// +/// Runs at startup with a bounded retry, so the app fails fast +/// (and the container exits) when the backing service never becomes reachable. +/// +public sealed class StoreInitializer( + IActivityStore store, + ILogger logger, + int attempts = 1, + TimeSpan delay = default) : IHostedService +{ + public async Task StartAsync(CancellationToken cancellationToken) + { + for (var attempt = 1; ; attempt++) + { + try + { + await store.InitializeAsync(cancellationToken); + logger.LogInformation("Activity store initialized after {Attempts} attempt(s).", attempt); + return; + } + catch (Exception ex) when (attempt < attempts && !cancellationToken.IsCancellationRequested) + { + logger.LogWarning(ex, "Activity store not ready (attempt {Attempt}/{Attempts}); retrying in {Delay}s.", + attempt, attempts, delay.TotalSeconds); + await Task.Delay(delay, cancellationToken); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/VacationPlanner.csproj b/samples/web-app-cosmosdb-nosql-api/dotnet/src/VacationPlanner.csproj new file mode 100644 index 0000000..ee66710 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/VacationPlanner.csproj @@ -0,0 +1,12 @@ + + + net10.0 + enable + enable + VacationPlanner + + + + + + diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/appsettings.json b/samples/web-app-cosmosdb-nosql-api/dotnet/src/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/wwwroot/favicon.ico b/samples/web-app-cosmosdb-nosql-api/dotnet/src/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b1d5cf37d81c073dbacd66df3f69d9240359dda GIT binary patch literal 36791 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 D Date: Tue, 8 Sep 2026 14:41:41 +0200 Subject: [PATCH 08/13] Log requests and store operations in the .NET web app samples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The port kept only the startup and store-initialization logs, so nothing appeared in the container log while adding, updating or deleting an activity — unlike the Python samples, which log a gunicorn access line per request, the store operation (with the affected documents) and an application-level "Activity added/updated" line. Add the same three layers to every .NET sample: a one-line access log ("POST / -> 302 in 45.3ms") from a small middleware, the store operation with its documents or affected-row counts, and "Activity added/updated/deleted" from the page handlers. Each store logs at the granularity its Python counterpart does: full documents for Cosmos DB (MongoDB and NoSQL APIs), blob names and sizes for Blob Storage, row counts and ids for SQL Database, retrieval counts for the MySQL and PostgreSQL flexible servers. Co-Authored-By: Claude Opus 5 (1M context) --- .../dotnet/src/Pages/Delete.cshtml.cs | 3 +- .../dotnet/src/Pages/Index.cshtml.cs | 4 +- .../dotnet/src/Program.cs | 18 +++++++ .../dotnet/src/Services/MongoActivityStore.cs | 49 ++++++++++++++++--- .../dotnet/src/Pages/Delete.cshtml.cs | 3 +- .../dotnet/src/Pages/Index.cshtml.cs | 4 +- .../dotnet/src/Program.cs | 18 +++++++ .../src/Services/CosmosActivityStore.cs | 18 ++++++- .../dotnet/src/Program.cs | 18 +++++++ .../dotnet/src/Pages/Delete.cshtml.cs | 3 +- .../dotnet/src/Pages/Index.cshtml.cs | 4 +- .../dotnet/src/Program.cs | 18 +++++++ .../dotnet/src/Services/BlobActivityStore.cs | 14 ++++++ .../dotnet/src/Pages/Delete.cshtml.cs | 3 +- .../dotnet/src/Pages/Index.cshtml.cs | 4 +- .../dotnet/src/Program.cs | 18 +++++++ .../dotnet/src/Services/MySqlActivityStore.cs | 5 ++ .../dotnet/src/Pages/Delete.cshtml.cs | 3 +- .../dotnet/src/Pages/Index.cshtml.cs | 4 +- .../dotnet/src/Program.cs | 18 +++++++ .../src/Services/PostgresActivityStore.cs | 5 ++ .../dotnet/src/Pages/Delete.cshtml.cs | 3 +- .../dotnet/src/Pages/Index.cshtml.cs | 4 +- .../dotnet/src/Program.cs | 18 +++++++ .../dotnet/src/Services/SqlActivityStore.cs | 11 +++++ 25 files changed, 249 insertions(+), 21 deletions(-) diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs index 8412e78..84277d4 100644 --- a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Delete.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; /// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. -public class DeleteModel(IActivityStore store) : PageModel +public class DeleteModel(IActivityStore store, ILogger logger) : PageModel { public IActionResult OnGet() => RedirectToPage("/Index"); @@ -14,6 +14,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel if (!string.IsNullOrWhiteSpace(id)) { await store.DeleteAsync(id, cancellationToken); + logger.LogInformation("Activity deleted: {Id}", id); TempData["Flash"] = "Activity deleted."; } diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs index 94b6b33..904f8c5 100644 --- a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Pages/Index.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; -public class IndexModel(IActivityStore store) : PageModel +public class IndexModel(IActivityStore store, ILogger logger) : PageModel { public IReadOnlyList Activities { get; private set; } = []; @@ -32,11 +32,13 @@ public async Task OnPostAsync(CancellationToken cancellationToken if (!string.IsNullOrEmpty(id)) { await store.UpdateAsync(id, text, cancellationToken); + logger.LogInformation("Activity updated: {Id}", id); TempData["Flash"] = "Activity updated!"; } else { await store.AddAsync(text, cancellationToken); + logger.LogInformation("Activity added: {Activity}", text); TempData["Flash"] = "Activity added!"; } } diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs index f0dbb34..310f3c3 100644 --- a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner.Services; var builder = WebApplication.CreateBuilder(args); @@ -20,6 +21,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs index 9e2ce76..0b4e42f 100644 --- a/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs +++ b/samples/web-app-cosmosdb-mongodb-api/dotnet/src/Services/MongoActivityStore.cs @@ -1,4 +1,5 @@ using MongoDB.Bson; +using MongoDB.Bson.IO; using MongoDB.Driver; using VacationPlanner.Models; @@ -12,6 +13,9 @@ public sealed class MongoActivityStore : IActivityStore private readonly MongoOptions _options; private readonly ILogger _logger; + /// Documents are logged indented, like the Python sample's json.dumps(indent=3) output. + private static readonly JsonWriterSettings Indented = new() { Indent = true }; + public MongoActivityStore(MongoOptions options, ILogger logger) { _options = options; @@ -45,10 +49,16 @@ public async Task> ListAsync(CancellationToken cancellat { var filter = Builders.Filter.Eq("username", _options.Username); var documents = await _collection.Find(filter).ToListAsync(cancellationToken); + _logger.LogInformation( + "Retrieved {Count} document(s) from collection '{Collection}': {Documents}", + documents.Count, + _options.CollectionName, + documents.ToJson(Indented) + ); return documents.Select(d => new Activity(d["_id"].AsString, d["activity"].AsString)).ToList(); } - public Task AddAsync(string text, CancellationToken cancellationToken) + public async Task AddAsync(string text, CancellationToken cancellationToken) { var document = new BsonDocument { @@ -57,17 +67,42 @@ public Task AddAsync(string text, CancellationToken cancellationToken) ["activity"] = text, ["timestamp"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"), }; - return _collection.InsertOneAsync(document, cancellationToken: cancellationToken); + await _collection.InsertOneAsync(document, cancellationToken: cancellationToken); + _logger.LogInformation( + "Inserted document into collection '{Collection}': {Document}", + _options.CollectionName, + document.ToJson(Indented) + ); } - public Task UpdateAsync(string id, string text, CancellationToken cancellationToken) => - _collection.UpdateOneAsync( + public async Task UpdateAsync(string id, string text, CancellationToken cancellationToken) + { + var result = await _collection.UpdateOneAsync( Builders.Filter.Eq("_id", id), Builders.Update.Set("activity", text), - cancellationToken: cancellationToken); + cancellationToken: cancellationToken + ); + _logger.LogInformation( + "Updated {Count} document(s) with id {Id} in collection '{Collection}'", + result.ModifiedCount, + id, + _options.CollectionName + ); + } - public Task DeleteAsync(string id, CancellationToken cancellationToken) => - _collection.DeleteOneAsync(Builders.Filter.Eq("_id", id), cancellationToken); + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + var result = await _collection.DeleteOneAsync( + Builders.Filter.Eq("_id", id), + cancellationToken + ); + _logger.LogInformation( + "Deleted {Count} document(s) with id {Id} from collection '{Collection}'", + result.DeletedCount, + id, + _options.CollectionName + ); + } public async Task IsHealthyAsync(CancellationToken cancellationToken) { diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs index 2d9f0e9..fb0b87d 100644 --- a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; /// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. -public class DeleteModel(IActivityStore store) : PageModel +public class DeleteModel(IActivityStore store, ILogger logger) : PageModel { public IActionResult OnGet() => RedirectToPage("/Index"); @@ -14,6 +14,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel if (!string.IsNullOrWhiteSpace(id)) { await store.DeleteAsync(id, cancellationToken); + logger.LogInformation("Activity deleted: {Id}", id); TempData["Flash"] = "Activity deleted successfully."; } diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs index c2d1287..758fa51 100644 --- a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; -public class IndexModel(IActivityStore store) : PageModel +public class IndexModel(IActivityStore store, ILogger logger) : PageModel { public IReadOnlyList Activities { get; private set; } = []; @@ -32,11 +32,13 @@ public async Task OnPostAsync(CancellationToken cancellationToken if (!string.IsNullOrEmpty(id)) { await store.UpdateAsync(id, text, cancellationToken); + logger.LogInformation("Activity updated: {Id}", id); TempData["Flash"] = "Activity updated."; } else { await store.AddAsync(text, cancellationToken); + logger.LogInformation("Activity added: {Activity}", text); TempData["Flash"] = "Activity added."; } } diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs index ce4f77f..92ddf01 100644 --- a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner.Services; var builder = WebApplication.CreateBuilder(args); @@ -20,6 +21,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs index bc92fb7..d701e0e 100644 --- a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs @@ -47,10 +47,16 @@ public async Task> ListAsync(CancellationToken cancellat } } + _logger.LogInformation( + "Retrieved {Count} item(s) for user: {Username} from container '{Container}'", + activities.Count, + _options.Username, + _options.ContainerName + ); return activities; } - public Task AddAsync(string text, CancellationToken cancellationToken) + public async Task AddAsync(string text, CancellationToken cancellationToken) { var document = new ActivityDocument { @@ -59,7 +65,13 @@ public Task AddAsync(string text, CancellationToken cancellationToken) Activity = text, Timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"), }; - return Container.CreateItemAsync(document, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + await Container.CreateItemAsync(document, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + _logger.LogInformation( + "Created item {Id} in container '{Container}': {Activity}", + document.Id, + _options.ContainerName, + text + ); } public async Task UpdateAsync(string id, string text, CancellationToken cancellationToken) @@ -69,6 +81,7 @@ public async Task UpdateAsync(string id, string text, CancellationToken cancella var item = await Container.ReadItemAsync(id, new PartitionKey(_options.Username), cancellationToken: cancellationToken); item.Resource.Activity = text; await Container.ReplaceItemAsync(item.Resource, id, new PartitionKey(_options.Username), cancellationToken: cancellationToken); + _logger.LogInformation("Updated item {Id} in container '{Container}'", id, _options.ContainerName); } catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { @@ -80,6 +93,7 @@ public async Task DeleteAsync(string id, CancellationToken cancellationToken) { try { + _logger.LogInformation("Deleting item {Id} from container '{Container}'", id, _options.ContainerName); await Container.DeleteItemAsync(id, new PartitionKey(_options.Username), cancellationToken: cancellationToken); } catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound) diff --git a/samples/web-app-custom-image/dotnet/src/Program.cs b/samples/web-app-custom-image/dotnet/src/Program.cs index b9d31ad..1cbbcdb 100644 --- a/samples/web-app-custom-image/dotnet/src/Program.cs +++ b/samples/web-app-custom-image/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner; var builder = WebApplication.CreateBuilder(args); @@ -13,6 +14,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs index 2d9f0e9..fb0b87d 100644 --- a/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-managed-identity/dotnet/src/Pages/Delete.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; /// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. -public class DeleteModel(IActivityStore store) : PageModel +public class DeleteModel(IActivityStore store, ILogger logger) : PageModel { public IActionResult OnGet() => RedirectToPage("/Index"); @@ -14,6 +14,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel if (!string.IsNullOrWhiteSpace(id)) { await store.DeleteAsync(id, cancellationToken); + logger.LogInformation("Activity deleted: {Id}", id); TempData["Flash"] = "Activity deleted successfully."; } diff --git a/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs index 02cdf62..cd0fd06 100644 --- a/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs +++ b/samples/web-app-managed-identity/dotnet/src/Pages/Index.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; -public class IndexModel(IActivityStore store) : PageModel +public class IndexModel(IActivityStore store, ILogger logger) : PageModel { public IReadOnlyList Activities { get; private set; } = []; @@ -32,11 +32,13 @@ public async Task OnPostAsync(CancellationToken cancellationToken if (!string.IsNullOrEmpty(id)) { await store.UpdateAsync(id, text, cancellationToken); + logger.LogInformation("Activity updated: {Id}", id); TempData["Flash"] = "Activity updated successfully."; } else { await store.AddAsync(text, cancellationToken); + logger.LogInformation("Activity added: {Activity}", text); TempData["Flash"] = "Activity added successfully."; } } diff --git a/samples/web-app-managed-identity/dotnet/src/Program.cs b/samples/web-app-managed-identity/dotnet/src/Program.cs index 49ebcb7..1da1285 100644 --- a/samples/web-app-managed-identity/dotnet/src/Program.cs +++ b/samples/web-app-managed-identity/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner.Services; var builder = WebApplication.CreateBuilder(args); @@ -20,6 +21,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs b/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs index 6ea1fa2..d08d698 100644 --- a/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs +++ b/samples/web-app-managed-identity/dotnet/src/Services/BlobActivityStore.cs @@ -9,6 +9,7 @@ namespace VacationPlanner.Services; public sealed class BlobActivityStore : IActivityStore { private readonly BlobContainerClient _container; + private readonly ILogger _logger; public BlobActivityStore(BlobStorageOptions options, ILogger logger) { @@ -37,6 +38,7 @@ public BlobActivityStore(BlobStorageOptions options, ILogger } _container = service.GetBlobContainerClient(options.ContainerName); + _logger = logger; } public async Task InitializeAsync(CancellationToken cancellationToken) @@ -50,9 +52,19 @@ public async Task> ListAsync(CancellationToken cancellat await foreach (var blob in _container.GetBlobsAsync(cancellationToken: cancellationToken)) { var content = await _container.GetBlobClient(blob.Name).DownloadContentAsync(cancellationToken); + _logger.LogInformation( + "Found blob '{Blob}' with size {Size} bytes", + blob.Name, + blob.Properties.ContentLength + ); activities.Add(new Activity(blob.Name, content.Value.Content.ToString())); } + _logger.LogInformation( + "Retrieved {Count} blob(s) from container '{Container}'", + activities.Count, + _container.Name + ); return activities; } @@ -67,6 +79,7 @@ public Task AddAsync(string text, CancellationToken cancellationToken) public async Task DeleteAsync(string id, CancellationToken cancellationToken) { await _container.GetBlobClient(id).DeleteIfExistsAsync(cancellationToken: cancellationToken); + _logger.LogInformation("Deleted blob '{Blob}' from container '{Container}'", id, _container.Name); } public async Task IsHealthyAsync(CancellationToken cancellationToken) @@ -77,5 +90,6 @@ public async Task IsHealthyAsync(CancellationToken cancellationToken) private async Task UploadAsync(string name, string text, CancellationToken cancellationToken) { await _container.GetBlobClient(name).UploadAsync(new BinaryData(Encoding.UTF8.GetBytes(text)), overwrite: true, cancellationToken); + _logger.LogInformation("Uploaded blob '{Blob}' to container '{Container}'", name, _container.Name); } } diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs index 8412e78..84277d4 100644 --- a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; /// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. -public class DeleteModel(IActivityStore store) : PageModel +public class DeleteModel(IActivityStore store, ILogger logger) : PageModel { public IActionResult OnGet() => RedirectToPage("/Index"); @@ -14,6 +14,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel if (!string.IsNullOrWhiteSpace(id)) { await store.DeleteAsync(id, cancellationToken); + logger.LogInformation("Activity deleted: {Id}", id); TempData["Flash"] = "Activity deleted."; } diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs index 94b6b33..904f8c5 100644 --- a/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Pages/Index.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; -public class IndexModel(IActivityStore store) : PageModel +public class IndexModel(IActivityStore store, ILogger logger) : PageModel { public IReadOnlyList Activities { get; private set; } = []; @@ -32,11 +32,13 @@ public async Task OnPostAsync(CancellationToken cancellationToken if (!string.IsNullOrEmpty(id)) { await store.UpdateAsync(id, text, cancellationToken); + logger.LogInformation("Activity updated: {Id}", id); TempData["Flash"] = "Activity updated!"; } else { await store.AddAsync(text, cancellationToken); + logger.LogInformation("Activity added: {Activity}", text); TempData["Flash"] = "Activity added!"; } } diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs index a3c9810..ede6368 100644 --- a/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner.Services; var builder = WebApplication.CreateBuilder(args); @@ -24,6 +25,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs b/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs index 0529ad7..fd53ebc 100644 --- a/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs +++ b/samples/web-app-mysql-flexible-server/dotnet/src/Services/MySqlActivityStore.cs @@ -61,6 +61,11 @@ public async Task> ListAsync(CancellationToken cancellat activities.Add(new Activity(reader.GetString(0), reader.GetString(1))); } + logger.LogInformation( + "Retrieved {Count} activities for user: {Username}", + activities.Count, + options.Username + ); return activities; } diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs index 8412e78..84277d4 100644 --- a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Delete.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; /// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. -public class DeleteModel(IActivityStore store) : PageModel +public class DeleteModel(IActivityStore store, ILogger logger) : PageModel { public IActionResult OnGet() => RedirectToPage("/Index"); @@ -14,6 +14,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel if (!string.IsNullOrWhiteSpace(id)) { await store.DeleteAsync(id, cancellationToken); + logger.LogInformation("Activity deleted: {Id}", id); TempData["Flash"] = "Activity deleted."; } diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs index 94b6b33..904f8c5 100644 --- a/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Pages/Index.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; -public class IndexModel(IActivityStore store) : PageModel +public class IndexModel(IActivityStore store, ILogger logger) : PageModel { public IReadOnlyList Activities { get; private set; } = []; @@ -32,11 +32,13 @@ public async Task OnPostAsync(CancellationToken cancellationToken if (!string.IsNullOrEmpty(id)) { await store.UpdateAsync(id, text, cancellationToken); + logger.LogInformation("Activity updated: {Id}", id); TempData["Flash"] = "Activity updated!"; } else { await store.AddAsync(text, cancellationToken); + logger.LogInformation("Activity added: {Activity}", text); TempData["Flash"] = "Activity added!"; } } diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs index da60184..88d860d 100644 --- a/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner.Services; var builder = WebApplication.CreateBuilder(args); @@ -24,6 +25,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs index 4430fed..2a1045d 100644 --- a/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs +++ b/samples/web-app-postgresql-flexible-server/dotnet/src/Services/PostgresActivityStore.cs @@ -56,6 +56,11 @@ public async Task> ListAsync(CancellationToken cancellat activities.Add(new Activity(reader.GetString(0), reader.GetString(1))); } + logger.LogInformation( + "Retrieved {Count} activities for user: {Username}", + activities.Count, + options.Username + ); return activities; } diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs index 8412e78..84277d4 100644 --- a/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; /// Handles POST /delete/{id}; the activity is addressed by its store id, never by its position in the list. -public class DeleteModel(IActivityStore store) : PageModel +public class DeleteModel(IActivityStore store, ILogger logger) : PageModel { public IActionResult OnGet() => RedirectToPage("/Index"); @@ -14,6 +14,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel if (!string.IsNullOrWhiteSpace(id)) { await store.DeleteAsync(id, cancellationToken); + logger.LogInformation("Activity deleted: {Id}", id); TempData["Flash"] = "Activity deleted."; } diff --git a/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs b/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs index c2d1287..758fa51 100644 --- a/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs +++ b/samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs @@ -5,7 +5,7 @@ namespace VacationPlanner.Pages; -public class IndexModel(IActivityStore store) : PageModel +public class IndexModel(IActivityStore store, ILogger logger) : PageModel { public IReadOnlyList Activities { get; private set; } = []; @@ -32,11 +32,13 @@ public async Task OnPostAsync(CancellationToken cancellationToken if (!string.IsNullOrEmpty(id)) { await store.UpdateAsync(id, text, cancellationToken); + logger.LogInformation("Activity updated: {Id}", id); TempData["Flash"] = "Activity updated."; } else { await store.AddAsync(text, cancellationToken); + logger.LogInformation("Activity added: {Activity}", text); TempData["Flash"] = "Activity added."; } } diff --git a/samples/web-app-sql-database/dotnet/src/Program.cs b/samples/web-app-sql-database/dotnet/src/Program.cs index bc8f65e..8b8356d 100644 --- a/samples/web-app-sql-database/dotnet/src/Program.cs +++ b/samples/web-app-sql-database/dotnet/src/Program.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using VacationPlanner.Services; var builder = WebApplication.CreateBuilder(args); @@ -38,6 +39,23 @@ var app = builder.Build(); +// One log line per request, the equivalent of the gunicorn access log the Python sample produces. +var requestLogger = app.Services.GetRequiredService().CreateLogger("VacationPlanner.Requests"); +app.Use( + async (context, next) => + { + var started = Stopwatch.GetTimestamp(); + await next(); + requestLogger.LogInformation( + "{Method} {Path} -> {StatusCode} in {Elapsed:0.0}ms", + context.Request.Method, + context.Request.Path, + context.Response.StatusCode, + Stopwatch.GetElapsedTime(started).TotalMilliseconds + ); + } +); + app.UseStaticFiles(); app.MapRazorPages(); diff --git a/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs b/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs index 60da5a4..c0ed077 100644 --- a/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs +++ b/samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs @@ -47,6 +47,11 @@ public async Task> ListAsync(CancellationToken cancellat activities.Add(new Activity(reader.GetGuid(0).ToString(), reader.GetString(1))); } + logger.LogInformation( + "Retrieved {Count} activities for user: {Username}", + activities.Count, + options.Username + ); return activities; } @@ -76,7 +81,10 @@ public async Task UpdateAsync(string id, string text, CancellationToken cancella if (rows == 0) { logger.LogWarning("No activity found with ID: {Id}", id); + return; } + + logger.LogInformation("Updated activity with ID: {Id}", id); } public async Task DeleteAsync(string id, CancellationToken cancellationToken) @@ -88,7 +96,10 @@ public async Task DeleteAsync(string id, CancellationToken cancellationToken) if (rows == 0) { logger.LogWarning("No activity found with ID: {Id}", id); + return; } + + logger.LogInformation("Deleted activity with ID: {Id}", id); } public async Task IsHealthyAsync(CancellationToken cancellationToken) From 1ef9095f37bcd159d0e41b809c529da6a6f044ea Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Tue, 8 Sep 2026 14:42:48 +0200 Subject: [PATCH 09/13] Update the architecture diagram of the Cosmos DB for MongoDB .NET sample The .NET sample now carries its own Visio drawing and rendered PNG instead of the copies inherited from the Python sibling. Co-Authored-By: Claude Opus 5 (1M context) --- .../dotnet/images/architecture.png | Bin 110103 -> 115382 bytes .../dotnet/visio/architecture.vsdx | Bin 579554 -> 312138 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/samples/web-app-cosmosdb-mongodb-api/dotnet/images/architecture.png b/samples/web-app-cosmosdb-mongodb-api/dotnet/images/architecture.png index ef6e11d5cccd8f0718f2f188899f852175bd2ed5..377dfbc00475239bec58e1ea67b4e0d275dbf69e 100644 GIT binary patch literal 115382 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
@rETl4Civ8lToq#5df#ZR+ryTxG-f+kjuSb>; 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 Iw#XF{&kv1AG|IzP|*dw}V`CPfJEU4^z* zFYK$-WsLw4rSEt}e2E_yyjpp9A_aT1pk31O~+!QJl_GElpE~)Gk^Syf~o-n*)s~9!wLx>Ve z>ss&qF1uJ=BAI2I^Db*=yq9!U8Mh;-ZuhwC?xZPw9gmIlWt9e?%8@0?&wKv|t^`xe z(0K)o-cF)&6hmS+(R89V2??(pnCHi5q>pKjVI~H<#_l9-qywkyZ%fLfb0nRNP8k0~;|Z=2tS@PE!abB2 zM=p;@OVDZ4o2W8j@D_y=7D+VHldhD@+jT9IZ>3o0`u>A?lLv{!wB_cY3Cp;1e)07C zg00{&h0ONR0fRpJZwQ@p>BjOfxQ8D}O}uk49S-BmmawwajSdsE#1%`ci)2Zejd zk2HgMmhyQOEje>%aTcF2J1PS@CKKAfe-_|1gkd22DQBXga@F(l@T3JO<1*`g;1S5w z_rWCxB?<~!1s+N`?uTY$en+Kl3$*RUeq5sZKD>6LJ*lLK+VN=oFAn(vBPRy*4%o>$+8I%; zjCy~-`jsVdScZ!Iwh8fQC)R7!iCr$?JAbY@S^`P43v<;9#kW#0<99r#B21$2irI(a zYoRmq(rYkR$jhS;JSko0db3%cWG`op15Pry7e3Le%A7L~`slGzDd*o2Uh_pus1(KX zX*dm2GNDWN2D=M*kes3rVe5^8#MmW{8(A>7VyPShXVR_OVB$@uIF4#~apJng z|Mdk~|GepO#3q}dTG$mn!_J|-+em}AvBH6{{&qv

wje^a~sR2HyLtu`O%F!Z43 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

Vqwp5QEl# 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 literal 110103 zcmcF~byQVd*Y80^1Vp4&N>sYLK|tvS=|;M{L*Ph*bhmVOH%NDPHyl8^@8WsBZ`|+x zcgG#?g>lA)Gxj-q@3rQd^A~gZOG^r&AiYC^Kp-e0!e3+|kf$o(HS^*Lc*l3WzZo2; zY`-em3RvrD+ZtJzzn3>M(}Tzx+P!CBc`vA^^PYhY{6WvkLC3;D$M&9*j-HNgj{les zd=9}@MB*#L?vr<~pQ90E$j*Vc5G{q3Z6FY2^v4(6=z{w#c=MS7p9DC+G!*$(8y*5z zXfE=FPu_8Me*sxd-tM0Fp0T~fvbpmspVn)#h=vtnX0%f3!qfa{_(|5zs_{wDW+QX6 z=Cisvg)hx=k>L%>{QS7O*~0wimWJq@%(z#*+_#C69gx^9H^#AX+{_mfu z#6p6(^W8V~VwhKRQekKfXVT%WSd!@s#X|W+92^7=49+ws&*9Kmaq?w^;I}2*Ldqyn z%`kSG&FO2$dTV1x_sgS|@dJqjmN;%2UfyOeFE3c7Y1Ir(8jmyr10$oETQVdO|M6Q` zr5?IHk9@q=2oo2%Q~0%Yqege@e+hp|@wj(#b8}NyUzo^OG#H52+w+FKgYuWU-#J?$ zLTjm2tE8P!rI57?QE*ubTyiB1pFvDtfSKJ->fm*Kc~`s=9nQa!+kf>ltW6`1Cu{ld zA6$#?1_sE)_!1vfX)t3FCedhP6=3U49h*ZbQYpc!vx7;TI8;hn@?-p{!M!{3O}4Np^;XE-oyrRrL1m&f#!zz}S4gMkc4$bcP|?$lAuHbF8vr#SiUc&AEui41ARs9(f!2wwl{Tq=HYHI3W793F)vsos)-Eph6KmMVe{HQYqf-lU*1&n<|;;-eD zlxhq|J~-Q*Y!2*C%#<4-C%h1e+?8WzmW1}j&}JLA<&Sf({6b7ZAUgNIfbH#x)$e6k zP(iYZ%Iy#!E$2*mb)p+Fn7B_q{BgW|l^&iKE=O&*0c%?Mfu;-n7B|oO$$t0XtjqcG z=a})g9;04u9wGr(FW=b7;^t#Fw+-SvLTui-Hki+~!>l^@H@bZoLCUgAF29LD

({ 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 delta 316898 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 hpt0<lxMj5Y7L1uk8#K9k^;yp{69E<<0Sw9 From 780ef59632022704110059d9a7fd90d9fad34acf Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Tue, 8 Sep 2026 17:14:09 +0200 Subject: [PATCH 10/13] Unify the SQL Database call script name and register the NoSQL .NET sample in CI The .NET SQL Database sample's get-web-app-url.sh becomes call-web-app.sh, the name every other sample uses and the one its Python sibling's README already documented; the Python script is renamed with it so both run-samples.sh entries resolve. The renamed .NET copy keeps the strict certificate checks (a failed call, an empty thumbprint or a missing TLS certificate now exit 1 instead of comparing two empty strings). Also from manual validation of the samples: the Terraform deployments use the local-* resource naming of the script deployments and pass secret_name through, and the validate/README instructions show how to read the web app host name. Register samples/web-app-cosmosdb-nosql-api/dotnet in run-samples.sh; it was the only validated .NET web app missing from the matrix, which now builds 17 web-app-*/dotnet jobs. Co-Authored-By: Claude Opus 5 (1M context) --- run-samples.sh | 5 +- samples/web-app-sql-database/dotnet/README.md | 13 ++++- .../dotnet/bicep/README.md | 54 ++++++++++++++----- .../dotnet/scripts/README.md | 54 ++++++++++++++----- .../{get-web-app-url.sh => call-web-app.sh} | 0 .../dotnet/terraform/README.md | 54 ++++++++++++++----- .../dotnet/terraform/deploy.sh | 6 ++- .../{get-web-app-url.sh => call-web-app.sh} | 0 .../python/terraform/deploy.sh | 6 ++- 9 files changed, 145 insertions(+), 47 deletions(-) rename samples/web-app-sql-database/dotnet/scripts/{get-web-app-url.sh => call-web-app.sh} (100%) rename samples/web-app-sql-database/python/scripts/{get-web-app-url.sh => call-web-app.sh} (100%) diff --git a/run-samples.sh b/run-samples.sh index 29a73b9..9009023 100755 --- a/run-samples.sh +++ b/run-samples.sh @@ -38,10 +38,11 @@ SAMPLES=( "samples/function-app-storage-http/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-http-triggers.sh" "samples/web-app-cosmosdb-mongodb-api/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-cosmosdb-mongodb-api/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-cosmosdb-nosql-api/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-managed-identity/python|bash scripts/user-assigned.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-managed-identity/dotnet|bash scripts/user-assigned.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" - "samples/web-app-sql-database/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/get-web-app-url.sh" - "samples/web-app-sql-database/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/get-web-app-url.sh" + "samples/web-app-sql-database/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-sql-database/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-mysql-flexible-server/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-mysql-flexible-server/dotnet|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-postgresql-flexible-server/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" diff --git a/samples/web-app-sql-database/dotnet/README.md b/samples/web-app-sql-database/dotnet/README.md index ac6ee2f..399940b 100644 --- a/samples/web-app-sql-database/dotnet/README.md +++ b/samples/web-app-sql-database/dotnet/README.md @@ -85,8 +85,17 @@ All deployment methods have been fully tested against Azure and the LocalStack f ## Test -1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. -2. Open a web browser and navigate to `http://localhost:`. +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. As an alternative, you can retrieve the URL using the following command and call the Web App using the HTTP or HTTPS protocol: + + ```bash + az webapp show \ + --name local-webapp-test \ + --resource-group local-rg \ + --query defaultHostName \ + --output tsv + ``` + 3. If the deployment was successful, you will see the following user interface for adding and removing activities: ![Architecture Diagram](./images/vacation-planner.png) diff --git a/samples/web-app-sql-database/dotnet/bicep/README.md b/samples/web-app-sql-database/dotnet/bicep/README.md index cfa5bc2..83500c1 100644 --- a/samples/web-app-sql-database/dotnet/bicep/README.md +++ b/samples/web-app-sql-database/dotnet/bicep/README.md @@ -92,34 +92,62 @@ After deployment, you can use the `validate.sh` script to verify that all resour #!/bin/bash # Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SQL_SERVER_NAME="${PREFIX}-sqlserver-${SUFFIX}" +SQL_DATABASE_NAME='PlannerDB' +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +KEY_VAULT_NAME="${PREFIX}-kv-${SUFFIX}" +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" + # Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" az group show \ ---name local-rg \ ---output table - -# List resources -az resource list \ ---resource-group local-rg \ +--name "$RESOURCE_GROUP_NAME" \ --output table # Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" az webapp show \ ---name local-webapp-test \ ---resource-group local-rg \ +--name "$WEB_APP_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--query "{name:name, state:state, defaultHostName:defaultHostName}" \ --output table # Check Azure SQL Server +echo -e "\n[$SQL_SERVER_NAME] SQL server:\n" az sql server show \ ---name local-sqlserver-test \ ---resource-group local-rg \ +--name "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ --output table # Check Azure SQL Database +echo -e "\n[$SQL_DATABASE_NAME] SQL database:\n" az sql db show \ ---name PlannerDB \ ---server local-sqlserver-test \ ---resource-group local-rg \ +--name "$SQL_DATABASE_NAME" \ +--server "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Azure Key Vault +echo -e "\n[$KEY_VAULT_NAME] Key Vault:\n" +az keyvault show \ +--name "$KEY_VAULT_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Key Vault secret +echo -e "\n[$SECRET_NAME] Key Vault secret:\n" +az keyvault secret show \ +--vault-name "$KEY_VAULT_NAME" \ +--name "$SECRET_NAME" \ +--query "{name:name, enabled:attributes.enabled, created:attributes.created}" \ --output table + +# Print the list of resources in the resource group +echo -e "\nListing resources in resource group [$RESOURCE_GROUP_NAME]...\n" +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table ``` ## Cleanup diff --git a/samples/web-app-sql-database/dotnet/scripts/README.md b/samples/web-app-sql-database/dotnet/scripts/README.md index 512eff6..4891865 100644 --- a/samples/web-app-sql-database/dotnet/scripts/README.md +++ b/samples/web-app-sql-database/dotnet/scripts/README.md @@ -92,34 +92,62 @@ After deployment, you can use the `validate.sh` script to verify that all resour #!/bin/bash # Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SQL_SERVER_NAME="${PREFIX}-sqlserver-${SUFFIX}" +SQL_DATABASE_NAME='PlannerDB' +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +KEY_VAULT_NAME="${PREFIX}-kv-${SUFFIX}" +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" + # Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" az group show \ ---name local-rg \ ---output table - -# List resources -az resource list \ ---resource-group local-rg \ +--name "$RESOURCE_GROUP_NAME" \ --output table # Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" az webapp show \ ---name local-webapp-test \ ---resource-group local-rg \ +--name "$WEB_APP_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--query "{name:name, state:state, defaultHostName:defaultHostName}" \ --output table # Check Azure SQL Server +echo -e "\n[$SQL_SERVER_NAME] SQL server:\n" az sql server show \ ---name local-sqlserver-test \ ---resource-group local-rg \ +--name "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ --output table # Check Azure SQL Database +echo -e "\n[$SQL_DATABASE_NAME] SQL database:\n" az sql db show \ ---name PlannerDB \ ---server local-sqlserver-test \ ---resource-group local-rg \ +--name "$SQL_DATABASE_NAME" \ +--server "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Azure Key Vault +echo -e "\n[$KEY_VAULT_NAME] Key Vault:\n" +az keyvault show \ +--name "$KEY_VAULT_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Key Vault secret +echo -e "\n[$SECRET_NAME] Key Vault secret:\n" +az keyvault secret show \ +--vault-name "$KEY_VAULT_NAME" \ +--name "$SECRET_NAME" \ +--query "{name:name, enabled:attributes.enabled, created:attributes.created}" \ --output table + +# Print the list of resources in the resource group +echo -e "\nListing resources in resource group [$RESOURCE_GROUP_NAME]...\n" +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table ``` ## Cleanup diff --git a/samples/web-app-sql-database/dotnet/scripts/get-web-app-url.sh b/samples/web-app-sql-database/dotnet/scripts/call-web-app.sh similarity index 100% rename from samples/web-app-sql-database/dotnet/scripts/get-web-app-url.sh rename to samples/web-app-sql-database/dotnet/scripts/call-web-app.sh diff --git a/samples/web-app-sql-database/dotnet/terraform/README.md b/samples/web-app-sql-database/dotnet/terraform/README.md index 1413ca0..fac861f 100644 --- a/samples/web-app-sql-database/dotnet/terraform/README.md +++ b/samples/web-app-sql-database/dotnet/terraform/README.md @@ -116,34 +116,62 @@ After deployment, you can use the `validate.sh` script to verify that all resour #!/bin/bash # Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +SQL_SERVER_NAME="${PREFIX}-sqlserver-${SUFFIX}" +SQL_DATABASE_NAME='PlannerDB' +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +KEY_VAULT_NAME="${PREFIX}-kv-${SUFFIX}" +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" + # Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" az group show \ ---name local-rg \ ---output table - -# List resources -az resource list \ ---resource-group local-rg \ +--name "$RESOURCE_GROUP_NAME" \ --output table # Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" az webapp show \ ---name local-webapp-test \ ---resource-group local-rg \ +--name "$WEB_APP_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--query "{name:name, state:state, defaultHostName:defaultHostName}" \ --output table # Check Azure SQL Server +echo -e "\n[$SQL_SERVER_NAME] SQL server:\n" az sql server show \ ---name local-sqlserver-test \ ---resource-group local-rg \ +--name "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ --output table # Check Azure SQL Database +echo -e "\n[$SQL_DATABASE_NAME] SQL database:\n" az sql db show \ ---name PlannerDB \ ---server local-sqlserver-test \ ---resource-group local-rg \ +--name "$SQL_DATABASE_NAME" \ +--server "$SQL_SERVER_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Azure Key Vault +echo -e "\n[$KEY_VAULT_NAME] Key Vault:\n" +az keyvault show \ +--name "$KEY_VAULT_NAME" \ +--resource-group "$RESOURCE_GROUP_NAME" \ +--output table + +# Check Key Vault secret +echo -e "\n[$SECRET_NAME] Key Vault secret:\n" +az keyvault secret show \ +--vault-name "$KEY_VAULT_NAME" \ +--name "$SECRET_NAME" \ +--query "{name:name, enabled:attributes.enabled, created:attributes.created}" \ --output table + +# Print the list of resources in the resource group +echo -e "\nListing resources in resource group [$RESOURCE_GROUP_NAME]...\n" +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table ``` ## Cleanup diff --git a/samples/web-app-sql-database/dotnet/terraform/deploy.sh b/samples/web-app-sql-database/dotnet/terraform/deploy.sh index 0c7c45b..2e1ab40 100755 --- a/samples/web-app-sql-database/dotnet/terraform/deploy.sh +++ b/samples/web-app-sql-database/dotnet/terraform/deploy.sh @@ -1,7 +1,7 @@ #!/bin/bash # Variables -PREFIX='websql' +PREFIX='local' SUFFIX='test' LOCATION='westeurope' ADMIN_USER='sqladmin' @@ -9,6 +9,7 @@ ADMIN_PASSWORD='P@ssw0rd1234!' DATABASE_USER_NAME='testuser' DATABASE_USER_PASSWORD='TestP@ssw0rd123' CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" ZIPFILE="planner_website.zip" DEPLOY_APP=1 @@ -27,7 +28,8 @@ terraform plan -out=tfplan \ -var "administrator_login=$ADMIN_USER" \ -var "administrator_login_password=$ADMIN_PASSWORD" \ -var "sql_database_username=$DATABASE_USER_NAME" \ - -var "sql_database_password=$DATABASE_USER_PASSWORD" + -var "sql_database_password=$DATABASE_USER_PASSWORD" \ + -var "secret_name=$SECRET_NAME" # Apply the Terraform configuration echo "Applying Terraform configuration..." diff --git a/samples/web-app-sql-database/python/scripts/get-web-app-url.sh b/samples/web-app-sql-database/python/scripts/call-web-app.sh similarity index 100% rename from samples/web-app-sql-database/python/scripts/get-web-app-url.sh rename to samples/web-app-sql-database/python/scripts/call-web-app.sh diff --git a/samples/web-app-sql-database/python/terraform/deploy.sh b/samples/web-app-sql-database/python/terraform/deploy.sh index fa99296..c64b9e1 100755 --- a/samples/web-app-sql-database/python/terraform/deploy.sh +++ b/samples/web-app-sql-database/python/terraform/deploy.sh @@ -1,13 +1,14 @@ #!/bin/bash # Variables -PREFIX='websql' +PREFIX='local' SUFFIX='test' LOCATION='westeurope' ADMIN_USER='sqladmin' ADMIN_PASSWORD='P@ssw0rd1234!' DATABASE_USER_NAME='testuser' DATABASE_USER_PASSWORD='TestP@ssw0rd123' +SECRET_NAME="${PREFIX}-secret-${SUFFIX}" CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" ZIPFILE="planner_website.zip" DEPLOY_APP=1 @@ -27,7 +28,8 @@ terraform plan -out=tfplan \ -var "administrator_login=$ADMIN_USER" \ -var "administrator_login_password=$ADMIN_PASSWORD" \ -var "sql_database_username=$DATABASE_USER_NAME" \ - -var "sql_database_password=$DATABASE_USER_PASSWORD" + -var "sql_database_password=$DATABASE_USER_PASSWORD" \ + -var "secret_name=$SECRET_NAME" # Apply the Terraform configuration echo "Applying Terraform configuration..." From 7131db7f730d47fbe28124189179e390710d0f1b Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Tue, 8 Sep 2026 18:05:23 +0200 Subject: [PATCH 11/13] Fix the NoSQL deploy script's working directory and the certificate subject check Two CI failures that survived four re-runs were deterministic, not flaky: - web-app-cosmosdb-nosql-api/scripts/deploy.sh did `cd "../src"` without anchoring to the script's own location, so it worked when run from scripts/ but not as `bash scripts/deploy.sh` from the sample root, which is how run-samples.sh invokes it: `cd: ../src: No such file or directory`. Both language variants now set CURRENT_DIR the way every other sample does. - The SQL Database certificate check compared distinguished names literally, so OpenSSL 3's "CN = sample-web-app-sql" never matched Key Vault's "CN=sample-web-app-sql". Both are normalized before comparing (leading "/" and the spaces around "=" of the OpenSSL 1 and 3 spellings), and the match is a fixed-string one so a CN with regex metacharacters cannot misfire. The Python copy of that check also stops reporting success when there is nothing to check: its app only serves HTTPS on 8443 when started directly, so under gunicorn the old code compared two empty thumbprints and called them equal. It now says the port is not served and skips. From the Copilot review: the NoSQL delete flash message reads "Activity deleted." like the Python sample, and the unused Docker helper functions are gone from the custom-image call script. Co-Authored-By: Claude Opus 5 (1M context) --- .../dotnet/scripts/deploy.sh | 5 ++++ .../dotnet/src/Pages/Delete.cshtml.cs | 2 +- .../python/scripts/deploy.sh | 5 ++++ .../dotnet/scripts/call-web-app.sh | 11 ------- .../python/scripts/call-web-app.sh | 11 ------- .../dotnet/scripts/call-web-app.sh | 14 +++++++-- .../python/scripts/call-web-app.sh | 30 +++++++++++++++++-- 7 files changed, 50 insertions(+), 28 deletions(-) diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh index 56904dd..6c77fc6 100755 --- a/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh @@ -17,6 +17,11 @@ AZURECOSMOSDB_DATABASENAME=$NEW_DB_NAME AZURECOSMOSDB_CONTAINERNAME="activities_${RANDOM_SUFFIX}" AURECOSMOSDB_PARTITION_KEY="/username" +# run-samples.sh runs this script as `bash scripts/deploy.sh` from the sample root, so relative +# paths such as ../src must resolve against the script's own location, not the caller's directory. +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$CURRENT_DIR" || exit + # Validates if the resource group exists in the subscription, if not creates it echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists..." az group show --name $RESOURCE_GROUP_NAME &>/dev/null diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs index fb0b87d..84277d4 100644 --- a/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs @@ -15,7 +15,7 @@ public async Task OnPostAsync(string id, CancellationToken cancel { await store.DeleteAsync(id, cancellationToken); logger.LogInformation("Activity deleted: {Id}", id); - TempData["Flash"] = "Activity deleted successfully."; + TempData["Flash"] = "Activity deleted."; } return RedirectToPage("/Index"); diff --git a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh index 22f49b2..1adc031 100755 --- a/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh +++ b/samples/web-app-cosmosdb-nosql-api/python/scripts/deploy.sh @@ -17,6 +17,11 @@ AZURECOSMOSDB_DATABASENAME=$NEW_DB_NAME AZURECOSMOSDB_CONTAINERNAME="activities_${RANDOM_SUFFIX}" AURECOSMOSDB_PARTITION_KEY="/username" +# run-samples.sh runs this script as `bash scripts/deploy.sh` from the sample root, so relative +# paths such as ../src must resolve against the script's own location, not the caller's directory. +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$CURRENT_DIR" || exit + # Validates if the resource group exists in the subscription, if not creates it echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists..." az group show --name $RESOURCE_GROUP_NAME &>/dev/null diff --git a/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh b/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh index 9189998..0c77196 100755 --- a/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh +++ b/samples/web-app-custom-image/dotnet/scripts/call-web-app.sh @@ -6,17 +6,6 @@ SUFFIX='test' RESOURCE_GROUP_NAME="${PREFIX}-rg" WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" -get_docker_container_name_by_prefix() { - local app_prefix="$1" - docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1 -} - -get_docker_container_port_mapping() { - local container_name="$1" - local container_port="$2" - docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name" -} - APP_HOST_NAME=$(az webapp show \ --name "$WEB_APP_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ diff --git a/samples/web-app-custom-image/python/scripts/call-web-app.sh b/samples/web-app-custom-image/python/scripts/call-web-app.sh index 9189998..0c77196 100755 --- a/samples/web-app-custom-image/python/scripts/call-web-app.sh +++ b/samples/web-app-custom-image/python/scripts/call-web-app.sh @@ -6,17 +6,6 @@ SUFFIX='test' RESOURCE_GROUP_NAME="${PREFIX}-rg" WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" -get_docker_container_name_by_prefix() { - local app_prefix="$1" - docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1 -} - -get_docker_container_port_mapping() { - local container_name="$1" - local container_port="$2" - docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name" -} - APP_HOST_NAME=$(az webapp show \ --name "$WEB_APP_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ diff --git a/samples/web-app-sql-database/dotnet/scripts/call-web-app.sh b/samples/web-app-sql-database/dotnet/scripts/call-web-app.sh index 870d49b..e7694df 100755 --- a/samples/web-app-sql-database/dotnet/scripts/call-web-app.sh +++ b/samples/web-app-sql-database/dotnet/scripts/call-web-app.sh @@ -65,6 +65,14 @@ get_docker_container_port_mapping() { echo "$host_port" } +# Distinguished names are compared after normalization: OpenSSL 3 prints "CN = value", Key Vault +# returns "CN=value" and OpenSSL 1 printed "/CN=value" - the same subject in three spellings, which +# a literal comparison reports as a mismatch. +normalize_dn() { + echo "$1" | sed -e 's#^/##' -e 's#/#, #g' -e 's/[[:space:]]*=[[:space:]]*/=/g' \ + -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' +} + call_web_app() { # Get the web app name echo "Getting web app name..." @@ -230,10 +238,12 @@ call_web_app() { | openssl x509 -noout -subject \ | sed 's/subject=//') - if echo "$SSL_SUBJECT" | grep -q "$KV_SUBJECT"; then + KV_SUBJECT_DN=$(normalize_dn "$KV_SUBJECT") + SSL_SUBJECT_DN=$(normalize_dn "$SSL_SUBJECT") + if grep -Fq "$KV_SUBJECT_DN" <<<"$SSL_SUBJECT_DN"; then echo "Certificate subject [$KV_SUBJECT] matches SSL certificate." else - echo "Certificate subject mismatch! KV: $KV_SUBJECT, SSL: $SSL_SUBJECT" + echo "Certificate subject mismatch! KV: [$KV_SUBJECT_DN], SSL: [$SSL_SUBJECT_DN]" exit 1 fi } diff --git a/samples/web-app-sql-database/python/scripts/call-web-app.sh b/samples/web-app-sql-database/python/scripts/call-web-app.sh index 14a0f12..272c0f9 100755 --- a/samples/web-app-sql-database/python/scripts/call-web-app.sh +++ b/samples/web-app-sql-database/python/scripts/call-web-app.sh @@ -65,6 +65,14 @@ get_docker_container_port_mapping() { echo "$host_port" } +# Distinguished names are compared after normalization: OpenSSL 3 prints "CN = value", Key Vault +# returns "CN=value" and OpenSSL 1 printed "/CN=value" - the same subject in three spellings, which +# a literal comparison reports as a mismatch. +normalize_dn() { + echo "$1" | sed -e 's#^/##' -e 's#/#, #g' -e 's/[[:space:]]*=[[:space:]]*/=/g' \ + -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' +} + call_web_app() { # Get the web app name echo "Getting web app name..." @@ -196,12 +204,26 @@ call_web_app() { fi echo "Validating certificate from Key Vault..." - KV_RESPONSE=$(curl --max-time 10 -sk "https://$container_ip:8443/api/certificate") + if ! KV_RESPONSE=$(curl --max-time 10 -fsSk "https://$container_ip:8443/api/certificate"); then + # Only reachable when the app serves HTTPS itself (python app.py); under gunicorn the port + # is closed. Say so and skip, rather than comparing two empty thumbprints as equal. + echo "HTTPS on port 8443 is not served by this deployment; skipping the Key Vault certificate check." + return 0 + fi KV_THUMBPRINT=$(echo "$KV_RESPONSE" | jq -r '.thumbprint') KV_NAME=$(echo "$KV_RESPONSE" | jq -r '.name') KV_SUBJECT=$(echo "$KV_RESPONSE" | jq -r '.subject') + if [ -z "$KV_THUMBPRINT" ] || [ "$KV_THUMBPRINT" == "null" ]; then + echo "The certificate endpoint returned no thumbprint: $KV_RESPONSE" + exit 1 + fi + SSL_CERT=$(echo | openssl s_client -connect "$container_ip:8443" 2>/dev/null | openssl x509) + if [ -z "$SSL_CERT" ]; then + echo "Failed to retrieve the TLS certificate served on $container_ip:8443" + exit 1 + fi SSL_THUMBPRINT=$(echo "$SSL_CERT" \ | openssl x509 -fingerprint -noout -sha1 \ @@ -219,10 +241,12 @@ call_web_app() { | openssl x509 -noout -subject \ | sed 's/subject=//') - if echo "$SSL_SUBJECT" | grep -q "$KV_SUBJECT"; then + KV_SUBJECT_DN=$(normalize_dn "$KV_SUBJECT") + SSL_SUBJECT_DN=$(normalize_dn "$SSL_SUBJECT") + if grep -Fq "$KV_SUBJECT_DN" <<<"$SSL_SUBJECT_DN"; then echo "Certificate subject [$KV_SUBJECT] matches SSL certificate." else - echo "Certificate subject mismatch! KV: $KV_SUBJECT, SSL: $SSL_SUBJECT" + echo "Certificate subject mismatch! KV: [$KV_SUBJECT_DN], SSL: [$SSL_SUBJECT_DN]" exit 1 fi } From 7e8b890663880cf556d28758c508635d7a58b86c Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Tue, 8 Sep 2026 18:05:23 +0200 Subject: [PATCH 12/13] Retry a stalled emulator start and a failed sample once before failing the job Of the 11 jobs that failed on the first run of the samples workflow, 8 were in samples this branch does not touch and went green when re-run by hand: two never reached the sample at all (`localstack wait -t 600` expired while ~80 jobs competed for runner I/O and image pulls) and one hit a transient 500 from the emulator while creating a MySQL firewall rule. Automate what the manual re-runs were doing: - the emulator start gets one clean retry, printing the container's last log lines when the first wait expires; - the sample runs with continue-on-error and, on failure, once more against a freshly restarted emulator, because the deploy scripts are not idempotent and would otherwise re-run against half-provisioned resources. A genuinely broken sample fails both attempts, so it still fails the job. The job also gets a 90-minute bound: a sample takes 10-25 minutes, a retry doubles the worst case, and a hung deployment would otherwise hold a runner for GitHub's 6-hour default. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/run-samples.yml | 51 +++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run-samples.yml b/.github/workflows/run-samples.yml index 458dd37..33597d0 100644 --- a/.github/workflows/run-samples.yml +++ b/.github/workflows/run-samples.yml @@ -92,6 +92,9 @@ jobs: strategy: fail-fast: false matrix: ${{ fromJSON(needs.setup.outputs.matrix) }} + # A sample takes ~10-25 minutes; the bound covers a retry and stops a hung deployment from + # holding a runner for GitHub's 6-hour default. + timeout-minutes: 90 # ubuntu-22.04 for amd64, ubuntu-22.04-arm for arm64 — the matrix carries the label. # GitHub-hosted arm64 runners are free for public repositories. runs-on: ${{ matrix.runner }} @@ -193,8 +196,21 @@ jobs: # it is ready, so a larger timeout costs nothing on the happy path. run: | source .venv/bin/activate - python -m localstack_cli.cli.main start -d - python -m localstack_cli.cli.main wait -t 600 + # Even at 600s the wait occasionally expires: ~80 concurrent jobs compete for runner I/O + # and image pulls, and a start that stalls failed the job before the sample ever ran. + # Give it one clean retry, and print the container's logs when the first attempt expires. + for attempt in 1 2; do + python -m localstack_cli.cli.main start -d + if python -m localstack_cli.cli.main wait -t 600; then + echo "Emulator ready (attempt ${attempt})." + exit 0 + fi + echo "::warning::Emulator was not ready within 600s (attempt ${attempt}/2)." + docker logs localstack-main --tail 100 2>&1 || true + python -m localstack_cli.cli.main stop || true + done + echo "::error::Emulator failed to become ready after two attempts." + exit 1 env: IMAGE_NAME: ${{ env.IMAGE_NAME }}:${{ env.DEFAULT_TAG }} LOCALSTACK_AUTH_TOKEN: ${{ secrets.TEST_LOCALSTACK_AUTH_TOKEN }} @@ -260,6 +276,12 @@ jobs: - name: "Run: ${{ matrix.name }}" # Each job runs exactly one test. SPLITS equals the total test count, and SHARD # is the 1-based index of this specific test, so run-samples.sh executes only it. + id: initial_run + # Samples provision real containers through the emulator, so a single transient error (a 500 + # from a provisioning call, a slow container start) fails the whole sample - which is what + # has been needing manual job re-runs. The retry step below decides this job's outcome, so a + # genuinely broken sample still fails: it fails both attempts. + continue-on-error: true run: make test SHARD="${SHARD}" SPLITS="${SPLITS}" env: # Dynamic matrix values routed via env, not interpolated into the shell (template-injection) @@ -268,6 +290,31 @@ jobs: LOCALSTACK_AUTH_TOKEN: ${{ secrets.TEST_LOCALSTACK_AUTH_TOKEN }} PURGE_DOCKER: "1" + - name: "Retry: ${{ matrix.name }}" + # The deploy scripts are not idempotent - they fail on resources that already exist - so the + # retry runs against a fresh emulator instead of the half-provisioned state the failed + # attempt left behind. + if: steps.initial_run.outcome == 'failure' + run: | + source .venv/bin/activate + echo "::warning::${MATRIX_NAME} failed once; retrying on a fresh emulator." + python -m localstack_cli.cli.main stop || true + python -m localstack_cli.cli.main start -d + python -m localstack_cli.cli.main wait -t 600 + make test SHARD="${SHARD}" SPLITS="${SPLITS}" + env: + MATRIX_NAME: ${{ matrix.name }} + SHARD: ${{ matrix.shard }} + SPLITS: ${{ matrix.splits }} + IMAGE_NAME: ${{ env.IMAGE_NAME }}:${{ env.DEFAULT_TAG }} + LOCALSTACK_AUTH_TOKEN: ${{ secrets.TEST_LOCALSTACK_AUTH_TOKEN }} + DOCKER_FLAGS: "-e MSSQL_ACCEPT_EULA=Y -e GITHUB_API_TOKEN=${{ github.token }}" + LS_LOG: "DEBUG" + DISABLE_EVENTS: "1" + ACTIVATE_PRO: "1" + DNS_ADDRESS: "0" + PURGE_DOCKER: "1" + - name: Get LocalStack Logs # Captured on failure or success to provide a detailed audit trail of the emulator's activity. if: always() From 1b40c96cf03f1af7e02d2ec5f7747480c130d807 Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Tue, 8 Sep 2026 18:35:33 +0200 Subject: [PATCH 13/13] Survive the emulator's transient firewall-rule 500 and a stalled emulator start The samples workflow came back with 2 failures out of 78 (from 11), and both were emulator-side transients rather than sample defects: - web-app-mysql-flexible-server/dotnet failed twice, both times on `az mysql flexible-server firewall-rule create` answering 500. The Azure CLI's own retries all land within ~5 seconds of each other, which is too early: the PUT succeeds once the server finishes provisioning. The create is now retried five times at 10-second intervals in the MySQL and PostgreSQL samples (both languages, since the blocks were identical), and a persistent failure warns instead of aborting: the rule only governs public network access, which the emulator does not enforce, and the database bootstrap a few lines later fails loudly if the server is genuinely unreachable. - aci-blob-storage/python/bicep failed on an arm64 runner because the emulator never became ready - the container logged nothing for the last ten minutes of each 600-second wait, so the boot had stalled rather than slowed. The readiness retry now makes three 400-second attempts instead of two 600-second ones: the same overall budget, one more chance, and a stalled container is replaced sooner. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/run-samples.yml | 17 ++++++--- .../dotnet/scripts/deploy.sh | 38 +++++++++++++------ .../python/scripts/deploy.sh | 38 +++++++++++++------ .../dotnet/scripts/deploy.sh | 38 +++++++++++++------ .../python/scripts/deploy.sh | 38 +++++++++++++------ 5 files changed, 116 insertions(+), 53 deletions(-) diff --git a/.github/workflows/run-samples.yml b/.github/workflows/run-samples.yml index 33597d0..05f9b4a 100644 --- a/.github/workflows/run-samples.yml +++ b/.github/workflows/run-samples.yml @@ -194,22 +194,29 @@ jobs: # I/O pushed some starts past a 120s budget - and, on the slowest runners, # occasionally past 300s as well. A healthy emulator still returns as soon as # it is ready, so a larger timeout costs nothing on the happy path. + # A start that never becomes ready is retried on a fresh container (see below). run: | source .venv/bin/activate # Even at 600s the wait occasionally expires: ~80 concurrent jobs compete for runner I/O # and image pulls, and a start that stalls failed the job before the sample ever ran. # Give it one clean retry, and print the container's logs when the first attempt expires. - for attempt in 1 2; do + # A healthy start reports ready in well under a minute, so a wait that reaches the + # timeout means the boot has stalled rather than slowed: observed on an arm64 runner, + # where the container logged nothing for the last ten minutes of the wait. Three shorter + # attempts therefore beat two long ones - same overall budget, one more chance, and a + # stalled container is replaced sooner. + attempts=3 + for attempt in $(seq 1 "${attempts}"); do python -m localstack_cli.cli.main start -d - if python -m localstack_cli.cli.main wait -t 600; then - echo "Emulator ready (attempt ${attempt})." + if python -m localstack_cli.cli.main wait -t 400; then + echo "Emulator ready (attempt ${attempt}/${attempts})." exit 0 fi - echo "::warning::Emulator was not ready within 600s (attempt ${attempt}/2)." + echo "::warning::Emulator was not ready within 400s (attempt ${attempt}/${attempts})." docker logs localstack-main --tail 100 2>&1 || true python -m localstack_cli.cli.main stop || true done - echo "::error::Emulator failed to become ready after two attempts." + echo "::error::Emulator failed to become ready after ${attempts} attempts." exit 1 env: IMAGE_NAME: ${{ env.IMAGE_NAME }}:${{ env.DEFAULT_TAG }} diff --git a/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh b/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh index 652ac44..74e4921 100755 --- a/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh +++ b/samples/web-app-mysql-flexible-server/dotnet/scripts/deploy.sh @@ -155,20 +155,34 @@ if [[ $? != 0 ]]; then echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server..." - # Create a permissive firewall rule so the deploy machine can run the mysql bootstrap - az mysql flexible-server firewall-rule create \ - --name $MYSQL_SERVER_NAME \ - --resource-group $RESOURCE_GROUP_NAME \ - --rule-name $FIREWALL_RULE_NAME \ - --start-ip-address "0.0.0.0" \ - --end-ip-address "255.255.255.255" \ - --only-show-errors 1>/dev/null - - if [ $? -eq 0 ]; then + # Create a permissive firewall rule so the deploy machine can run the mysql bootstrap. + # The create is retried because this PUT intermittently answers 500 against the emulator while + # the server finishes provisioning, and the Azure CLI's own retries all land within a few seconds. + FIREWALL_RULE_CREATED=0 + for attempt in $(seq 1 5); do + if az mysql flexible-server firewall-rule create \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null; then + FIREWALL_RULE_CREATED=1 + break + fi + + if [ "$attempt" -lt 5 ]; then + echo "Attempt $attempt of 5 to create the [$FIREWALL_RULE_NAME] firewall rule failed; retrying in 10 seconds..." + sleep 10 + fi + done + + if [ $FIREWALL_RULE_CREATED -eq 1 ]; then echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$MYSQL_SERVER_NAME] MySQL flexible server" else - echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server" - exit 1 + # Not fatal: the rule governs public network access, which the emulator does not enforce, and + # the mysql bootstrap below fails loudly if the server is genuinely unreachable. + echo "WARNING: could not create the [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server; continuing" fi else echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" diff --git a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh index 6a6724d..3738fd1 100755 --- a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh +++ b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh @@ -155,20 +155,34 @@ if [[ $? != 0 ]]; then echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server..." - # Create a permissive firewall rule so the deploy machine can run the mysql bootstrap - az mysql flexible-server firewall-rule create \ - --name $MYSQL_SERVER_NAME \ - --resource-group $RESOURCE_GROUP_NAME \ - --rule-name $FIREWALL_RULE_NAME \ - --start-ip-address "0.0.0.0" \ - --end-ip-address "255.255.255.255" \ - --only-show-errors 1>/dev/null - - if [ $? -eq 0 ]; then + # Create a permissive firewall rule so the deploy machine can run the mysql bootstrap. + # The create is retried because this PUT intermittently answers 500 against the emulator while + # the server finishes provisioning, and the Azure CLI's own retries all land within a few seconds. + FIREWALL_RULE_CREATED=0 + for attempt in $(seq 1 5); do + if az mysql flexible-server firewall-rule create \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null; then + FIREWALL_RULE_CREATED=1 + break + fi + + if [ "$attempt" -lt 5 ]; then + echo "Attempt $attempt of 5 to create the [$FIREWALL_RULE_NAME] firewall rule failed; retrying in 10 seconds..." + sleep 10 + fi + done + + if [ $FIREWALL_RULE_CREATED -eq 1 ]; then echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$MYSQL_SERVER_NAME] MySQL flexible server" else - echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server" - exit 1 + # Not fatal: the rule governs public network access, which the emulator does not enforce, and + # the mysql bootstrap below fails loudly if the server is genuinely unreachable. + echo "WARNING: could not create the [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server; continuing" fi else echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" diff --git a/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh b/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh index 90d1e51..71d5bdc 100755 --- a/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh +++ b/samples/web-app-postgresql-flexible-server/dotnet/scripts/deploy.sh @@ -155,20 +155,34 @@ if [[ $? != 0 ]]; then echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." - # Create a permissive firewall rule so the deploy machine can run the psql bootstrap - az postgres flexible-server firewall-rule create \ - --server-name $POSTGRES_SERVER_NAME \ - --resource-group $RESOURCE_GROUP_NAME \ - --name $FIREWALL_RULE_NAME \ - --start-ip-address "0.0.0.0" \ - --end-ip-address "255.255.255.255" \ - --only-show-errors 1>/dev/null - - if [ $? -eq 0 ]; then + # Create a permissive firewall rule so the deploy machine can run the psql bootstrap. + # The create is retried because this PUT intermittently answers 500 against the emulator while + # the server finishes provisioning, and the Azure CLI's own retries all land within a few seconds. + FIREWALL_RULE_CREATED=0 + for attempt in $(seq 1 5); do + if az postgres flexible-server firewall-rule create \ + --name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null; then + FIREWALL_RULE_CREATED=1 + break + fi + + if [ "$attempt" -lt 5 ]; then + echo "Attempt $attempt of 5 to create the [$FIREWALL_RULE_NAME] firewall rule failed; retrying in 10 seconds..." + sleep 10 + fi + done + + if [ $FIREWALL_RULE_CREATED -eq 1 ]; then echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" else - echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" - exit 1 + # Not fatal: the rule governs public network access, which the emulator does not enforce, and + # the psql bootstrap below fails loudly if the server is genuinely unreachable. + echo "WARNING: could not create the [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server; continuing" fi else echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" diff --git a/samples/web-app-postgresql-flexible-server/python/scripts/deploy.sh b/samples/web-app-postgresql-flexible-server/python/scripts/deploy.sh index 6d7a1b0..000d8b2 100755 --- a/samples/web-app-postgresql-flexible-server/python/scripts/deploy.sh +++ b/samples/web-app-postgresql-flexible-server/python/scripts/deploy.sh @@ -155,20 +155,34 @@ if [[ $? != 0 ]]; then echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." - # Create a permissive firewall rule so the deploy machine can run the psql bootstrap - az postgres flexible-server firewall-rule create \ - --server-name $POSTGRES_SERVER_NAME \ - --resource-group $RESOURCE_GROUP_NAME \ - --name $FIREWALL_RULE_NAME \ - --start-ip-address "0.0.0.0" \ - --end-ip-address "255.255.255.255" \ - --only-show-errors 1>/dev/null - - if [ $? -eq 0 ]; then + # Create a permissive firewall rule so the deploy machine can run the psql bootstrap. + # The create is retried because this PUT intermittently answers 500 against the emulator while + # the server finishes provisioning, and the Azure CLI's own retries all land within a few seconds. + FIREWALL_RULE_CREATED=0 + for attempt in $(seq 1 5); do + if az postgres flexible-server firewall-rule create \ + --name $POSTGRES_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null; then + FIREWALL_RULE_CREATED=1 + break + fi + + if [ "$attempt" -lt 5 ]; then + echo "Attempt $attempt of 5 to create the [$FIREWALL_RULE_NAME] firewall rule failed; retrying in 10 seconds..." + sleep 10 + fi + done + + if [ $FIREWALL_RULE_CREATED -eq 1 ]; then echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" else - echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server" - exit 1 + # Not fatal: the rule governs public network access, which the emulator does not enforce, and + # the psql bootstrap below fails loudly if the server is genuinely unreachable. + echo "WARNING: could not create the [$FIREWALL_RULE_NAME] firewall rule on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server; continuing" fi else echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server"

yOcdkKjv z_^8L(H)vAbd!H+Nolfb*&j&uP(9}N6py}Y#A2p<;I4v93{O9}q38x`!kw`KJuGV=9 zsn-$ZeIO^){-kR_c(mV^?_-b;i&pP(`QHWnUnNU>t7|8s+$u+XDVK#p!Dr;uiFLlc@0_ z_J}h1!wygojMFI`2cj?-qboB9rRv-XdpaWGZC4e7;+#iEf`BSC^wG_jyx?EcqQ^IR zAI5!b{NooCog%3w{IWG>3_(e1)3XidLDB-01%f}t&)DC=eFoBItAkjPTLuHZyDbB5 zs{4aT8Ejo<;`|2%I!HxA(HGj=4A_w5p?-7sHCa79;RYwGKDG!vhT`LrYdTb^o*G+6 z?{xv51s+j(`f_v|P(mvhPl8_S5)&RVdr)nScnS!VQ`|{SVz4G&8{I}du-NI^gG_+h zP^$;E9OIWm{JG%1{*`TYb{(xIx<%^!zyn+1mjsH%e8(lnm%J>8k-yOG?b}2I@qy&w zi^ASC;>#XMj031iE&CRe2*s-{iiJAQEq8TX(g@a>_yr~LB-Nx#zaWWj4}C`Nl)H)&ulpw1XuTJ$2Om|FR|Px$*V2#Q}vuvre`pn z%`aA9^P#cxkQ@ccU|(rEquamz*35TlC?o1yJL>q~_b6WA_ItM347yx;(;?F66PqS~ z%f*KVvNQB!1T|uZGK9}}c_M3KhPC?Pgl5K{#KYZp?Lr_e>iF&#wjV7BXL_85Tm!VA zN=vUq`h>)sNraJ10U%Y&lWW0xMlr1iX>&5CQrHVEQCk@PusVOk(6D7LT6VJ7A7wj^ z^g{0lN2fA96S(Sy{wDuQy`s@*NrmMflZlaP6uk^F(9!$_c1!@ev6gI3o`y}w&E8N7 z>VJ_prs$mk>nT0QKseW`8Y@j;o!}Vbv8{(PW*Bt8^rLRt zZzjD)JluUm6m+iy=5Y)fFcR9#IsoRQu^?1COfa-A#NCx(XCQ=O!T1FR42&|U5zATl zAfmd?wN#!E>Tq58PU#l)r%%eM^^N1_P9hYnU~acY96NPu8Ek_2q+Uh_N)^%o739B6 zfNR1MKkYD70S$%-KPrm`kuy5jP_i(0w8x>0%?8B6tcp{58Rl#u3cjB5@_g{}Y1myA zaRK$f$%W4y&7L^7G^=f7;vx6Iu@&QX-uCS}=T{Dl_8i=@)ALAFEh#h#2oylk!jTbD zbI>bb&r0$m(_>o=NMJHpn{5~ZaYDj{c$Qr2!HkfsUG$VfL%+f-<5Zq}Ee+)O1TEx< z#~fwaSbo*7NL~&txDkD1QXnQf!vA<*eaF8Ij>r7&+C7cQu6yQTMV>ZEm}CUr8!3g8 zc7nrCdpG=)Sumv%jig~ZZUWe-AoVt?wHine={1iv75rUVgFCumOQaA|EF)Q40Lx#{ zm(Kscba`9OEXHvK2Fl+nGZ{(GUxTiEXGP~h$Oqi{@D%{O0c>Km zX#W;4`#j-gvqNE7M}WV^zs>g&Y|w=!eh(XQ*meX8iBU_voShu3w3jLWAx2r@<(&*; z_frF5^&2d3Vz#^|5~vf^t~JFAhOC)sOijWlR+)@~gD6aC?rV*7`Ui~Pj`*+nmqK#S zNdNi&Ha~R_Xv}I+g^@k0SPKHL3evOoP!*|_F+>9-mcV&Nr4jyHU{9ID1;C!z2K@s!hE?c>!ZjElU`e4nBd z_YLem%DBjt2O7*JlhKtSt>y#d;3*!iKn?oh>Pw7ftg5;Ct4J#qy^r6b7xfA{J;{X8 zuoOk{(l3zl8@}WjPUD{N>gk2(Z4k-~9IAsyZyuzZ&j1CU5js(=WGp0X&3yP?$djO^ zf9(_B=KS3Ke()j?V3d0Rwm)J#D}k9Rnsj1F!UKeN7ORqvE&RgQULYApkamYlde&eXN%o54OaX7cxILg3ne_R=MwO2l3FC%%^G=;TW9*5$-n> z+T3{Fh1e2rQx&q>T5BRS)9)Gt7GCHZaeN*CMKjl}02TV%wca4R1JXN?O9f2C?I_ZK zn78%hf*6=J=9>u(`6S1|RHMj9jbLS;f|m<*X~wrEyz}*U=~khwfDTp1>=7Ufa)dP3 zTH92x*9D?cR%q1b_D|5G)@I74@j$fyvzx8F(?mPFdsl3@?wzt@t&olwTdL_RV&BiZ zz;m6LDhv?kS7FQT0TbHEJB>RYgYMYcXkYqvGspS{ayeOd+qp{%pf9WHAk9-*Z<=Vc z9hYflNb{`zBP=Rhp{XJD4T zWHb`o_$=`UK4W}`u?ZubdY8n_roYbVf1K{G^zYkoel0DlS~lr26whELYNF{SFYisT zus$C4UxF+tJ`E`VI{jgUDe26GZq-;=Ifu{}kjpzE8$x2Q0OQC};$^Y+nPJm(GTpfSaX6wEqp-J^^48Pao!#IOfLGSu z)WLkOzUWBV;JN{LUc?;hR3*S(N+JJz{oZRGUL}T|X1Y3cSKDizx=_BS+bOmXGNb@Q zEpuf9OJ9k>*BToJU~Tks{K%?bOyng`6ZD;#Lmm8-03!Co(0lsjoY*t8`@(oIeI!$gJ5YJC zM&K}&Cb>H-e9du|>!Y6o-~DUwVeaWi@_sGnRuTJBYT`$%S$Y4534p7CmjY4sH6f65 zZG3~4OF;i;{(W>4l90&%(B_{n%{mMlW`;byh^Lhaywf(tH-2;s(YwL zYY<+}R6;Aj+S7{Utw+K}8}`5B+hER4bu zaPWuVbLBoLpMK<4R+6P$Ub=v6I2!z{IoT%^zf)pk6-uPs*z!SxcBusCK5j_c#J}vD zKZm!C{^he9N<`fX$(io0)#+w$eKOfrPVoKOkbS(Lh81j;@oSp3P@SH}Q$y1BUST-f&%B{G@DOdY)bKZb)hS$naWf zT_()Y+FNjT)LcJVf|Rwk+A-IEt+LqZZOctBrV=e$zlP)7V?NC}d_5}8*N*My>4DyYgen#zYk;XD)BAA;ilu;oH6W6-XY+#}y$LKq7U^qqxV-Ic@kW+Wxz;;3UAf<*UB{sPUPBJ?*DLtIA#P zNgrsZ9*r$|>}S&6H+n|oQNBRu20hqa%5Hd%VRUPngtmgdlrRa3`$Bc=Mw6CiDtQny z%KiazL196;clTZT!5OLRVW_3{1KK+={?gB~gt}34m{Z03Nsq);Z`Yb)U~M&%E~=Ix zY+D_+NUiJ}K1`pXc6M+}vaunjG=CHQpu!TXf>K9yU7z$a>IeEVU|Nyw#;J{-Yjc?N zNMdXCoD~mVDcyBqZX`D25X8;n%C3)iXpfdz4lQ42fqeoy;=BtLAp{85|6>m^z{Hv< zRq9sXTkpGmzVvA0wv!MkW`x$h_iSe@B%bQ&t!S-n$RklTl~4!Q;-{hJ=tGqY&~~&) z1GS&IACNwwxMviL;0wZCjIpsh&i@4aX8OM0`Jv_1qXnrb<%pcP=A0O#-Go=4gok-tL z`3Gb$JN-XCdONv%LAPPM{1KAIMS2SoN#x^VfetmnQdvT^rus0LQL`n>yACBgXPsm! zkg$gxXRvNt(+C)aC~d0%3(8@F|I`N~ADUAB(wlc@K=KOZ_jv$1nT@6enpl&p^vsYU z^x;hA@(|E?RQ4EpiU}Cu6evo>fKz=a2G_-g%^RxE$#ma<`Jq zGy`NA2IV-^R>aWO*z1u8D;!T~PRZHfk~795D5I>+jYxlyUe@^_*H9gWBgHYU`6jNu4cYXUPWsIaQ2j5 z0MN?eVCi zAjvmvurYPiJpyGo)c9^hz}lDGOV6i;BdRG*f~~H3|G2u@M<*ybMEK>{wcPXl2o_~B zDs1*Fl&9{$TeF&8j_{C(+st;iz8GPo_(jA;_O{y(yiLmCo6hi7mJAg+A6j({V~eAp zCNUK>d-%|XlvNUuJH}&AM%j^;vhvE_UfY)4pDuvcLi#aKWIzXhBI?#d61%|E?88r` zwJ8dG5?x(IAOq z2LKxsGrnUOc;}>hl;TR-V>tSwpLef6Yl|#n0l>FgywkJVx@&?oPTAfE4a@#8_l(9j zvCCauBd~Qd5^9Sr)yJHGiL;qVqZ?1rsl{|xwL`r-CaR?`2!)sn&rBHxeU}foBV^w> zY+#zrqT^ztn%7=*8TIVePJa(wi`kBmRj*#}hK)^Iyf;CC0R684G@ODPI^;dnXy`?f z{tv8?XLC_UIF{&i{ClP{G(FqSeS^Wy0@wxl$X?FmQ2kG~LYMhM?sR1W>J5{?KMfc_ z658FKt+kA^XOrb+8QP%(t81o~uLMO*b5jHfgF+cOdFkHd7@GF2#<$){Wp3$49cPhenlj?S1(u8bEzm1G|<(wpRMgDKu$p5nSOqD?i!ZqTchyC0z4MgJ^0bx%7c(` znkSDZoRWHY&+I77EhByJX}0hcVerN^-P2nimnwqSZJPu9wGCfz?<=3l5T2zeyxkqf zausIwZfcWu0Lhq~JN3xzzI*TML&1+Bj`S})92M==J|_ffL$BvjY*r^~-=9Yfas6&7 zc$jK_B{y&$*sKkVO7zucvwOB{&-WeI8jw-;vI%9hUf?~f&nXITD5XiEo3NFIiJOy~ z#&DsQsEdo62;u2-bF|=?(4Z^yr7R~3kopxe=XJ(yD{-U;eD#gZyZWs5v@h@o_|!Lv zkfL>!FlA=snz-7tAp;rm-gZey&lw|1rI`yWwvna~x^&If)cdp8$zT|uo@4O8eX8gcHFn8P8$dyMFq@q|FZ zO5j5=z>>)zyX03jUE@^gYXD@^jb{!<)Lct8#C)k2>UDiV*$TcRa|nE9TA0vVoVRiE zpRwo8=~ExI9fOP9{3Q478%J-HlLMrN{sUPD_k<&7K_QfQ83>H!CGNv6CKMwOKE&{w zY+dg!Hvq<Ufno%FClTGCphIPY!_7PFy zn^UI}CLrP)ONNmNN?bl-?fqyA_CrAtV!%xQHR~XHN04LxX#db47>OV2G z82_wCZ|^XaXmoSm+QvGW+G$h$kcbl>*9ilgVV+D5c`!2k_be_IzsW-$z8NWGwLC+- znmI^3_~4wdp^?j3L__Gt$$0o>*gYuUQ+zk~zyz;LoQ^sVDCq^0;$ZWc|37bP(}kjI zi5~e`_Ua0|0mA#RFZ{>_GfSSTc+w5inUBkgq;_czDeO>u> zV7P?FPiUSwV{brR;C~H_rnT29n|4JK*jU@hc9UUy>9@}r_~8Hxy?(#N+p-Djd?D1+$ zreeZ$+ck0jvXx5)(}ClEg7{rL!kQ{b!-6$^gnIA{>~s}Yaa~bARZ1!EKY55a@_Q$% z-d3#hFKd}5eo>6#2^9%G&BXi4HWa)jXm@=xVXok@Lttq$ZaBBh>E}n=M7l{JQRRB+ zx#G^4@~1P7YAa5fe%-uU(P?G)k@G&WL6w2AL1MNumYR3OJ(bg(I|*{#NUfM=h9W^;f%J_+QQBTJ&s39r5!ubkgt3O|m*Q%V z->vC7_M@mlAlW#*+tF^x}};XGd|e~wgs{FTiU$?=ok zS2w9xwPtrVb{I@|B4n3(^oPX;G>&cEop7fn%Fxnbf%RU}#l7J>l0MvwmpNuM#np~< zdv)`5&-V8rsjxLouV+Tc^O`xP0XQH19q$(kqUo5A_rzaO7{r zzhdP*%HF7|+Dz^rE&z`eszrg5oL%j_l=9;p#{X%KBq@pcpce3BQ~8+f#AUh9wDNzA z-*Y$SqpgR3aiLAft?%GPn1?<$tvM^Za(h*+j{NC8aeDeTTfFC!$&zYT3kE&U>KD$F z7;k_iyF627S=zeI=J030fn#4He&hJmKO~%@;7_QTXL}TS66~EEJBmM_Y2yePXXBIJ z=gV0XmeCebR~9Jt)w}1su_vCNRl9Y=>03X;mm{o|np(X6nb$V?>8E~;^Rkehz1Y(` z%W^cKPVC{251Ged=ILz@=PW(frUsc(^)Js)GLD;NV&A@D{QIa-$_u?qH&4gkJe`nt zIv!pK>oirsJ-oa5j!Y)L%=7PCzz+)R4b z4W@-Cf`#lQoq{jS_!aN<#0Y1;p_f1P$ z9_tv`IJUCKZ~kf-%c*gf<8E$E1b$61pqui_r_dXbo?7gzxz0eEY&Z6V)LbiB!dUBh z>h2Rv^><4v1u9J-j9KF#h5qU(hkfMt`@jdlpD8Eo#*(U>iOk=njk3PEI=UQ-m^Zhn&=kzy!9wuWCbf82n0V42b(T(Zx||YC>^C4f zuAtNuP>kai%@}Rz9zs$QzX*4E1^Jdl+;@tXHtcuZQ028vZX&@^Y|VkYjrF~r-s9q? zEtW+7Wp16UvGU(>wPJdkIQGo8pG6=(?KY0I6TL0&vj?A(SIav4*YnMvOmS^;TTcE? zZM0?bTJ9fCoLdKOKvoAFmgVFVhN{dLrmdMVmFe%`$1-as7**cyxzKBWOv`t(T<#nD z%5j!D^ZvQHqN=u9c4cNVu!v+J(_X^JF?wdI_Bp-`%qrR)1(bJq-58 zTA=nTbPZl_dsF*Dd}}C0!Lxm-*u?@$lGMXiF||XFzTEAu@OqBIKs+2j3JGzw>YI@} z9Zhapi>?v)?g5r~Bq7j+zBx0nvG~2Ne*UXF<-Of4{YmK+AChCm3AZWJ)W$AKrfiOf za8?}b>79J1b_0Y2{dLk)!Sv@wGo8$@GuF-L+}1gI0Vo_Wer45tRuDi}eB2?DokiEh zo2P%}i4f?AEfUBWqz_Uu9y6iJW38SQ$yvyg~Vdq z4~yWp8G#xuQiT8Fl6$OZbv&8v*U&FS)z|c%+qRoRXz13$Znz+lO z0yasjc8@s0&;937>bxe#8FoQbNeetpUiiuXuf0){RnBZ1mY(Yuih}RZB5xk$4-~k; zT^(k*E6%yvLUe|J#tP7h`IIUZ%HmkVMyxW5+O`TkzXq!>k^WLNHgsoNf zN1_BFy(tq$=pn~|_wbkziwijEbbu8OIR zS-D+)rmeic-Bi7vJWqHz`Cw(E$#!Q@60q7Pl$F|X0`PTJ^C#%Ina(j_4fD=$B2oe~ zlVbixh97wmddLR&;^@1pWsEsZhOAG5&tX zOXx}5{y7wT>*LeMi4{F>WWsDmSe}&8PQHR(hh7)t0lNE+C(nnSWD-$79{_h)a50p0 z@#s<84PNa#bH(EfleyE%$EHKca+<*LJm$HzC`By80_0d&>=+Gw8)RMu-^-tvCPo;; z$gtok*`a_GVzxVu+TlZg=hC1Hx8-0~&q2T7?;$*Trmp|p%MC?kNV)e#?9f)c6f@b< zVY>C?(|g1TDkH30MiRsyIStZNXRgeVW)@1!gXV&&IKU zg8MO;{PT@is*duPt8BmLJmdKWR?NhHVdCPfz^<*m)CetKsjSZb4Cs%JhVMYh9Tp3? zle;e1j{ynPWI~;xrNoJX-yzQU%8_>RL|H8TQTK!-f7|BMn z8qcyK&iST6dj_RQ;Ia;rq*Sd&vl3o*iVlg$97(I?hcfj7uLTD>h1)-K=y?@wOns+R z(R1!-#E#cfEFDH$`&QNdYPyLxWzD1Lz|#a4LQu;pFq4ElY=*wr5c3;G0(6I!iWkW) z-;S#{Mi4ZxdIxf(JGFmtB`t3}qms;CFI8|cF{bAAXcT*Rgs03edz_f_@tV7F=M%XN zo=w}L8!1PBKeg4geGND%NwqPHk}pB5;JB))THoezkmDgI&}Egye3q)(hbS~a)L71n z8tmhW7pZ7Li7YeH579DTBh#BWy?%BP^`pkqR`>9f9j{7qyORrZdceYh4-}}v6^5i6 z)p18r9S4Hk3BZvHFmBi%GNLn}Yo%LV*x z7{95jk?7pr?9nnfoO=taR2MrwUC#1^jZJPJsW|~ao z+P|w_k>LA*jc{eE8=3X=IIs5Yq2BuFa!??@&w@gQr%J)1k^%}3Lrc2Het!6w;yUYn zLv>SPLMySpxV~E_|CQux6hK_&LmlmWX-3WKd4`OfN{5*Z{)pwV;u3F%}SJo4vIlp+;fNO$w`mAX#kNj#YhFVh9;L3qIid!f><6=PkVtd|Lmkyjb~K z(MirT(s*|r$pZ|E{`YxEM7QzFt1Lkhy%&P_p5LeZW;aPMLmS!5@nnhPOmpIZ4cpdY zp;sHKwZnRwtlLi@M~u7=r}6zC4kp!c{@WAb4N+qE*Q zEkF0ed^q%Em0RB+JU|NYfEfW7p{FE1AhEsSlt+1Cx@mL!J#I-Ug5(so6JVz}+8PJ6|tg7ub$BXk^?lJ%hl>7x*iTGJhzCxG^#ZfGt_Z#UD=` zerRTz-^42|)%npKSyP>wR(E~)vDLp8o%RuwS1e1@Mu^Oa6ATzhl8}B0!&b#Y+ed-t zy!DVL-`*@R-^Spe0l*_zXjIady3e!gtDB699EtS`jed*sUrlI!N%9NseoScXCs)_} zi9JgOfm|l5HlI(0UA9thw6((zq8HhNK;pws!VggIbx`G~Q>h90iUxO}+Ma$jr>8b1 zQf*lp+n>f3Q0|*<0;ClH*NtqH4_?n0a@o7x?fQ^z=sp>KoW|027C450NmkK~0Zfd- zj+2si$w1!E1QX9qWa5+@umeG*QYQ|ly^l3lkPAuLvVne3^LN}c6AUlMu((s~&atfz+mmq%%yr`IE4 zJ#U)Bs)8_x5--2*WoH)c0GZ>$wdz$2mcrTrtki!^@<9M~ej}+rp~VNUata@N-PWq2 z=lccmmq(R641u&`yAL5G%Wp;sm|16`HD)ebyl}(9(foC)PaRQ`de5hsP=`#Tls2u z76GHtS_^wHcb_0azad@t!ro zt+M=DR#A63&72wxuVarcKsS9);D4;EBO#QDM|G=7fE7}M<}Uu*K6pT z-v@8&%SOM416Fjo2)0V@Zj6A24Tk1E|Do$bQMqmI#@raKd`o8(yFJJz0d+3(S8o@H zZ2BG|Nvq9Qb1%^;CP~d%9OAtc!s7_bWOFcA2I9o%km6u88vsDRWEw8yUf0mNIwa+& z^Lxv~wS0duAhyTQ-}R9EXkIIzAxX(VwI2I*OqaAwhL#tp7}h+CUA*&Vm(MMDG4lX= z=E=`j3c@fjm;*t{+%N~$HXJUX1_cQxx`dc5c@Cbc&8PcMrQXNzNax{^>@`e?@1I!h zBL!{nX+ppR_#_3dcA1b=$Ur8fZU{xdpc7p8fEg^LsQVa+`x^U+V|}42XGhc>g1phX zeI6>1uwFE$39+54;WZqL_egSFY;;R(P)e|dQ+UiL_iS1-z3wBS)o_fZdeUAeD~O#7 z6&o_O$>jMnE^Po{+XwL3O@IG&a|65Q91$Gxg{))Q$OyPKC|yeyr@-Gh1Q9A|wJd`em%c@aMtn867UwTBI5EZ{`!9ySi(6x5()-1iCH(=5+rugN88 z<-Z~{bt$#>KmSOmY^$7nqHK(%yYvYFXt@%q9VVy+-@Y9-bc$EaG0j+D{)B~34%cy_ z%ffW6Wd@d0@r_qTCj(_nqL}58YhtX7i0#c*3glZ8p^29T z7&ACrDN6@kD3PLTY7cW74f}A722RXkG!qf_!QD*MpJwU3xCDqFXL+!1?5d7I-3`J0 zYYZ8}^{+dEoHGMyQ>n&aJ|lIqJNhsA-D-ma=7(ppS}#Z5#EU1BcOEO?;up(R2bo(e9Rvp(7KUXGMm|WbTa_1daCI*Rx2A9%%K5| z!M}`HEu`}xESQU!Vn#{VXXNS!&_;Gf!<)ELaYgr5bMZL{<$?3D9v3-ub@3l>YVE|$ zt}KgBimQ1p!)U&g%|u+HmJtN2aj09&?uIdQet>9kfZA1fNh~r7AG!)pw~V(J#t3RC zSaN!`g3HK>_Fg6i(4*I;D#Jx-19Yv_q`Ch{dhR8N83p@DQ>>?AoTstmvIGed48KW^ zc=+Re3Q1xOve{wRH&wN&hysF@K-1(|J+5Kg^F`)#&&20BwD{H)1s6B?*qsf{UpxgXn3lMa$)yu4p9D33D|QhwY>Z~b1D7*j2Ve;} zX27smEQ9oBk0k#YOIBCzz0x~99MFE}I;*mtJLvoS&0m%#!SSx{JB>C?Xit@0b50h! z$;(fF#<`(3BdcA*%DK3x1AzwsdKcXNLhYR7%@dw=?(*uo-9Woi8CRL7=+p#@DQipV zZ{gc}{h;;yg$TfA=}gODBh!Fw;9=RIIFN%9IGFcPKyghD#bQ9;8*A9%!jUxa1J`Q* zwA?4A+$hT+o8Dy8*sYPTn03;qBf>AZt!Gl}r{>x;=a?&_#Tml%20Qx zrUrPA0^>1o`96!z$AE5xhU2rn84VRZHNDwk0LZ44dhF?b^d#25K&dd+zi-tsDZ;|I zMJ!sMh16WfJj%#XC#sys#!Z_vmz(Uv!hpmYcz;|?mO&Ehxo$8~ zEOqp7a#pU9eOdn=>dX6zPFbZ_2o=2nE>^dw9+Sg;!D4cV(UX!*=B+toAQ-6}Xqc`u7$@jTlP#FBs1aa16H#`BY>jlU(VL2QtOdSK` zmjoi*q`PL4C*;3LZ#wMRz8=n>0T_Ob+bU{9>kaf0yZa-GI-*X!?_L1t@!#3~m(po} zUn5k|l7U|dxDv*Nv$;)C2wC^$!;&Qq4ExlpmQ_(WtbH4(swOI-9HC$WbTk!vM^-uHcsjPe`nnw`War3eT?XKaxo7 zi73vcmI7&M{a`H0+4m_wia!LBJs;ZMAl1ibLfMe&$p$Dn9z`Jf@WMoSZVJ1+%4dWC{2G7DtoVzO=w-Yc1tIc%i{MQXHwtf z0hwZ=kn%G$9);BYOrEB!CeKJjfCd^@D-hyl3UkGP}td9kiZK^JCqxZ=ZiX~Cz5A6^%vZ3hdy%5#x8d5&HNVx{0J zXl_c1;J7XFh5xV6LZPm5Np|-ivB{NxL#b(>3RRA8UsGE;RYT_YQyT=(E%%bN;L6Ws z*;qg=#;}EA6gqxDm~;R#I-8>M^-^rRN)ssYn|mXUYUTe_fHGADvJtJTTWw_~H>qzV zR6Ed{oG+o)y-zUj5yy-a)cC{jF2tS0GkHX^z&X!u_;_{wSX8b=bl%~Jlp}`8bX&nZ;sxkAG{tVD*?6DImi?_?J6%b{BRW_kqG70 zvs`05o?$XrDaY6D7D7oGL@lZde$v_JPD}_s^-H)`+Wm@8`BqDa)y@@wrClqySSVKr?Y;F1}IBD>(*KNp)Fw#86tLKX^ zphptKs~6a<#?{8=CffGo?CobA+SgH~A;2|>H^Cb?SLshJr9Fq-uUTQ<%I$nQJ3rs1 zBuPTY&EOuIpqZ3M$skFtVX{8e1aw_Q$$Y5H+=x#N2<w6SdmK_QD;$k3vB$WsDM>IpKt&ZDCFwpTW72I3 zNt|{1Lp!-ap$M+rd;lwABKcOl#LDG1Fft}*IFf`h8eZN5GaA*UA6eOBQsxg$>6WHW zk01{=ILauXF-oQQ!{0O{{;yo(HJN&SjYZiXHQsoj!#6b`RyP!8wDl(Dc7hT0`oV>T z87vm18}yl&gNg@8xk3JM>o?m)v*zCrZn{JrkX_)kZM&+sjnm;D;=HB4DA{4&oat_W zup4A8EDx$b7;FQ^uk(}vv;SFaM6HK_Mr{EbYSj4Vunz;nz!Q3cOt+b~PerT@Y#Kw* zV4w)7;1G*uRPwMQ%5tUdP=t3C^%-~D)OXK;fV{62%!U@B>p)NQfVYrNYn4(p@N8cb z3cc|pD1Y*5o&!74`=jv$2+EJNA?M>A%Q|$|EO~Apcu0OTTkPpw;MtDEa~>e1aNo;8 zFRkgU*O`&#euX)KnR>(%xf&F(e^rbE4Yg-u&nlus*Q6AHEPS^@4_0$s62Pf2nY)){ zGZIEw{U9WaIgtp&s;%<}q0IAfd|bB^#R3G?GADLL1E}X6UVeR-iC(!8vBt-XR@j(6 z8_vEdBS>OnPRkXOOIYW1{btnu4l#wuy;PYXzUCB9_f#O%@D*dO8VuGKB!+$Th*5u1 znAo7I@xo&zv^Rd*dFUUgE|ZJ$DH)CVl#${m+@M_fo(*bYqyH?FW$=daVAH3A1qPsJ zmv{RmhADZRZHXaLI$BCKidvVW@7WDEv|Jz`5Waj=4=Ov=mrycP-&4(06t!G-wKb?%E?P-J=&>6_iU;B1_vNh?;Z;TD@N6xYwJyh%hUxs2mSu^R3n{&6xCqm5CAZ_JA>VVgq{JD)1<- z3RzSr=sV!mP;c27cD>X!?8r={Lk?#|EdrXk)Eva#W+IM{Z4Z(X$DH7qauW#l4|A4W zgpgr&ex-?id3Kuuy2yT6N#K>m2*R6%v9^CSoQ|B3QUPZUz`E-b{!>sjbSTRH3vXfaz@y-*w~gB zdvgWdijJ}awf9S0tcun;{9Wk}ReZ|KE?ecmqQu+5CC~&1At)Ze@SB9dkpj9)0Srx1%im5qRg2KRXm8F)DjThp9i(ELPA!Z2f3xf z|7}O;DdNH4!Y$yjEZsj|d^=w`uy>4d@4LiY8oDlSazqw&cyCmsy21yU1XLKeti+G!6iL4 z9=&yrw8tJs#2zP)fX?|jJ&aTDo9;6qL(I<~#CrA4EEq<6|kX1_h;fc`}nn8Bk} zd1iD!1l&&1+tjN^o~ERho1>yO2B%BIuiwuioqfhoEUqFKNQRvAhp}O~K_3O4p9=qV zj0V@Twvg)fAh3?O8_3s@77DsKK5!`MmL~pvu`fI{!NL_wd)$e4(~0jO9#e}eKfO!u zKXxj&Wx>@w_0i{oJLD@n60Yv<(ar5is&i;I<)_>rGvej0_N#%9e$VZ$1T7QQ$Z1$? zJhqlG!}fZ*=4WI3vgLAA+&ev5uUGE8 zsq*vd){1S8sYSGiv3=+3`fg`;9x!PBL#bPen%%mjx4*IZmu-=*ukIQ&zqB+U<^^pco&`A+oCt~vnT)I5xBmm~+dNRYl5ub7No6WaFVg{uO=kF}IrVs)WS=-Lw_qbodk^!$Ea007Qg_km6 zj}s!uP6T%~A4V9RIqxAnrKaSg=_LlqgiF*#xC9eJpg`4}$4=}@$Eks&%fQ(gzLZf0 zq(%t^K!E2f>7cK~qre9ltB>Z1 zwXZ(H8F8q_6wXx^jp+q?0^FIDmn&q{0;hxdll?-RJa}GR!8nPnY~57u&K0h=$D8VN z#swIV3^41uX7l{bk0HHgX*dbh@nniv?OCj^TT>fpD8v1jDgWZW;L^c_U4fNmG?Jup z-;BqyTw|WDlrcnkS*2JP-R>)Kg}jrc$6SG}>}n}7B^XO#MS0=8(s=kjE6;u4>4w!N=;@DSdsKsnPI1(m=Qw(#h{Xc% zSlA;ZupC3ekK2zR6hng-_d_%ufG#;-i47@*eeS`F*pB$s5m$XwdvT_8IE+D|Rr`<{ z?8&&g+jp6PELNj&kb|$S>r6=k;Z0Ve{AzTwH;@Pb>H6HB;~;Y!xY{)46)?acWBYua zWVQqr17_eTc3&L>{bJVTAzYWiDmu;)e|Ga7mv`{8juO6Iy`Al?QYMuU5YvQTy2+@^ znNsQlEDk~mH|T-*;;5L%#CHb{+sv{RXXA91&V`Z}x!D9m6(S7~#1R+3lxko4hLbil z?bo4xQYjg)Huj6?dUMI=aE}inTjiTJLN4r}13w`1lp53OSTBZU*w; zqIg4P$JZ)*fjl`21N5EMI1)ZxaL^Nui!l|(Mbedq7*SW`D>RL+-J@2jYmj%}bA z%J>XFiXL`_uwiQM8KXmYDUl8q!Lm3Pop@cxdMXDx5lM&|?OtFFISUmU;^PP+xjuZ6 z+zFvoh#sg#56Ws4QQ>$hF6%eA5j4ws>WMNbOmC4hYd0KTv|uw+MofJc%x}33n2({9 zL6lFB@8eu~+}J)}W;lBHLezOcokfBT@WnhlH}WAvk`)aI3}v`dbRl5x+b?jz=o^<% zAZDNq9q?z!>}!F&UbgTJ&v;L*DGpIKxF{d@-G`f~8w2Ia0<;E#p$)`Gym+`me%voh z3Rk*Wx@m}QU0MK&1l+Tnc>BVqVFFQ6BFZ`h53KLQwG5h0z!=zMe>=ox6j@GGq>kF) zdGW7#DY~4@_7bCy0;$^AaMD+@H0@hw`#<68rBq{7F9Djt1C9t-dx4`W@xmvAdj-N? zQuhE^iimfE!qd_4&S`H#a!(CO$l2pcU!t^|>ia}KnM|p?mUIwvYVZo(eG_oN2LFk6QVh_G7j6DZ;-FS4}CBIBfg&ZY8SV+z`bEF>{8*u6aimz*lvp%Y-(@g+*T^UaEc^0VUoMD z6-wA0Y-bD%nQ>A|gHTGO6sK1FgMp{<*Nn#_%EMn|AcJ#{P{j<-mXJgn7D;h<7=E5d zKmn%x^rj9j5?+==XFOCVh3kfiDhX-88xJw2g$Q4GXfo;o^&7SEhYm3bE@|L>GgQcY zeSy^_5_rm0%8w;jJQhVwRtO^oZ2}ym4)eZ-yG`112u&2c6XWKDA*E(M1R{Ka@R4a1Cd=F&j^HQ zjo84U)6Yt{pl;`2+|%{({DxPTTy0^BkhK(Oh)TO6=3Ia{F2LbVTT8{>inbkK02Dl+ zsfF7Z$BUmLl`I6WYTjzWTh%nRkweU}aPCVa5xi;j+uLg-ah2*z$+w@SAJ2pb0m&7` z3ABgepv*t6NIv|ZnHJ>GT)8|1D^6Tg6OIIT>unQVkAVYy?Ip<>;^Gr@UB(Gq5QT~7 z;gCFi7VnZp&;pVn2Q>FU^|z&k7MBY42bz! z)$*8@`pAbOd{G?0^;s%@wJmtZ_1ZLJkO6NIXg?xGm`Mk?v#x;QJ1tayaVF=4$b)Az z;{Arzh=&4aIRvNhOl4f|9tv(ElV93}N`Be?>1%QIVM&;&zNY0dA(CqYrYnXfrw_pR zln(}J_y=w%$n7m`nj}IRfKR#t$Dy@ah{J&JJw}6W z;GGy;V^2iYE>|30|A&Q1rW8h<9Zcv*Kobj*NCrVA4e{M^RJwrkS(Lnu@3`QXH7|s+ z-qc-&x31k-=XMYs&c1~lEeAm47Y#$YI71KTt1qj-Ll?0mnE6zQU)H#`;9Xa52pd2Z zpq&2249iX)*AhvahUzEQGYh;3!&h$`HwE`;(17{hnHA=>sv?x}pO0}MkcREo3yScb zD0$_V@F`CKf=-3W{PSR{yof2I)7qp?d)(rpY46Zikstif?gh5jiNj0JN z9X_RIU}}SXQ(?QL`P_cA_7S`Vwz!;x2WbOA-;Cj}hEEV;5Y(7}J+|DQZ%=69YQKm0 z2Q7uJ699%hVH>Y`Hed*5NclU=A`w*gr15{_uHV44uh1^l&Wl)xShdOSKo-HIO1lBpl@^`tAS8#u#>_{bHY~y4`R0&yD8T_mq%}ip=@c>N``MfZ?$+p*%HTpDdRMn)w+FHNqfviKj$bDI zLtsMKp-SCy;wSi}LniA$0-jOPSIr5s!@CO;j(VmMqz0mnPznrTd-jOWApVwllbYN> zn@#l2q(3OO>{jWiZm9l9Eb7>oPA>tK_qCnn9Z%oU|J_M135(9%mg)Z~ETK=1*zD8x z0ruUvXYYW2b7}lw2 z33w4r_pnsZHSx>5*}1qV+m`;;$Lr%E*yjZLkfX`*D{)6zf>{{9*vXjk6%6+a^N8;B zT6npB=G`9j&<1MmN1MjLcMdw`xjmbTsJ6Mp%$q%RiD9*@Ow(SN{qTYy#T#I`%2ZwprSr^YEset zEA-9q>SXoIxSD04PJ)uC0?^JYTL`;VxF+R?IK`8+H)1VpV51*zJ*RHm`mCWm-7%r{ z_X}S)PtmEs> zOc|uSt=tk6+5f5|r?k>As4C3(`$`3?UD%~6y5FM`t?q98qj>5Iprg8s56d5mvkxY| zhS%U?MUz2U90M9bSfaJ{LtA_BZg7`v4QEPY6Izcn^;op_kgd+Z#+BV*8#VHCuF4R` zIz0P?KbN9N+HFu}s6t_JFzm}}GyyO{u1ZLde2kQ`TxWM;cTmNokAKAFsA%U-@k$KT z&GmwNoPOIZlMBdj3t^N^EmNQoB|39^;5zdSw+kM@Vix*wT?;=Gx=lmiOxv`Ekxz&{ zKJ=IApnYc|YyLa||L_36Ve4vm=I@tM?DJ~LTpca8OF>*^Tp_}xQs4~f6ZJ*|t&XY_ zq~hEN-m5JdR0HWL%WBTbZhY2&$HoA?;mH>f-DXHMHE^`-oeRklppX)Isx$Ijp8=`p zLhR+%z2B8C%C5Z#YQYegp3p5<6sS&#KVO8mL0f=5VH+!(d@C~7qa>C?WI-GZhF_T{ z7GRc6e+YMhem+Ms)lC;I6tn7fr`e#T8DjD=zIc~lVm%eN+5jp8fpt~w5QGNX+MWk@ z^(0Y{tEQ(Um9Dz_Eq%-V)sL&bnSd+8phv@~63;<)kK1j^GuO`_{-f~Io7y1$U~TWM zK89EBd)4W>yR`)L31g@p@~WX`OUC0r90qqV{Y0LfA$-&kh40$qq2L=UH(3-#8g+zq z#zfk;Cdlo1rhyb)mGsQ)@iu>mdD+K>kZ=kDOwoej5i4Yj9bOhbHfi{~b$8Qkci1?3 zwxPO7Md9!)Z~O03nrd_qDq(8lSrX?nbDE{qvF1lIYa(HGmJs1cp;JD>d zga{e%8zI^%*4|DdqQEl0lX|RqCt3ymZ$m{%)|fRDf;d_>40I26{=!EVm~rpl$_kd+=*v%ic@M{`P4nLI;ZY_>k{{U)}hwhbc%0f&#E9&7-vdW@GwdhfR5OVY&6<( z1QdT*wKsnhQU`uh(H+oAuK1`Qd%o2N^w_4Yt1#$0Cb8bQlYxv_2NDxy+ zh9^?m%YX#s$UF*Lp5!yaB+|u_o_@-=?Lnlu%FUj_27_rzJBs=WgG*quaJJOt`s?@- z3^Wk&abL9MYW#bXvP;xkTg_Yh`iYw=D_@<4V)m0lLZFMurl&_O2{_#6G7MpH);oNO zkeIaD$wTE_3$bEBke`#22d1(bc8zFPb<~mzaGHdK6?x(zu6Po<>$?jEWPZh^Gcr0| zer*Bt za7faHrPu|a9d3YT5az0&4Uii`wCcP1O>#F@zIe6G0~Qb;lKJJ?O|I9Bm7iZ`tLpRS zZGg6%!gTcg7U#qH`pGyyJB|N1AP(@f3^+E$5n@4&lOc2$-X(!FTVN42I`(4gw(!T% zwDf3t8F-7tF~2_Z=lXPp6bY9$7jus3>fAb=Ls<0PhiYJbF-x}66^^!zFD{wOL9;_h zJL$)AE@*YNMMHwI_4apDHE`bIJ51IH7v`@IZ(NqOi!{j4(zxHIXPZr$Gpr?d{5Ecd z6L-zRC9f$^VO9W5n_s*G`bqEpB+3+miD5SVc;#QMF5wv#ejfe3klUDi``3yZuCA9P zOvVg{lvaZFDcd z*R$LeJ+q}U>izLREGUSf#DybtE7&Wc;YR_ADx7;RJyWBxTIW-qPC49Cr7_;m+VHt4 zPz$*3i7=3v3%cSRi^ZoSw+rr4_cfs1bva>LCtY{bOEjRuqz8wpFTsydr#5`=m@(6O z>K8B}d4Idtu|?gQ`Du_a)tG$ybVUK4=b1K^Tb}d_m`{k4qe6OcQqCb*&6m)p8@!YE z;Q%DzLgP5XhUq&7Z=UmRED|p`2gc)3Z=mR8>kd0xbY*;>wc(=+Oj&-e&2UtBWc9jy zz4~@^Ob<_4pleSKvbe3jBnN-@cj4qK1qL#{Y%|o&wDNf0r{H9x z75r}3{wMUmjBQxzU9Jx-RC*s0=CAh6W3WHq*h*!X`h!^iKm;i#j^hEp0y|vF{2H_1 z(_q zaQnAV(Kt9h4Lg>Yy;aCmjh4@RzdI7BatAG~wOdy-X(y4CZO zccZ=P09w<24b@l@^(5Dh>(k|eUhJ4$!+#NZ^HgXdpq?AgihvhPd`FNxVEYO(nOM=e zpts`wt6eCVrpY+^d}B|hx(A(O$>F^EJ=(bA566v23ZAJ5A<{BeUW|!L9B`{<&$AYj z{u|5>zS*`*DyLo#x+FclhPZo7t>2M*eY3N!dCL?6PW5RpR*5BakfHnsrPHMpoa)0k zLTqkae{pAaSW4q7*w5rK|HF!cXVhyp^&eScTKNadI-DFk4@jx5%BSq*zxiV*RIrkJ zltc74i;Q|Hj3-4~Z6WKWZMm)Sn&{_2o6L32=Yl#TBp7;Y+zO{65@oU78N3AMur2Ku z%6pZA>V9cj0wICgx!3VJ9oz2u9sZXe`P%o_(P0FdN_8|%i>|lu$rVS61 z3Oi#P3>2J-!E^Kw9X^D0Ro?%e9&WrA=dB9&ym0AygNSZyb!#C^S)R5FV{tWWP*P@Y zY%A?9ad~BiV%8J1J0`hGp*b6t{(ai^8|xDZsTi6F_xBA11povD0!%|-b2!Uc8W%V3 zWSnccQLdXdK?)HS4UnDs3chB#97zU*pSiP>zj;@woj#Z zv2@;VmDIz=t5}ceT5nO9)73YBwen2%uqRKWa%el7#i3?1IY<0+S!Fsp+@iI{+aSDO zlfM01ZqQZk&)xIZ@e=4`b|v0CeQ$7*HPXuFj|?!mKow`RuD1RhZgkk9+r9tyrJAoj z=rP9Mb3bT9O$a4}QTW4U$3!Ru?qTF5#j~q8ih`$iOYSqj1^LSNAj0MTGCsVk)USRa z$01a7{JVorqSnMSt6+f3@nQ{px5eU0er`}8M~qbH*ZPLOtn!9p;CO^>WWmF^>E^76 zoyiVu9SJUu9}ix*`z0JuhP>sI@?0tHf9zdhxsug}5f`R+kL{IZ-~2xzS6WQGDN*y9 zt4R1PvynH~@od+R+XD-vlkdOUhmg>C>?vs>T<=h2ceBF!-|R>z+2Pw=`~$l-Y{LEZ-ky_6Yg%iZpjN=6cK;|sP<}`r3|Ka-N!kl--8(fXPK&4>#@zFu7)ivo@7e(d0Ui@P4XyB3@L1Us)G zUE$0L@24PP22MX4Ml#S;hA_3;;!skd_}j;o7h5->JF4K~xPC@>*Xu(aJ?!NYgcNw( z{$lwVwwz>%sSkxqmWIqoq{!>_OtUubKb+&D)incXNd0>xw_Gn!ckd^5a((!j;ypVK ztUfikZHcDy2ULw}_t?h3$xd>=07m#&V$1d7obO{*SeMp!B4kOguO=x5Y=E&`c@TBQ z255O_|GCu91&??ccw@B)pjtZOLOk)#PlxcF-G3q%QFmIhI`op^eWxSB^$SdJ6ApWp`*Wez?Y zXFxCNZQ{Jx*B!U7-rSIqlFq^H*<&I_oP-joQwfg zsJm!C2l=vV7c;lsORIz;YBn?FLIM}w;<0xyh{66fwmGcxw!WjRO5gZ z(r!rI{f!7*;8Ogh&1xvIsWh?>rnftYQ^L(V{$^J~{b-WdY7=f>mjIN#%bOLOuMoAf z>vkHiz*$jh^tpf+=?+M%{By!u%Qt|tG+lk)Cy!N!C3IKQaNid_jzx7W^9hfE28Zy@hIO}={mTq`Z2@-p~d`+|flU1Hd6&DXY2ny$wkX*)X7 z$_Gg97Sd22ND`09W5mnBiJ1Y*_4NNAYi|J+<@dD>BOs`V2#9opfP|EUbVwIMl+~Z)qae2ob zPUV0vQauMe{yJ9YuJESn%ujoD@8rrph~TjP-#*gsaQh!15mZtC{^(=y4MTgoop}sF{cVR?V6Hr`f&=hPg|EcQyQxWbjQ~zH&&NCl067EVv8B8Qx zxV-&$OA%m%K=~3-IoAjxIJ{u@TczHfB8_Pi5$LdSHkIF z$T_Lzf_+93pH3XITfP31lnsID>~K{XhCZyj{I9=l z@7DXy^85r2U^;VSbum9hmlha2QH{>tYD9dI(XY(o_X`=nJQ?`cr_PEs{<)y?Ey?Oz zBBS*I0TkXMVh#fdAhfo*H}c7({yQ?POEIY!8@LF6I+Abt|MhX-zc{E_KizM&2bjP? z!I~j9X>)3Xd@at|AG5NP3{zOy?6M zX>dV8bh6BrMNO}*nhihlsK0PZ62&9txsDMc$qOP%cm&{E>BV6zX=CT2{iGr<6U? z^^?H$%fBHi5ntG=8x=c1c3~Pqb$?S_0pB0`trm`m(?B|#303QNTPwMsh<|YD=lQKV zF)Q~Jl|#@ON`Hso5c~22x&BS(?!+rVYTW>m*2o7wYMJG*0%Wd(YZdML1V1uojzX(W zZ|(J%i*l%8TK_MO3VKdeF)GeJ2tsxsb%nKp_OruV+nZN+=f@VZe?k>%(~#kM9Ai-B zMm|2|zq=|x7Z`q|o_h&cB{isX#pB@k`Ut^dKBW*Mt{) zdPn=!|P z>9|bRs^F@C%vYL@lAGO4N*Nla#WenquC0V+MolyrRhk`>-?`j5QWwXo1!bBLj3$=nA z@hom0{yv?7q;C0w62b)neTd#RO|vD_%uJYQlw-<3K-=2xW1u6)B+j9Wj3i4YmPiw z?65@s+}uT*fH2wc*c850YYt8@Ilo?>ZS3cFMA3D%4Lhg7Tb}CeZ{V!O9*_0!s@;vN z$Bk)mQ_7}jh@$Z?_=ZiZ;SsjgAG8Ejj%%!E9Cw6em3>MZyVf@DBR@7bw!2P( z3QhcgN?tTy@pwA z6?zHJoxHRq;9Eay7)<`|y+Zlw3b&;5JQuX1mXm?zkp@vMmlZDjyeS46=$9x#)hr9!N8PoV7!T&n%R8%fZ7mZOkwTsW#w~_Z0$uQX6$0 zy->bBcLh^eDOn9-n{mG`4N{Nmcns~ibadB0DQF12Q)s^vWx+GZlT+e249z%X^_Aji zrzVB2JtGCTmIXUKqR8YS9fg5`#|`o58H5zBP=C_Eqb>*b`Li*-1`{Ccw8a*4iWceqZ(egu+y(x?fRK^+6BJ9OfDHZ*Yc<*YEXDeyf5EOiCwz)en1zG$SuL#zME z;F++(JnZaNn4P=d-_J|i+MZaczTi?bMmdL+_525g;kPk-ea65ZZQqaIx%S8qL(gUb z=@>fJ3BckPrym33S;=aw`|dBk?-8y%II8;TS=--lSz_`}@t! z>qk4&FPxD z23M$@HrQlb(d!QDLEsXR77Ggi4gyl!IDFdg^Rr8Jt47f&6ei%4fLW1_4LWKD$)6k> zFxwA}wk;z)GuRYTf-!l%xO4}ZyTxfMA}7~==l?D2uB)aQ zBx8MGnnVm?jQq3KpWyy}Rvxii+xLdkkbJKo)av@rYS=@I@HJ3;`2PM^hSMNI42Gop zC)&d{i)M92~f%iWhRt#)ZoCnf% z_`y#|!gbfkwP(T;_;Dl0=5h;m~jgweXrMmi=A ze@}w><1Wvl`OC-Q`<{LpSF-Eyi6|9*#)wlyZ#?~eq8E9-iSx|BLI>I*4?3tC8&BQbH{La8gw3qBC=3_VVu#|B{8tx+ z$50B%{%3O$u9+}ZU}>F^IQn%8aOD_z6IZx)v?~xQV+AS@t@rj zh-zyQKP(Wk2*X{ZsNoyC4~bbkiS1``%Ek)Thsv;H3mDXlVXh5&1-3r%+*DJJwa?-m zILqvzp3MZG@SP}Zd+C@pCntj-6hZ#zSfSy6lCxyvx(}q@KST+)ImSMIAo16_uQM+$ zcjOcDTu8?#(ohzh)-);P*obXi-cl&ff=@Y$3S98M4&2`U7~k^!!v-(+S%47x&zfS_ zOPtRdm$MHrsGh%;L3!fJT7ALe`cLJwyZfx>k=XY*sw zWL4-nVGcr304{+T8Hvjv@Eall5D5Q*z|piYB}g5PVu5ei&~Fh>JweZ=fbMioKIxF` zw&MDpSEI4=iq1-07%_}*i>bU2zCB&>-f4?{72x~E?>ds1{2a63hXMy8M>h6T{3g0U z3dMmL2)sO&(fT7%IZ=awjC$H(vda6R(hO%3UD00!)U(Bi-JIfiY({xag7eB*1_i5Kt(v|-BDbj21h zgDi@@C~X7yyzF`l9nseoCbVj}#hu}Rgy@28VAzqThc?x?Fh=JfUl;>68N2naJCre6 zEcQAQTEOEs9K=CBni#}A9+oF6mM;16wN`rSS{2oEW2QFcy>*&eu5IW2BIoQd;Ira4 zM2t9Tk71wTO^CHewx6pNS9$1ay1_gs{nHd6L!y(H5)fJ&s?F=mUYdSrPZ_KG!=pF4+ zA)vI*!W`&zX?rp-lF~y8pBRQ>Ki5V{tB{rZ|AQ}5w{&^`q*lxMLd{N2$-BO^F~zv~ zDxL%PJIG!3Qo-&nPukxrl!GAc|C7iJi7#mN*2PqI9J+EUFnE(`^ zkH8R}#-@^MTlrX(ohpPPChIL`Yq3vk^J}A3)s^=Gx@uS3mYJK) z+WV|_2i6e&2!)4Tqr!!~Te^G-4uk%meGz_cwuY9lZaqeJcRtC%m2?wrePA+OlL-Qq z!7T0jwr*tbeLpze+bH01;bbVk_wSgRvy`tG?`sJN3CfRtFv(O@o?mo+<>2{FRqrS2o($tl{d6!db9$Gn;?- z@^>l#AZF*IH1Q!vUd4Ml>%4trN^_J(bo|6qK#>O^?|6eo(mj@hE*`QyAJ(=qxpu4K z9OnV%%!?kT>jpxdIwCPCU9~q|?oZ*l1t5>L@6&Lz`DB}7GBQPilH!{-&*5p(uL;Ew z9q=PZb&kFN9c=!DkkqBp{iic83R~DYWs?tmvk_`H=icx&zf_nesH<#kxE^$Ke?9N+ zU?)$}qUEds0`3~NC=4B(*NArG#11rn4G9~LQhv|(`)XyEp2K)Sy#0sFjq^R-ypf{1 z^1;+x+_UvU-uYq+C7^ZB03QQZrf;``J>65A;$*iSyvBi0xReK(gDVx>e1#C@5&IPc zRH|q(q-TOMXe1~F?9T;Zg)3jIV}Y1Fy%DYrLK*PXCogp{w5zsVUAfF5^wH$Kkc=jm zjEe_>%C)an+gp2e7918E7L46a!%zJIlOA(^Wz>^;Yd9P8yXipW$d6==Csoge`#WRv zq0s__^`Eg;MmszIoo{u*1|^p=hV|5+iRjsFvyobO#E=i!c*XDT+pJnL=j;q@~p{Qi*F}A->PTE#N=EcKQY=6oeXDjd4$Wj$m z^GmR-!Mu_Vj|2b13N{nf!=l8)_L)P09kYOgJBgLXJDYm2J#7EdwaX{r>KY|pC|Fvn zVw@mrkOYUGj+$nFLBv5v@((PRoPs2RulOKaMgsxPJL=Kq=MnT1do6$?hRpet@$dMe|Cq@ECWLndq_x3jtUsdWch%yo z>%|yR%^2P=cEg6JZYVj8bA6G$O$%h!dGmisE2-B3#ThfKho|l!0Y3XZ0saAApRN;M zkiItDViJ(+szSKj-9rHv1ByqZ!qEN&jpFfZcXb!8e9s%A%>Z39{tm)zz*IPc!T`_m zw@#^zbUT0}qHAkd7CtUJhDNblB(OG364HS-XuH0lo#&7w=+BfGVn5(tT%wxfad~mrhb=m1Dkci7&K;_{7JsAFlsRra4&F|zI#8g9> zcq8c+5c@2KhoX)KV(9^`5zFr7U>+}SDGVg@_iwVOzq0UI(oHbK%G?;kI+C^!HG^B| z($*c43j%*hWd2XSEgKvLrvPLu5v)=)K0N~sg7_VyGYGI7l!iM_Aw;Kel=KtKhJLwW}waxX`44)yO z@qC}O(8k4WiM`L^|K%L>bhLzDWMdm#o~AJ`%lHE4Jf;lca6ROD+>?l z5}bt(;NZEsD#$`J6k;XL@+h` zZ-u=5-^{Pw4KEY@mC=sYik--6w1>Fn{|Q=fQ}BiJsBp=Y1n?n1oQ>{lV;zI$qIRv1 zKT2;6u?Ti`p#6_12y$3(?f{7Rb0%959s@iQi1NTzs?uTG8;OK;|H_jdDditLX`uy3 z)Xb%e$~4>s@Qe>ci*YY|IOL_B_ z|I5kkSXlMKIzXZ?*g{fi1c+?!_3&y6{eo*zk{wn0cDRsR~M!@##p zo!N76Jb$0e0YUixa{(S&>u`@bUvKubHF7Y+X3V1AZ<)cFihl@&@DlCcV^*ZgfPyBi z0^~B5Ins;DCEC9r)Zr) zG?VXJFTI`A5Ppu{*!`WnMijt6hXJAw;77{wv$2IQ(-s!28#yl_2;wRoz4Zm7Lf84q zrSlhF(;wBPiM<;;e8R|oEA{=F!NS4xYJRmIC{@opA;?e^Y}oc_d7iPfLDO+u&s{Vgp#yW&kKtbgW)RY_d+bx#%=(HlqDCwGzZ1{AS@$ zTL$DLzgL@+Kp_O;Sdsvlfao4UB-@bPNyUO=U(Kn9AbK$gVtm%#Pv+VA_?RNmQt(x3MN9B!Diqm^+Lh(?ybIRGMN z_l}^&gY!bth=4+6y6(ahc}6$}nHv2Re||w5e`ghJFFNDazx+ldSoVq88y(WsPfZ$un~nzV6#jQQ*+wMNP0Hn(Uzyetg(v2SGX z@CvUyLmBGNl@Mf7?jR4$&8Z)_9&ad}5TZn^dQ>p?nP<1P{Se!;C zp8wk<0#KGgEj|y6<)>A4#Io2>;5hSsvt`On8<3|W@Ii!i6j>l&pEbl#|0rMn#!Wwl z=m$&E^M@T%P3dc7r{M!Wz-j5|*tAP1zgox}P%C*qS{%uj6#fdhaqpnv66zbtE0}coUVt=^sxmvaNQ)^|&lR7rr z|8f?CxS*2o*_I6K$krW;KTdBjk5?1neBN1l=$^DUCBEPaw-@Q2~vHv6jMC=M& zevas4s!|8qud(>yp<)tXTY>Y2>Z`={jYlm@e$9||7qO2 zZEXST(e%5IkGu^;di^5tyMD;k{!FYw$umOKZA;BOEX(<{`7!Hz2qcS=kvEPxV#r`| z(8?{Npn*s(|LA~>2^osbK;qQaj)60fo0;9YdI2Hk(Y)H2rCfZ>gK$3LIApWVAIL!v z?@D<2^j0U?gme(9j$)Q~3sXmr;f$azcqRN-cZ1{7omQ;}?_g6!4w%{N>td^oiF26okeP~u=R&lNUDPl*WCdS@ug~@0mW(*cPN+jg<&^i52_~ows z-nIFIZH%yd)ai^(&}sz@^7mCEI4j(3S5r-?rUmQaqDBm6HQZ-_nU#~gzd7I=Qy~`% z%OzWW{=L8I4+$gi@V81X_2rbc2envq+fpHi5$hY1AF*KA@Mut25Q%$ISNK1To_|TQ zhVo7V4ST+6m+p619Z^_uy&X~QL;*Q+GMY!d!h#2PV9s|o7YELwKjk|RE!qu1NP8reT4zg$$i zpP*WL9l#f{h)v1Hf~;ZO!$xTOdp z5n9F{GCcqr?q|jpmBe=CBY|rO_U`z;YX7GS4?QqMpXG0jkFS}Ipz%-bQ4kj~8?y?S zh-Vt0%`O}CoUE52a5aiy<9VF2CWQqdnE!6PoP@!^KQs>k9S~XuPJ6RIkt=d$8-W>6 zqD~dsjA9qQ+Z59n+;jyU#_(DevZqwW`0RyxsIM0SV_HxPD5OYvB87TR39O6dn(YS2 z)4H9PTyFWc)~(Xee^=o(f^3Hx4$A?`ho?66Z-1fGe}mc(E!jOTY~D4x+y{v^MAikDs`Hz|&oJt;{;tV}vrY|X zmo~l01!~G!6GSfM1)9e2{tlt|B=4uuUgN)RnE}Z}z@~M26Pj@h+ox50gp?mp^zOy? z^!t{3n_DkOc5XRlfqu8<|De}o9*0qs$AAE}ow zUj`qi)+k%?mwh1E^Oqt9K=?N>l2IF9==?RLtG3HI1u5d3>fY37!aiT2<@{Qq1UY>} zybHTJ|@-?gqS{~N-=M^>t zuNXI||M{;%V%|icD>x***N|JZ<2REw=ACy!s-Wl-n0vdKs>p%em%2+vgnzD90`En# zTc+$;!z1FD7%z`p!S$1Hs5r=HR=+8zkLA*q1WMa*>J}K(FA#**7C{vNJ;p9B;k&2o z6b!1$sqt5jM&i)u-&N7*-G9Kk;6#HRJPvP!`}+b%06TC#*t@sV{Syj`%`H2)kW4bl z-enurWPBPssQvP9M4D&mUS#M7h>1GnB0vpoY^kXCeSA$}&h!fRbp_GCmnpV;9npa4 zZp)m*HHyk9dFP0uaTFG29x}tM+ehAdk$Nvl!gsr3K)_wx!daL9vB}0TKz=`HAV<)!rrKdf9l0+Qwi6KA(|D)XecnL?hE)pU zs3H3glI0J#XTW)%986HZ?D%mm@AEVg5uijdsw_KuvMv;loVTZ(r-$x@{8hJz`nNg} zfS<|YzwRG^&zJmo4H%GunE#p zh^n+0^A4<#+7FCjQ|5V*RtOUO%60#^g#q$)wGDuu$7odumft37XlJ#zBUi#skP%b!Ru2b3}G{TOTfCImIRO)vJ40rDX+|{;0&9r7pl%3kq9W) z-*yQw6FNMz-+O|&u!S8g|0j+SVh*ppM==P{@^Om`wnVyu2N5l2wDwxnisx-1U4w|0 zANQExoD>okv!n}ItdCNIcm&;za??hB9;G0MgqhHS5%%RtLe6+;5Oh@to<06naEFp| zp!4%(^yz*Hg~f|K{ZIQ^caAb5lo{W+Ub|=DL=(tI)_uSWMnZq-#;mA%CA3cWmo_*&DA)d~>L8y4gEflmG zb#Y~POp758qUyNeYh!Ig|DMIS+ggWBK{|)C;Oa!&uO-|chIJsFUeutLc>xsI-%OyQvs2uXjgIS1r`u#E%(jg3-b@}w9mKMquAsC!+ zq#Y=vA>=|e7tN8)ZGS%^{rjwBSio8v)Wm0fx>4hS9=!g&bB4+VwYu5DP4e^pzcV%3vJ zBtN{a-nP{@G!6(llp|vD;6vIsRday0)<+isChbnBIhyhMWm4@!bNju1G#(M#-YJuy z{=K)aJC6$IAdv^)KKDGlz3(2lw4$yxY-VTu_8{QMhoG3{IJYx{?YhS#Y+I+B9F(`V zyMp!}#LR^+Hwi#Tt-8<_2kCjNDkVPkakIGaMJgVAvYsgE%Y?K;qi`nYs`<;k_E`W||Q!bz8 z#_(0J-9fb31-)|m*IX|3Bpd-R6kWee_XH!MTkfk0&1S)O%EzOD6(R0*(SQm@{b$0o?*h?jj!+69;r3T3su0tgAr8H9R}|zZ;z`iZ{>6iL}m=TUkMBa4G26l2Os9f z4hz%v5@2cvkt)~+SfH)=mB@F4LSZ9H&#r*2Cz8+GbkC7{gL`K+Dv`kDnS5&KHIfz8 z3%IHZPRq{v^IWwA~;MMTs$lkx%a;2tAJJ$Y=6>);6k_3gCp3Cg38PadE~*V*|epN9rEp(B<{WJ3O34Y=AB8PKTT`xT6)B?x1~! zLU6a^S*;(wEzy9Fi~hO`_2FDxNa6|plJQ<1tt1a5R|r0C^{^L&HNEx1N^@|>g7l30 zhbNv1S4f@wM&715wxo>(;Cm7YB)Aw~PQmdXLF6tTmf(66tfJS%c3>E;KK00o85oY| z&CR`B=Yg2ai}rVv%X;RjgVnY6VwG#9&DBn4vQ^BW)7RB$XbD;>uQ2ei93(1FW>sP0Z zgdRJ*)o4XQfpeF8fE0-0x-9G(U_AIrhYoQQ^&E4T);sjk)5zqjF; zUKw<=jC{WYWc)pI(yu8<%beGHU?32T{4mk)!uhv(XWy%@I`tbLW(yJ*N_^KGey=yB4A?;a>W>cD%X z_e{6ojg~x?q{QPn%ozrf0PczhB%6TWGZy%cM!iu|uctkEo@AjH(*e-l9T$);B z@2w<_IwWObQCtYF*A2(NMjC0kW+v>mJ#}a(k<}ho(X{xUJz>5(EURUPoAHvwebF*n z-s@As?t61S_Iu$jiIGj_E@Rpr^@dCRnL>K1j4ZTbEtfPazEF(>Iw(#RF4VUnj$)F(|B;pbB4 zn{_Y0@{u~xz}WCqgAc{03U-3LjlJl`Pc=(D>Bnte@qPHrbMuCj_qs@IG^}FAz1%rO zNN>2&=iJQt$K5_`9sW0E6mIh^6VFEy;#q`e4g~s0`EPoepr7V8t+lPYo3S_6Lcqjv zM@8#v^l=_PD~b0FRWm+Aau+g0nb|np2-Y>SyC6?Jkc4igSS%uaN0dj3 z<2AZhY|}#lMMV{z-b;p&;kw)2OUqQOqSsYSG#-g792bAipClg{KKeCiw^Rm;j3cwE zo3Zq11HlcWA;->VxxwMmI>JKHl|B1$NymK}$J&Q|&y-p>5E!522g`Zij*=6h?)G)U zgTd|b0xf;7V}$-j%AEY-bq#@8WN%&)Luyvt)TI7V#=fSr)ZQ|(9GEvIO?`!Y z>?J}{mAl!V$eesfkd4{9a!ZTd&h9JjCuzAVe0rfbY>ua!Uz!_;Qo1H3MG3uGl03U5gR5{|#1D&JniB&}M-mfXpAPxz0^sWV70XPO5*#mf*`bY~N1 zN=NsKTkp|oe8QTF8_6}MX5-nDswp=va}9%MviA^q~R;re<1W>({a{Cb4HY_9@|$xcToo>Ab>Ul)S=8 zX2A*wH3&9br+*gSC3N3kDdK8CoPbtRDBf+m(8o#|70sB5kUYPRP^CGBu977AGfZMD ziS)^z75#<;%qK$gwmR~zFs+~xl;WNX(+@TyEKWkdDxz0@g$c_gQf48Hs3Av8d?hg}d#P+o>Y27b4r+qj$Q3GrCbjSeNvXFU-(r)hQbn~kSx*m$M+(K zMBhIRDM4jYvJjjve0njBb?LsBI0xd5qUNVu7SO$5*jM%I+^fEwrIStN^hyrl68DWN zR(M=MEh}fo#B!_q*u%Vnp$Csn><2Y+$b{m(kwI#T<$bWM>UrgHj&Kb#|zJ%aVMaEN>*m-`Q-T70Pb8UY7rd^f&Dmxv^S{#PDp|I_ut(-D92Q%6uJ|eAWD|eUQ0N$Q z;>qjLuFHyVA4(0BSr1YMN=XDquxCCi5WXA2XjBN=Tsdj1biOzQ?hDPK24Y5wA4gaG z%AOV5J~k`1uY%07}dUZ^E-O64!4qwPrR4kdm>A`KLM8ON_eFRc@YMa-&2GUgI9#C8|wCp+m z5WRJOCYUElju=*sw~3iYDcHkg+^hKh%^kTAn_KK8q=bD2!I`X&(Uaty){KhwojvCm zQh0KuBn3h+1`=L6Gl|J@$dA4ne>8d+f3xM{2!nP(D@d8oyL+Cwk* zC!vSX+Ful44M<|8oqb6z#~s}UU0}d<>OSIG=F8D4llVt)Y8wNkujpeWe`^!H8fe%jk_k?P=yLV#_sTD z6VnUc=IAz_M@nZ*_8ZM{dzR!*^PiDndi?-3;K9u>@V~3Y4@wK`&_7MRlty7P!uiUT z+mn`pp1f9LQJ=&y^%XUlOtir*2EIEGE76LqOs^m3;FWp-`#znRp^0!K5tP~slLX=283h0}uB;8vaYm1IU6zL(td+7kxE_<%x}n%%Q(5%;;$$b79^fxOg^*a)A*&= z{0)X&D%xGkK_LH@jij}+(A!)cBMg~5g^W2d!{EKzLqni} z^g;ySm!B@?fOB*GXfAU3hMbU$%PRPwM#65|ak*5?yR{UJN*7$nwNEo9v+)eypKS2D z%_LoZO%gR+i7@@rJDUmdwD7b@36$i|wPOZ0N@}S}X<22ca;aFdt8%GI6vNg7@?Z{1 zrKx91$qV}=f~hy;++@_V!x<;1{4HEkJ(cDpnx^jiDrLnx3|u4clI5QtdT@%*iXnMH zd|iP;!cJ*SozI?@QS$vKA4#UJb_TKcs`?E+ceCHBJbujT@F|H!U-)Di)|xo<9`RGm z@=ecdEd)~0a5mF8Pcd#h7*tlftCTkU*h2Jzs*x^@Iqws38&y4e*;MyR=Bm!kv>1ydm;rDR3 zZ#BffbPS3%@D4_2QeLvFo!?}fcu+->@~P-@G6k#cwbZ;SPjUg4IY)F7>_8LVH&#l) z5yi=x&b{Vnxl~%U0-VIOXqLOmJoi$_SZ(Ee$p!CG(E6UKC<&wFKuf$3 z!j$aiZSYbedkL1LxV53S#ZOPre>>5Ljj1*`G^E3!S@YTP7r9R5sQkAABZ`yG3CIOK z?LdzYxTz)j<}B0kiF2{tDUK4VXPB-Ag{qAaF(>+7yrm6p=@oAi+A3(C)g;>0H=?U$ zOCVG7BcYeD`+A|}ic`Z#DoxANOd=1yDKr_8#{u!Vn;%jlls=Rs5fd0>Tz)R+5#Vy` zJ`q#LI}WsFrWskTQzX0SviF$s$=lzTKf3eS@@bADH|2~63L^n!={`m;?*)E zIi|2>YkBHdCk@qF4@>VciM=`LJW_SMsT2i0&DTv&)aWf2JAN6SReV;wIKb};S zpE{R}o>~jTU_()gENmz6QM;OOTS3-PB7zf4lN9{Wn@(7q8)QG$ zIW&otb=yFeda^EmX=LnpmO#qccWq2cpVS|=f4o5VA{?7tUlwaE#hCl5^X0`=#bfQh z*l~3!AvOovo0ie1l&Vu66iZd#<(S{T5&lWMxr1b_KuTrs!B(kpKt^?Eufv!e|N6NT zQp9_$Tf5Yh{o*xt66XyMS$V?qjxUy849Iz>9`k9qOi2A;rAVt-O4t9KAFYUxU9snf zY0NjeX1Lj`PslJoyDmFjrDVc>7yWh^o!na2PS0jyOqIOYwRkbug#2Zl&06xUFtq05 zZw0P|-2-FITRX(RL9D;66jYwFsUIt7AH(6hsh9G(7W-=a5lY{9%^Lyz+PKGX2L4EN<=z<=B())T**N2^1a zy*It6#pE{ijK-_QamkJ{oRhYd%T=6?TU%#y#7$Tw63lo3U$wm8e!Ue^!Y{N->=Xh>)EJk7~?&S_`O`qa}x&5F3 zj9U|TInz(YT$iDJL44dmMb1E!iQtnUm#JZ3$bo`JjqA=xHoua6V1(L+PhJ9nN6}Nu z59+t9Z#2DUpFT|uTg`YmtvABP5wqHOVFSZ%*-pmx-9XDOijqqp?Z^#ABQM=0KYNr` zF8`{4GVCc4m(Ga>OGRzmZ}W#`qYb8_^xZyAYmp;SWF?a+`<3khuqSouirO(kjP$c; z6b$;>ULPY$`uFBCdl<|HMr_@2W{)M)xjl?3I-IqZ7L9SZr1d;w=qh#j%W%UJ8Y6Q^CN2&m{mQY#SFFkVLLczuWL-^}H+n}T1Yd@KAe1Baol9ESoucK$Ul@KF zjtgQq8DSpjLr1-9zHYf2n`d#-!t&a$3CLce*x#O%zE1Lv4$o%}mEr566qWXkrW2!$ zxXMyX)6VBnlLJsVi!XYvHc|DOJqzbV@r_quy!6#O^5APSIsgizPFIyNDMk%>PZ2-f zKZgnc$7#H-pwQM6+ppT?s@+xdxy6~JZwztDsJ<|1T2VDc`#)$y%PkP5V^hA>vEatpa)GtM!J-bRCTxD~zheOuX3Kr5#L5mt# zZ=g+wJ~OJW2SML=su5do#4GbKK8T5R7E4LFjT|4{SrBIYIyMQbDT;}TL9YM0neRi+ zQ>Sj<+h)(YB3Ad9fBgL^qjSU%LYKb=TJk&Y=Sd2bM(-gb;xj;Pv5GpWo&XX6=oOtVA{~cRC98zMaGUJ zH19bn=5=azJSFib4x@Eq7ri>dU!6fieSY(79C_zWsRGfCW4y!`JZn2|o9|6XJb8HL zG&ynPMIsthUK$ITmRr;r#9D6&p9S1E{>+ui(5Wbe`|xJ>;KwNp%Tt3NB52X&t4|Ys zX_*%F))%If7QpbV)@3I;jp5mG=>W%eZtG?mT>-qV|7R|0=r#UJr&tse==Db~itEo@ z)G@&Rqe{TJC;_4zh@Ab;TvY5CBo|d~-eTD0loCTpEdPp&Hlc(6id<474nqf>{Wpd} zf~$;ebk=xR&(KwK#B#(nP@3Zoj0arJFgRu}sQ(E2)B(}u0wUAUM53H(c}{c*Om?*= zPg3p%)Ss3QxI2)$or6;#_PzjTO?Ku=iAq=bZmLOUx!H1>^GJW`93Z>Xx`)>*luNry zHuu5z175Kn`+##C^T(^k7NrSxTkq&V!x3b^a(|?{<6wVRT4!&J zP|9J@S{k*zx*BaWc^qdyIGYajk>jKLsQF-C9!ySuirsEr{Ay8}H$*<3D}>sPdTWY@ zd!Bxh?q3fpxKRT{)<1X7YRY(Tek1#Il8gCZW9@H8$#!Ea zkKGiz!bt1WP|0u>>}wvU0VV8Ys4V(Qrezyl6yAah75TvhOHnV$3OP*0Md%!)yY6$5&sg!8FgEPGZUoh3u)m zPD70WN1mfC+NCS}Ff=>)q<=`j@xw?POd8#r-8se3#*gD|`JC!XeZKez?*wh1r7biV zR>*1LFsHE1h+{3BuDnr7j2X)A5mj^Ggu1a9Ps*J*x3n}zRT#y4hkjLl&baF$a}Ei# z(1&vPRHT8IpUTGtOVM#%>N^nz*C(w`u*igz;DMD?J?HOA|L3ZbFAF!fJR!$k8 zZ+I&jsD^s1&^Hb#7i#juOsPMPw-rYMWF0vY+@pv#w;aIIysMfbh#jt=~B_7eK2EDuVL z)`LrfaeF*Z9rB4G38T^643Ss8ReQyYIwCu`LS$#M`JiS-S+&e1}-I$HK~Gp{!mh|0$=9SWwB zw}ox5wbuvP?TGA9o-*`pApG#?D3Vu!s+M)$+;@G(DjkHa4p zu88(h({cG(W5AA1mWcVu|B$Qd1Hpa4KJeG2^Z3zQ+7!K@~?8vwjtfK|yu?m7*b5 zvtsADhZmX79+HUCsfyT1pK>w~-`{E#=o~+^pN&zveTwYLilLIoPHFsyvbn$#82 z)z>u1>IN?lXV-C+hmEHvI9gKIfqfC3Dd0;sl_W8jkGvwv9a68XIKscvcx@#11cowN zpQzxWanEv!YYb(@*L7d3HX$n`B{6!gG-fLc>DJHAVCid=lI8_M{`V60`15t+sz~r} zigJIJxcM9q1aGYNdp8H$}>hR=6>#b`7^54ZnudC5fi zg{@jkWo%(0AB?NCow8|C?HtKeG;_)4Uea)0#o+L$#|zx|Fn`Hn`dL2e);!qkN0Ar0 z1zV1fiP)n{*mSY7EvPVjFkXK(%kGbEkZ`(8LrigNYd7y!eUj~L%thN%xBMDDXSNG# zzI~BH*SntI6zi9%(~a3D`ay1%Z5ij8Hw#~>I)Cq?>)`kE-;ZMa6`?0 zH)-Bw`}B0vh1BQ1c@OVX#TIFbWJQlH zT&DQ2y8$IHRjuQ)Q?UA8SbV+Ns805n3kIBdm&8l+^L+=Nn4cao;80sR}&hV_HxA)M=C6HUNLl~>8N#Kl9me;l)@_$GqD3A9L}xrB61&& zb%djA_x42HJa2=?oF4W3;z7lUR*zwII)f3k>cNUbU7FZsG8gJ|ZK5DvsbHQba3?M` zGnDNJ|0v1huICS1^4OmDHMKh7@+$YG1;4k~?F#mlo*N}pd8uFyL=Gf=g0EiIr(cDOme@muqazkKv#6s1fHm+w1%$pQ26oI)f{&xo-+~22-tm ztt|5^>g$>B|399-J07m@c|XyG)q_~QtP%-PR_`s!>O?QG`YMSKU33z?1*`X7RuDpT zR*$GlbRmT3qWj&vKi}8y@7;UuoH=vm%slhVxoX_B;hzD&8fyS$eWX+*U~2;$k13%d7W8Dxs74QkW>QvB<0nxJ3Crn;-;igcu9!`^>44gF9tEnTJV}spL=R8 zOI-Fj--=!sSolnumQaBL>5d!}1vqTk3dk|fF$Z6%!Ucwu;mJd^kj;miRJmQ8l+b** znsN84*lgU%J8jV(AS|8}=jtxXWYQ8cm*svZ!gpe(7@B#0o(LYu-&3_N<|HepRTt0| zPJN$27Ms^$oeENf6acpJtl#qOL>w@dr;SWQ>vd}DjZf0V)n~8s7PRVGrgE2E$G^oV z(HmQF3-E9)xDQhd4H1>}4Se%wRf}UehU1YGO(I%RZJg5yk{BoUR2Q|=kJQOQ2#v9= z%iIk%$Bx|~wG0!v_j;{VC$EsQgGH#7EBSf-p31!l8P0E{z+zS3e`_A493KAR++i2% z6HzKI@dVi`-|@R^w`e1ygEHz74)UmQhGQJ|C^+0VH3by*GP^eoLHpv36GF2+q5F!J zlst};?#}#oXXD9W!fjUP4j^$FX_Rt_Uin!0n*rC5?jA||;ELAFGRi?;`^B?Fs+kD- zvbp|?$9FNDNQ%s;{-k8#RNjdLGex%K_XM=?W7Cfv_HX`@el@&s<6ZrAb-usT5kxpx zl({R=j#p)1&6f@?{J^TYM)*f+b37#k3~mOD&~QH7CA8!(YL-P zGktwn{2&cpMaaSW{i+C&@{O}Q(U>D?HF1_~B|h)~RGt!C6UdcSdt;^XK)QFYqn3%X z%|q(K9RizFSUn*ELhcr;Bj;unO5A>D+_OCTijB^97z0qBnq<8_{bZAQ!BDFHBEa9f&#ZO<0LL(u65ebA6!W zNP2Fw=2yR=%bL|{bNOX(LNZ$PLS7?Li%?f#@TB$6r=nhFdK7Z7tA2SQ2`|1Zr)g;5 z7L=iXv?}R&l3^IcR_71cW1s9!+coYF}xnvvn8x)(cR^YoMHN>9T}eo_Bs+X9IfYYw?TKhZW1lhIltv8`3iMI1g$HZ4pAKc^UbWN>o`vqqwWX*6Q z*WnL%W0CE&jdfeXK~4(3JsUUxM?2j9j0_axxK6azc%HRi>f9|{MzzFFs2$&6Rm&7- zkBp>j)UO0$#&lA(`A~ghTOxX)H#cC){x~pq`)$4)Z0_gcE)7|TDU)1g&0((Wd&5TVP13aw|LL-lixe{y!|U|m1DFqeqKG&t?eD5D$uNxS**0e<(Y@5S#q9CI5jQQ2AK@^I5-lw?-53b61X2;{9Xgok86 zyudMp0|3xBLRQ!puhtX>Rcr_$Qn{kRl&_`|h`GpNi!J7fBZA4!Hu?TwEun`P4S^3& zjD4cqHQO)S$_Y|yj28=^mus%h9XIBRcCdu4j}!6I04@otD0J?)nYgkPhJqJvZhU&l zEGYV9E_x7tHR^2{6UkR&2Epi?9?(%brj7SkJu#;F-WL9QtIO;iIr8-0Jm zeM>JeVwB`;6nX83?7VP1{ycFwWxa3ycb9Hf+}y)(nob_m*)+^pi+tXbslHvG7jf;^ z%6h}lc!$W4+f@zUYSSXIm1B98fQlV$`YIZWIsY>p;r>Qyiv@heXz*S^l$^ryUrbJ- zih!&L?D;@MN+?$sJxI+msB>OGcz1?aB+Aq5+BWGX^(7| zN|m=IA+Iw(J>qB(y>OL2k4Wx?I(|J3=JOXPkE0(j8}>ot8Ff4wf0oKUPuy+%6mW+^ zDJ;7^gJK;El)lPhHy}376lr0mmw^FG|v4 zvbg*FieBq}9cABF_7Tha`1&FZz)${7@^cTL*aETFYrlRK^vuRuG&|b^{3(gKq%i6h4l*edhml(l(cNEa zC58;|hO);yRLLo^o^+G`L_r^0Z(ar1Zob#>KDiKS$fKt(&`&qK_0E$3UP5~``Rk9} z&9erya$jgp76Ruz?rY3yd!glLgh~Z@1?si4?`=un9@TIKi)|PYJ!md3lwZvwYpH3SDXzBuY<<4$OkGyk9cK6R zKvJXP0tl1(FNB6#>SBj*C4!Oqai>3jNp472vud{NEIO_?&0a71eJ=>NLYJ4bYCjFp ze{zsR1~N)T=?r3zpUSXgIWxAjJMlSPt-Oh)z`6ogHah4>^F<)6Cgm2B-#@beQrf&bktdkuZtChI8YN<`^l||sKnO8p%TTX&au?J02g`31pmpW4gJp}d+-`O=zmw*J-Qm*a z2j46?F5C(=6Ntx^gjku~fRpxejef>H0d-$j$PjZ6IrV}y*QfK&fE&Bkh4LvQ3%y1K zA0v2w&I(qMgfR_i@6sS2o7Cd`Icye9U?2j=M&g~8SReg(HNX&?$QexdTf|^8Y^u-~ zUqR>#V+VJm+KMZJri#AHQ*)JK;w0Q%)?_8zpO!q1pfm2u>VmBwELpp z!Hh!p=ZXfSdeNleg{Y?~G#(U4mcG-f?h1w>R{{h&mu^nX{M16?Rg8d>d5 zrbQknIC)N-ZeZr&RB?Xi)^Z!7u{yUrn%R2`(Z!D{RtV?UmGtStqd(Y%QAz|@$$a?0O2%uNn>8@RFCwmn?aFE$FCPaD^tVtkaCd97gwhrJdcI7wnTL* zg08+=R-$5DRyQTtZD4ku7d=}voBD#NVA#8z9Cw1|(@7z@F)Q-Xf%qTktXf>u;mt}= z7j*aI4CxF_YJozv4~vw&sLo}>)X&=D14*FV4?iHbk7g4=;|rHAyRoXUX4ci(N0?5C zY;4`Z!x_aP_Ly_k`n9tzj;(IeH$~<&#ATTsPJl>;j#vHfR~R6_ zw8`&q4iGE<2hM)q!b;bZTobyz3KBIUhYd!q2mLl)X?~&p-ko-q4Q%wbOa|0KaWwgc zgYJq^9eNedq-k0!OLjCl*Z+bn&gFQUa3DEG$~Aj9aH5t1uyOF2CXTj4P9s4Tsy?iz z{yjqDQ8-#T_k%~Y_Tt@cb8_n;d=gJrc;voBGu5#hubPdg>}pw$Wf?LV zjW$2)FL?Dl|%toXmBx6b`TT>))hh5x((N1MJA1x)D9_!^=xg5UFj^oISDSu zfl2Ml3s9fCF@sNQ&jv)uF`cb)gMJ^be_33}8qHm@N0Vpy!?S2j6X(Ym6E=i16C5SdmX_yQLzDeY>4hc95%27dp zW9}Mk;pPgILag-M z^aPPr?ydsTug1qyq2JQJjts+uOHsl3ppmmM{V|-y77F4i?<2BxIu@9QI4~{0H;3te@a(i5ge`pR8tOon9q`h|=P^*I59v4opvJ0CE(%%Vb zcI;*F*^*cIyZkdcv=a`Sh&E zUasV}q_Gf<7eNpxIl^iC;A)-Ph4TY?6V>CFTw%S235OW439}VUJmaSOx#o>J1T?X7 z{DS0VGj45oRLP%n9xH>7{Z&1*Tn*_S+A?Hg3paO??x zzmxdFzl%q?dPj`OS|v%GX|S-bK|Hc92bhy*Cm_iQ0#?lo$t;+h}|2MhyC zu_se zs%~(bV`M|2Z{=I+zLHLHYj`s^SB4IUZ8G&i=OA9$1hv|W3z0YWpCI~#w~)dVRZ4kR9FAj&mr8L-4(l<0wUjw!$Gs zKkg5qoXOh6+m(Q!r?=I^%gLyrVubfen7{|bZaNnI?_KsWya=pQ!i?r;I?)K%fU{No zi6_g%@Seig_EmRw$vXDRsniVy&|;+}8Y7fyEhqbW2iPX88>2$+@!&3&gI=ao?YJ6e zgcIr45Vxrh<;Tf$nri#Ogv8gN&r1iPq*s*9vg%{rjOVh1W( zwHz2FPf|GxZSa27Biv6Cp-sotY?Mgzx@6&s zwXm;i^meuVMM<=hH}v@D@lM2K=c8ZK*Hc-jP0 zWWb~p=md;3)H^6ZrQx;Nk9M73H~b1{_}dprvC2QdoZiH)7qXaY&2UL=j~x(}WtZpD z{0YKO{z)B+MEb}cC|w8+ipPo=W1`@87l;VB@^pao6+>Gs;p^4UYP3`j2C~HW1ZiSO z;&W>CV>z>$N*)?De+8D6sVlsn+l-UDdURoPKyljaw0CdYHHDh=3%dqdS<^~gG|d5O zK7G#*l<5y$QvIPK6d-*UaFV&tlRH{jBU#AG#Bo*saAY=+-;k9RY5ZVd+%&sZev}#M za*xLNE1ks^Q(xg5mBgE>l-Eth0i(<9oQ))Puwf;B!@-o5)bWyFXJ-6*^QtuXJntq8 zcDIh{#EI{b)Wx53w{#m=HK*OEjfv3#IyU7}MqC?JOm?tEf{T&OeRomhV$7Uv{Genb zr6DYoP`PRAV)?S8;ak(PL!62hf4-9@#j|ny3>^VJwSfrY%DJlf2~TFR6NVtaSMN0) z8zd4Vv*QDA(>k+CkxcO8R5nWx3d8e!x{Pinl3<~;5_x5L>)VJd=AeIQ?CTloQ{4A3 zOfbR#Y9{dndcpUJdD2_%q6%AWS!wej{CILJC-b%2t|321xFC`4dXb<1?X4eP_OFki z6I?P-h24^xk-EkqEcM$nvWpLPT3PzTH!YJ~vvryO?NB z)}vL@o3|R12;Z|=VXs1QU%=Hq)Q{HZcOoOx97IbX+yA%%r9Kr&D; zg=_ci4;E(dFYJS9tI|Jr-HY78wV;UqvZe%1rBL50c9QO5I-*@GqA)9A{%K_qvAjq_&Q_wUT@A6(_ z!acKJH8Kf-^v{(Qdz5Vu*^dkA6NWG+TzaM&7YL2xs_!q&RD=>i14aId;`=S0FLXs( zFB&t(i;i%PPj9XmAX_U`#r92R&G%!F*eTm1?sK7+Jx%fJ;qk&2?2&We0GuBQ&BA&09jIUgM6q(v^A zYQ&r+@3X49vCRF34%@Hm0GB?cq`;gwTdz(I$1; z6y9stVpoP8Iki=6cVDy82Lj(yuFP#^BL~U&ntLN>8wg5^{GksGF)7rh*^h8%bQZmf zoL}Ct>zG@D3>y2 zL31B?_!$U(c>bpC$+K!fUODVa!?s6#o?8=tG*@UgTf2DZ)S>CR?3amKO7NY-LM;OT zzvwcZ%Mnp@y*ZR-1sgpqa;j7MJs;3y8xSa~+lS#fo%Xw}Ghv6;mVgF-1q`vC5xG$2 z|DI9CqZ9#rvnz6WXUFew# zY6s8Y_=|{z_Jt$jQ#lc)2=}MH_QK!l$8SJw8 z{JzHWCy?v6XG4%DpX7gi2`jNt2#r!)9!vt&7TbBJIQF&F-h9g_yvn`tVx>=v%bxW- zUdqL%YByKbYpGU-)-Aqs;Cjl2WqUR4t+Z}Ql;(cIW-XuXd+Ot8O5G7qqYrZ=pJve? zRh@HQaW1TSUCx%;ddMQLsHY1R$h}vjs1QI-;;FZPJ}gr!etCf`(Pm``@=#i=^J1iz zHGBmOzk$9yq8Cq3)Y zehSeV?ej&MbCb;45%Wcjo7l-QH<_(d#sZy`Gi?ba)+(7=J~UnvcwV2O`*2`ho&*{w z>ZQ(HTcQg@({l*xjwr0Xm1*;%VOm?tB0=!c&$gR+()ho~%!F7kyKil0Ve9!w!FUDq zmqENH%5*KKxW*_E^FX@YWq?9v=``(dBPa(QR#1j&VyX%$y)o|)1mSlJe{W1GFpn=> zTCs?NDVS#TEWrp{>;*#8%$4}YVBs%wnc)Qby28nU!g|t~s)a}V;nbm=NY8kv3vNIB zcyr^6+~RqT2&{~aV@7`YZ{`s2W_Gr&eqG@YmxwuKw$n;X0~?VC(fb0N%}`EoEdr~7 zr4%)EUUuiY=w zX@SqlLFD%`bQO!c{Y~f}VW_-b5D2kxyComI?av`CLhG9gI1`?kNqubHcJ4qTtR(JD z=&SmBl$e;JR%`0+&R2_^QhGm9hdkE$mToB8GRM*6l|GQ57X&&FIojV&&RKP2R|6mDaFV1s2!*# z>OEn<#!@9xAg}0Veefx?rntStL@^&RFZYvJ?Oqt7EaP&d@U6j~f*zOuOU7r*UlI~# zXyOA{vk+F5iI+q{rxW_JP3Z8t7D5_^uTL-RuU{T)>XD7E)y>Y%C|}&vVxMX|M%Eyw zMonuvm@gQo&qpDbp4-+M9bl!BOSqaXwkat5OQMfC{Y%CKV&>?5fM4jAsNwK9zr96$ z0DIATP}#1WTAK^$Ri-~`TWZ+;-iKWvd|$a2E2%P%4Rh~{i<>0@CwNW`{cJ>u%cW_W z`$S~>iN>(jm)II}Dh?E3w=pqnC}O#buS%9A3UYyn=}v4F145o6A6N&t8b89&bjtH^ssV8^5Qz>wC=6cqW4o98`ZSl=neTC5s8qoe&$U+Fi^$%3qPp z$UdD?M0c1IslkWiEa!pK>s2Dl-0syfB+tGb%7sr`RgFm-A z4gK@E<{Dh@ru=86zIMOf+dVe>XSNy{~t4?EV~_{N%c8{^iRtQHqN_C*KX zro({QK0HVD-VzR9*ifhG?<&oRDi%U1PO7ZCkJ;wmyHbbv3u6(nqwQY(GMQ&rt#qnt zO+23D`wWY$Nlb~A8S^ZBo@~*#d{eq_5H{HtlT@5Xfmik5a`F7Qi4xOkc#l%8qJ;a0 z3tx$FJ#V4SfNti2bI=`AKNuHGM5{m)Cz0V2gRxj zc!02+=&(XIO6S+YQ${6|UHSPp9dR5#AV6v=ZaXVc8BlWV>qs;M{uNp%3O0fwJl`f) zkgLJjxT3XIU74c4zvSxT%k1<|FGfga7@-Jl1(gS5j_k@F2n~F3$f+Wz1-?8R0u3@N zZXLu+1KARr4!9FSg%_A8w`HNt3_(S@!f6itg`Wr{2XR(;Nj-=9lZgpz^^~(86+0KM z&$DH1nmh=-0=t{KPY$#i*(O;+>k!)bKll2QeCzYw_P^Yx9|$ZadCwF|sI?KTQcfop zt^T2hQrk+}2(>!FgQQ6G7GAe>qoa!b?p%rBS9n;wCK=vkkcSbLQv7x`RqAa}q7SXp z=*;67sC&VeQ~evgdHbq}8jaY^|4OTvERzoKY@^zN$TJz8%$>|jp8xHk0r!Xlh z*!KR+hB^!8jodsBIJ@V{oBhKP0544jYG)oW2I@@Z54QvZ+pCoanRHP%$Yo9>7MYC7 zAS0;_y8NLxNvF-k*0&%;m_Yciw7_^SK zOtQ;$a;@Wl_g8@&bYtcp|H80ExOkAMs6pxg;1az|ONr$K-}zFq=$3mvKz19t)=8G$ z^a6NL^?Z2nsXi+;zjJjtx47YeR|Vjj9?4GAUk`7@HAJt)M*ON*+~t{_A?ZSKe}T8Caz>TJh)?Rm^~50w9>=Zb5_;dlgpbAt`ddVbKP9y`ayT3Z z?>SYZf_UGj2)#Mz{FSi}MQRuGf5vSQezWekZoi!ST-ncamKplNTv%1s4^a&V|I;X>B$aQaz&&{?k~ z4?#4Mn(3h<)<*u7sdYtQzpDvfQ@N?o04~CUOj^BB`|7V&d1g{~JwPX5o@};TCL)bd z2o-5BW(7mM5@2^^@P+^~OdS;Qn{Xz!={Zl=@{hfFn?(w_l7Lzn`wTSRCa!>npZApw zqt`z8YaIuDzmD)OVPAOTqaJJJQ%X7L0ulMxc+imxx3J<@x)2_(Y)A7{UP2@O;e{FU|ksRb*>Qh zE%)A-P}NDF?Jazq`BQcJg#Z=o(}}M*q5Z=^04Z67P!vjYclRxJ@#OqU2M$l-e)x;# ze`-j&E^>8{%CGiqUoKI_oO`y$RNWZ^Gq?{gB+HaBl+Q-3hIDyfMoMp4 z&~|=Zofg>%WVd4J2wXAC!gz_E|tkv>O%acS{oz~njU6XCYVLe(}W zn_8I(N-YUc7>nnNMNj->&LbxLToUvTMDN@5NO0D`S( z8&{=0#X5ZiPy^|RY|cFho(5ihbsrN$1brK00Z>!*zkW+av;m!ZuBH>;9%5u)=(FsH z;)@5#YH6lx)0AZ^=BM5t*OAbpl!~(dNq{m2DFTV%tWU4WsHV?ho;Ct|TT zVWd?gX$aocI@-*NOzdMhoTuLtxlglgIGu})UP$MT*2-wVc-;7qFc2e4GgoE(J*OQc zO2i6YQkg$Bh+h_%o-!NFpgJ<7mAr=D$a+$8k;R%*QRgGl@K0M<_VM&~{&fUR69=TB z?prLPbusVD033#T$Giu>r+y<|q)S~29kHvjNA#1^GxHl|NSF0)JZ=+Hg~58u3uu#G zE@u`q^5?tX6}Nq6dIXUHT`m^@Ni0z{MDKP(5r3|i7E=j1ygddxNUBJh9xNxr01`-eO)V$bsrYHoNt&Y2 zJgqLf;BXddu7U*6k7=G0e=dQK-HU!T$Ke_9zVA&L^RQIiuIo`=C;M2&>w<$HJEX?UC<5Ld6pGuw{8N%nAoW4e04w7 zdmF>no;;OQGlVD0|6Z+H17kJN<-24#DI7{${&sv=1*IshE+pAJ1R*F5I)GCS**WJs z?+lv5LtCvYX@sXUUtqp@$xFGW=@8}sdc78gfzlT4p)LTvIwfY#$+gl|ZKA9bns3|G z#EJagO%{Tn#-0__gW`7UED+AnI#*Xt=N~_Ob=Lio5suyP?vw5vT~HN~mC3d6KY}-0 zUXF)5$ZoB{nnHch`+Kw`GO+7^hNc1062gjmsln~55RKSvJ$A0gNd)O|yOi#YZ@))a zQBS$eHQn2DlHQhzR2h%|$I67DbX24vwa)>z#Q^21Mt?ggOP#nks-98?ZP#)zt5-K` zE+zu>RQ#PwF=2i=;)fw3=@=~l0@`mlS&9Y*zbNBh+5$t0z#3gWf#-vXqKe{_Se93>va~B;|?ZtC5waDFkT z`e8j8lAaL5S=4#`Z7lt^b)nkgsYIIyd5p{Nwb_Emw;!}o@3?U>ycAgDcy@A6WN#w3 z>YrSY{T&d~P$#@_o)Yg)jx`XL6S|S-9`An|p$#>~Hn-=d=Qw)?X)Ijd)$cZG2%E&M za(u@Pkj8kxWuYhn$0)>a4qnVB>(Mt$>fAHN4Pv9O36YX-$LDgU)Wz}fz(8lqAo zd6{z+vnDGup$N@!2R2D$`&etgAqH)a?G1|uo3?(VmgXsjFZnEl+hKc_K?^G#T`g2Z zIZ&9t-PnaM_N5EoD@MD&DaB!>E4Gd@so~gr9bnlXkTLYA}Gr~#ubAjaYIGB^JlcrxRX4WjDCk??& zlNifE$3jqw&mWyS6T|ZaONJWW;BS;0+pj1pne^iycBKz$yw1$Rtv*${fnsC{udUfr z-jayqD+=}gW&vl~CfXE!Yw`yWNm*7Zy#i(?O)^-J_5}h0YL;5X!5~0Ymdc83s8t;u zE~$$Av?G^Rintj8X(qICz`z#@O{jJV8qanT`ij)MdsTg{%om7gE%)AVqsXJ9+`X&m zxU}TuL~rCNG2Z`B2*&Tid0%}w?KmX zT@Pnm$(X-DDwRvpMGB;rEkzr86LRO0iH4Xm%Rz~3Dj-9Nu~J$c`0ELv1rF84^HU6U zx!*F)pPa|ZqF^q$?3t}odF({cZpBT0kppVbna)1iVJC{K&bMfJBr!HhnMjs>osjz* zgY?IUXXSKVmiAMzOVhQ|MK$Iq%2WE;3O~z4IZQdNjB;H#^G^Jl zU+_3s$hs2AHA_d>{roY_0_M7p>WVp9ht)md!Z}0b`=tYYR1vTZXLV@ccYMRhoo2$^ z(WZPwsG*Vx>b|cgLDu*1rojMdR*w6@7e$7Gw^A@Pp5!N$DWD`}c-`a4O9)gQy+`qv z0m8fE2XkPQqX%cS$;LLYeZnfdf9I>YM>$>45BZ&lG)h)_=kk;p6eoSQ3bs^MuenA! zqBB&cpHZjyc?t(5QLU5rXyn(EUwh?>U0O4p?$3r}j{a%GB+u1B%-WA~;k4q}jI&;9 zr{w4-)P17H)D_Z?lH(RF4nKmt6G1Mrp@dr{ z{XHdCAo5`}Pbv@K6d6^MXBc&kx^N=m`3oa(e=f`!=9@IQMB|llB}b*~{lJ7FI_0Gh zJ5DUET*v`styl}c=`n4na~SY%{M4uC0Pi1~7w6C^IT(O>hpS6ipwm%7&y+i-=DEJ9;7}+u?_X1K z!YJL#v`0TV{SroUyd8Sn#z86q0(Pz*WKIrKl!V8KOuXy_k%g1Wru=roc?ojPv zvM|4Y*dt;3JVcSJ(MKbOs!0fbJ=5&7AH3%0EMT&8Y%aR29+<#j5CLi2aq(E|9$Wc6 z!K9-Z(tJb&F2~>Uj#$eEYR?_K*YXo9&5ou`2_S+5kQmfEOWk_EX{F~oBI9|AK;$G2 z=({nI5q`bzl1b8krtNzGwo>~KvqNzMggu-_B(qdWEZ}u<*pp0xFKx`i+#n)oR(BdgwR&Fa{Z!OD}=^soH+P zYU;?Pk*l&Ic!9{2ANC_$NEGYy#VK+UlC>sVBFwvYsCw&t@suKJCSoqHpqsz@L|X@R zY$>Deou~Gs?t$Q>t0=13YMU=Pd(P@=>Dn%TlZNnc9$G=4%~X+=WtPP=wbZjBwV}Vm zjir$e&nEcvMIshUIZ+qi>j&sY%Z!Kc0=0cds>r;d%v=x@cOiiHy0oYFe7j81<~0ORp~e@4}#Wa-w-B%NYxQysODCv;(*Wd`44MM5=m#nEEdZlr(p`mykUb?W=O=nPHl97PtzQgBJ?A}5)!@nFRgrym?3NMhbG!jTGoNF zaWi&xf2YD|P%Kh-ABX>YsE8h^5NRjwpV=8XKn)l4pt$7E4MEIM0(Olb2u4SQjKurj z@|8Xi_(BG%dm=B93>qqNnfvl5l$+wT#?MRX{$?hdKePv{gR%ppMisPk<@OoQQ(x-} zn+=Xispvp@nWFJzQ>EINF)Q9E!T>T7%E|xCa>&jo!6SW{NYDxBYDs=r&}i0N^1IU{ zl5dk0=~P>`l~WtQ=78Eezjspa)3YSQpoL~eHunDCVgxcTGJECb_&Wt1MBhziAg;xD z=3U=Ex5X}dgvN^`9es8E>H`ENmzIxs{wvfW5a`){K`BUJ-%d7U=UoRsuB7=2+^>yQPd)?XDWb6()HpE&&CA0qbJ?zAvljln5?R?7eS&3Pyu!W+H{8EgK#A+Psq39u@8tjJJ&1_i?ss1=0?vkWz)SthqwBL4dZPn z;hq1k5$f*0et-MgfC2qDSi$N|B#xd zjOm;mv_#6Jri|);{0g|)Zx5>QyX^%v97wreyDWM9uE~&q&)eKeR^{Fud zt3&CIJt=|PI&4WN^Z61-Q|*fg2?wn-m7Z<>+c*4jGJriSZ&!Vh$pJp=TkRK8ul#M!G&A1BLato%}0Y?|tGYU6qBV z>tql1|Jh#z>h+yzIS5%U>7II>!}FIQ?8cTSeg&YLlfTflQO0w z5k-jel@uPd9AfZ)E)lT3mA7ln!HA89iwmuu&jS8js?LMfN~7|DNebY+dVpA-Jj$8w4b z){}OxvSZA>|LJRlOR3;qHH4Z2jPqbmP9k}<>ixd>bBuPFs)V+FEQCFtJk~^p-&h^K z9u0w=Fe6hH;Mhe7Z%IjC>BP~t5~}NosSlzO#(Nw)@ARaUpk*2?4Nif zupx*)^d{5*nuf63yOILnAAgZsTC}FC0yOWBLf3ox1t3I!h|#Bft;_as$nM|1G5WU8 zp0p}*5lwp6_3u`ggoiJ^?q3IYG}jznOc5cTqU~lh(~C)M7Buq^W#@(x+G0_KP$#L0 zB7`ImDpxUHW*3PoiSMHLE8+P7{f(!?J_$4^+B;;Q2&xOSVHjKw`?_9One$nS8$7Qb zmSimB-jl#oqY700PDl+g3EwzTm;i@;;P6Jt)s3)&Q(#~ecR>1fgb82FKj^0XrhSk7 zlv0ErF~tqOz%7CJCX5c{FROKsb`ZjQ(w;6TL&K`(({=LxV3+H!uB*6Kp&{WNg^{Bs ztmLprNo3~^OZVTQP3-193sJi8j^>9LcdT&zli~x;nXaw118Y^kufGmF%OPqNcuLsY zz(Fisr8^zln;aVjfDFqCgv6LEk1Ng+FJlM!=mc8lc^Ri2T)0BCHx24g+k6W51eK8h zfK8_%@m$agMBAf>zesoY`}c7$Wk-IDWu<^mO_>upE%<;UZqp>ZF zQpuA^xajq`alO{uKVSHej5>5~4@*J?6Q$K4)PN7vh9drjFm}ops$g0?wTa%QAqcu8 z=-a++kVs%@wjW=Xqw=W9Rl+C`p*ES>vZbVem}pf?T+FT&LB!y*eqe$0{r=0}>u!Z^ zTqT398ksEKKWfys#onRS9NGjpFLJSK6wtD#7;9VKC z^4O{m;B&t?TX{NEBD(D-WsGcrTtPai$*(8ObG+3d3DkRxufp&1elTT@2Q|No6p>~z{6<=9geCP2VHz% zo-@6t@CG44C*vVIL!qHeoxqoP5u|~W(4l^5yvtAx%&xRlY~w4k*=S;G^%NLG5kgnj z5?JJ5%>M9Q$^Z74f+~jVWKqHvJF`HCdwjDd{^1}btG8!>*Vcy9BVFePyF=w+Z009? z9bL&} z`4HWDOax+w8P#&IlngK2wI1Bp7U_vZE069Nw+QYe_{KlKqNj{YNFJ3rH5&204~T_OHln2PF>`|SHV{ekoV`Muv*+OLRW0Sr2-mdDkSrey;Vj=w%>EUzdzu8 zpLaa-zOVapy-95sIYdVa?twI7wN2V@A63o3mk%D?Be4|u8i&DKdX4q4hD>+y9vBU` zzvcP(M(Pe&q7Vk`&}7I0&o|I`#IZ$xSaU!QnCCFHMh1S@udsT64;{)%8Pv!wAbKDz zl!3^*aKvrASh_!M&H4&lgQ|(}ZWExG412(5=a7`8AprVsS$@)P^=uO4)yH#c9x;$= z@--R8;W`>Df9++tPI5NC)^T^z35T&k70OcPrC|1$b%@M*uxY?i*lBuUMx&N8+AIsI zh4J1ENBH}A_fL+;r>jz@PRA=FuNOW4C8EN>+EqAggDl_5S7ij__T)5+5q)ucw1@;q z-6oyYm600EfsQMPZ-qc8%p_I93Ct(Qb0500Kv&OFx+}mM`Y&trTHpvtn2vARBz`Cu z>(1xWXqYPWt>QL#SrJ5sApyEGwMJiGBl+L^3SsUC$rxN9OiDoxm^7>MX+r18Z=1WL z{&WgvZXU)^FR>)qVz9Bq@fg|4mUqloM&3Id6#GX5h$?8TG@{PNJnohgpPlR1`&si; z^rPWLa1jpud#HI(1Y*g@Ib_Tj-tUBk{0Yi;RFLlISeTwY^k7NBsj&503C4|SfslcY z&@iDj9QWg$+K3#S1Q2pScsjc$dkTzGyh?SQ08oEwZ;=5elz&ZajL>=~wj0y<^aP|^ zLava=e~1!Q_yr;}ca`q-Lofkz)ePIGLuQ6J8_|~%84GMgQb%R()}IUyYmr~pURh&+ zmExkM`z}$-q8N|Tg3k}^71|Ch`q#TV&c8KVEo5pi7oxxHp>USBZlu?(<$>k@IBp%; zS||>r>U6maqQ-7qu}S?Igpb0&_8L}x{bfwoV$z)|5b|@v0NJC&O*$+*HEebi*;6SlhgWUq)3$W?2-s{24?u#7RQV9r5c;Npa~N0}M%kEosW>}e#A!jadXBkxR3mZ0J@BXM>NP@&>l zq%e4g1sK?Q%AhvX+Htn5)+DRvcvL&Ayq2LM?EK&H8+Tbbk%v$z7_G?ptiCT^Vwt(~ z7XXM8d-UZDTwIk{^w>@FLhK=TF~K{a@|mxG^CC-CG?DP!dG$tM+AC8dG?Y2#D{ZGG z3z8o_R^id|ZDtZAsA}|c+{gh7Tf;%x6HgXgGs17#Jr{^`2k+(yi0T$yc0kB7HmE0~ zAG9(I^Y+{F`Cw79&2(ZaGAawRz#zWV{q)nCc)al!8ZB0%Fc40aNvp6}6OJ8fXu@Ws zezSTIzUb~fIQ}nk36y7wx7jR~lkO^(FPtMKSS&Doij~N&8(=}X=O*rUv#?JAKX4+V ziIF9<0#<4HKZ64#yVHlZ4x@|tz#P)FS0o8TBfVvj8l)w$s)UL+pCxJzinCPYmjs)F z=#;8A40Hu-WPezv;!d%)l!irj#!dT~Ia)26YVBJD+F?W)rJ8Y_k`BP_X~Jh;2b_8 z7ww-{d2S5^+Gn)XS2jhZc=!w)0)}ZrES&_Fd~9=KT}Te-on5qo(y#e^zUqmONsygU zuk<5iR3$>A><*1A!|&Y0FM9dYS*K1s>2tHoXv)U~O5k|X$2e|9`2B#f(Ueh<`2=~o z&^#k6w1y>wkq^mT{Sqw;A{A-OjqE(xk<66-LsNEU%U_}q^#}CeJkuY}3S~YGZ=@iY zi&}|%=I8H|&`AILPmWc(!a$uH+Or-aXIU+2+94b)=3V}25j{=x41|f2Y-y5hRWiOM zAHu5fPKVt|zD6EWHPSyndVBV% zCA&rn_TRr@KE+-=AtxMbv(@$YQGWNm-u|^P%%d|h9MOZJ|C!eAFSl>s(KEGbrz||HdZKi+O_v4=whhIvcC*{58{p>tHi9D3i&l0&Dv8&4YF%!JH(| zcV(o?-q@s#Em>7d(-`$`e_qYGet^UJI4v>dZN4tH6ZlKROoAa>|B|X=`>!5a4sW5B zTGFqBPV1~rCVJq)R1n<*6W9vaEY5X>8*wX#6!Po#)pQnt#o*zz!t|f!?^`maBmqa~ zZ{_RS*Z#!wm!rO|F1Ky`-k{2B3Ao9`W=R_w zpgjhG;B%ROKYi;b6dz=ZlMX6SnMJBRo>p4{*D~ash@_3u^&EV53ZXbG<{&HL0*ALA)wt*?iA^w(G-R!ny)5a60#PpNArF2-IL2Pyx}yR}IB| z{^PeYvM>fpH6fALN@t9}<71g+i!!8Ob|vBMm2M12!RLf$p`e5QW-NU}5^UO+3bAn| zyo#pL6B`iEp=K=l{D%5Uz%WFtb}CbUdPy3lj?wW`pVdWi^^m@%y6lhI3-*ByM(~9No2~% zH>IR(9#b~c z=s$qoOwL&{eD{mh&&1x zV8UJId(t<5nljw;nl`;To!yGIA9lMqGtHz^}(A_YK=^0~8kmMV3 zngm*pn#R@pEZw7d)akB7NWCIc3|!<1A;~h(Bn1@4uNzs&Y;jk~S!j`4;^bL`!QxLv z!IeEGLuFhlx){cX|G`K8RZ{Qnvo$tUmGKwK!fq2N^&lq;D^xEynw>o%mQ9_RvO-jW zo3iEcZ(bj7Ygw$j*@lVeVAi|RQAsSJ5|(y$-z02)ePHKdq4fi5rV;?eY+rjxjO2Ei z4D0+oHSxsBM|qQf=5wpnBRFYTlaE)o{yU2BMm*M|v!cJNq<+H9>1`EM7M26|(mYTdtCG&TM=qw}+_1nVDcq0xZaOu}7=k}+Mwm>Fy_ z#f9h(!6{jV*svr7FzK}3dXk96U7(d5AoBeBSUCaR7g+tLBn1DF6 z`!UAXNS$N`a-#UO_@ONzZWNqe`B}{MYR-VKO>3ymR_mc#8Me5EFMJ#>|SoYjmE%?jQAik2}4*D|b z-nPU=>jc=T*s8)xKO5pV*=AxR-FXTnVc)|xm~H`38p-cKw}g|axvhG+pzZsRB42fj zB$F^fuvmJt1_yZn&io4|b$m>i?(g2?VOQ*LJ!Zx)|LtQvzx(;hey<=~?)kuFev6hP zbz`u;)4lSyb1C8SL<#?9 zO~j>O*1s<#IU@38VP|bG1=+G&A!A~wJIS#xTfNSQ^f>iLY}IwzS+{ee(4YDrLx7ZS zG)8?r?q7H4klg)XdBsb0*jJ#NuB6P;KuaM)79i-LJv172&ik|GwhvTv!n;opO8!}c zsF9_w{*H7Hr#t?wzC-WZ{wD!vU9pp4%viM@rOZ%OJ7uulst)hGP49j`5C;xlejv>$ zAh)PzXO2su^fuX~al|N6?M_tL(Zez7%Km7{OITS7RBOhfS8;f+LqeT>rZ?makc z$#b36$3&n$?BIiILo9`E7o9D$<%O2eW(soUWJz^+ux$D=a*bU-ol z*fCF<^M2Q3lT=O>_9$7B51KHR2Q*BR&klVR{FSD`CMj*ymA)t$X;)X5_i8OUG*hfo zLm+^<6-1;QM?>AR)lql3%{oi%GY0`qqF7gSZS4JFxvb9&P~l|E>d2QcTYA#}?qbTQ zN_iZ{71KicvwsQ+!;19p-<=d9T5&QEpBfty%q|=ck>9(^hE+JE7(z}RVxL+6*)@tp z6g*WI(WlcU;8ZqR39fJH6=_Lc-6W#RYjKKewVLw*TXFh9u^N%(qQN5K6tZvYEw8KHEM9~O)js3Nmct*6&>f7Shzjl5hegjui(@+Ja+DL7^0-J#@3-!~8Z(Px8?rjBC%EFM ztSi*YH|7q$=oJXJ@v3ok{Mlli`|Abi9$(_pbo)pLfv!4d2%_M=HuhL#)?iv=3Fd0j zi+J`gSTh!_9o8|35NF-{PGb>3bm^=*T-pF$DKJL*=F8X=hC7W;@v)+VhB98@i0NcSoK6^t>ETjAd}Bjm@Fpt0=K%tzeG7Fr z&ZTzka)s_)XOY?RDqjEHq}%&n8U`vQ!T_CCvQ=YW*dD0PRu`-eWxWESGB6>^Bs+t| z&;ar@<$bNbRtDg#Ql&FLCH@O0Yww`;V8ndH7j5#=*>*H0YKMjk?Xx`r(8cTO5e&-^u=e8B6$hm1;)(ON-Z5g%`Ktv{>*}W=VtSVzXzA4e7;{vjZ6R0}<@Luya^)^rCC9sjywxZJi?PvN5@ z0L+Pz4%i&%VQB|_;3?%?P2<8KkM=LMsVa^CJ!L1Ix}bL1vuBd}^>+~)5oG(ap~tUB zkWot~+V6a5?&~Yrw;70eVn~n$!Quxm_7quI{k?OONE$yID~#{pSYTr1>ev>P6eqom zis>FSp%m5xhOg2j>>_?(NvelmQ^JT%;#c$77QZc^73r6dSc6S8gQTM^Nk^@);A`Z{ z&vvjUmakhnj?}W!CLDzoTSa2Wssov{ku{L$m_PqpdX}I1hWKyz{ONRr`_5VqGI$)w7Y_ey>yAyhx5%7HJ)J0Om4HNS~N9D6TS%K{%WmtYUJ{&6Ke~1HtW}r2if6t zfnBZd3b+qKC@8gv-T?J{US}mvD!f=C2~Ehw0nc7uL80w zzVv1vEQaL^>>c^+~hpvpw)wDpQsFUGHtIhx)fjemdrP!tvA84hC@v_e+l zpsr$K>^s6Xakv)n!LkzzHq>5-mJ9^C_|7CPJ&Jx*?WvAqJZnO@qF3KMMjEyvjsYE=VQ_M+KQ_dFv-{yK!C z1{QBJZ_L4SJxfwSe|0kx0*rSu|ogIiK2@F?tME|04a#$&* z|A0d>(rv9jgp+}{z}vjR<`}}2!A0;{Mnb1=#V%x@)!#$_)vB|Rh9Hy5?EtfNd7NqZ zrNL0+nEC6_{tU1{+Pw8#rfx(XMFx>Q+yf!5i-o&`}XRY1}Nv5wm$Nzk0kIrH&R4 z@A(D-U@9rjzp^xc2R9df8ex&I@|7+b;jGz`f@!tOiX?lZ#j}4X5AxJ`3xA6=S(uMc zx(RgIGu{KL<$8o9%n$FL^~~F>M~&+knvhy12^P`O7VZ4vm_yCy_(YI*cOlMXp`8IL zerm8c$!TONbhxvMe;DY92ej?C#{2ykK3D<$deh%9efuGdW5rFpjW5*RYezE&?{JYl zjluBLc73_oXZNg8wGXeGwiC--9l76gc&rZ%kbpV#`g=>$NJBH-Nt9D>B5qmXFNVg- zg=Fclgo`lqOpBL}U9N(2O9BClQ@!oNtv^sZw)Y`aUt-VrHv2UDB3r;0Nfp2d51Dxfu1PJ!gQ_Ny+m zgX-Quk{B!R!_N)}U7Ak|5$(M>FBG5RkI_bSM~D>yMunQ75w>Oxh2;ckQbWRO3j?$u z&a5j}jbkr_bO{Ag=%8tGU&L2`0clVY8YHG6C{$9@ zzKaj)L*Buf7d%}I(30X6!m$essg(H(Tp4h;LTXEOVC`21-7=+KagBII6#XgAWk7%a zH?sCTJ;p}J+7S12Yl6LFDXUdP)9Y0!HuHTc3oQm}zw)2wAF2qdz*1UW*jgAn1mmg+ zYA<{pLnu^17JQ66mnA_xe&fgh*JFU(KyXqx@csre0BE%{9m^Pf-4-BM9BE@I{gS$g z*yKF>2%|ZF@p0GbEouOZmTm~Dd`l)9kx;?0rWS8`H<*goCJuaTi2H_6os zprYPi>(mX@IUb)3Vz55S2fPUYLR=}o_^3!ts_3W6#Gv=%Xi#0C)ykzK34*|#g1PIa z7?W%et|$NTF$NN9l3qRQdWC_lm9P>02Mkc64+6!_N!RZdo;9mRsxaooB6$0d{+Bzb z2%+X5e9vOLE}rZ~wYjS7A0L?xi6{m}4hLI_L20t2{+F=DPwl%H$?<2IKWIJpqE$Z9F(gh2H1|jnq)YnKj?9#D@q<80C`o7bihH-GD(lu9#z}F>^y21 zZrRZ2$_5E$IwDmqR&n1{t}Hdl)qPpN(pWm^99K_`BzCsZUq=f&eZ@-EKd4H)s%-ZA zF?^-YH6wWLp@K5+DW>I+=iwi0zYBnr=xcE1OK17%-mE_jz_~_G^d6%27AGtH51$$4 z3jw(EA1pk@3d%ai`JmW)Naw;$wulQnNEL%2^8*7Qs{I z{FlI})iH>j?ID}(QKBVCV}*PSGL)5+7nVvE#p?m+j>PT`9DP}a&sS907}U@0HX_-R zM>rLb^<7bt4j$v#AZxGy(R-8ECPA)Yu^x!^#?0&MDY;4|G^OM}cK^L{ynx^f+1ASM z0`*3h%}GjD+S>kVj6|S{yzCc)rTMV_VBl&awc<3}lxhU`@z3#7SdZYy<$OY(0Fbfj zqF*>}=?LE9(!qzswV2@SO^+iRSfSlX7>fnrpvd&is?E{dm)6}8xh_h3Ih{e4r_7K0 zU%D;u8CT`@X|e^>&i2ZAHBjjp8yP+N3J4G!HZsqFHPj3?1Fet$^?p1#Q(rKmB1d`= zYnbyPNRh;00KEXsg0@#+{9fJ<4}K4I5Yk&}3;(RVe!HOg*I`)B+vew|mePIQKe*Fm z03#BF8GAp3B=-Ik?Blq!L>Nb(;z@BC9MXzlm2e`ym<_hlE6IhKMq^WE_u!R=ani$n*9M1B;FZ}}t4_vX^I2AweaVJAtwBzkPdHpXx z>F%~TULR&wsa#gg>WvW@&NXwqo%8N~XP}VgSjzwnG=J)$x^m;d8TLmG$WA3;9OgTH zJGYVQRy-D={qa@K%5+JQX|b$X>abHn;aCJ>CudNEZ-i#SLK3DKWGEB0C66l71F%s& z=F0hx2)E&Ds%KJ_OoU@qjOxJdixv&)mYfvan$TZv@+vI=OL#_8=X~efi*;0SUzL5i z48VPJulp7(fL;OL|1Fq5NP7Nl8)$e{`ax+b_vNNns!h2TcC_9#vR6_T+?%Sx=lYcd zI7IaT{d5+7R+OPoN{|FeYRaU>TCV@6rsb{#U-w<~BH>6=O%Sof^y3F>JAa#ayBtUB zHPAdsDM{P9{O^f)m%O-WK4Lf=J7T>X ze>j*}APw6qb0#ZS7wUKbBP1A?L2guN!SWC%KdWy3# z)O(?s>zq9f^3(Q=k&b?dV7}7v&%_1c+LU~8SyYGaLdR{$E*{4Zf3-lS*GHrwB~+2~ z?|S?$BPwD|r6Y)r^ukdo+CR9VQE{(M62|P&G{)wyRvVk3Ph49&%cPZwC4Tt~N#NI{ zQ0i!yzUY4fPC=5(bRnzK7|L`@in{+~yy#vcbq+nnJp-mAq!Ubs+CQ+mf&!uc8 z*%}KwR7QwOt%R@AA7rhvH$jL+phX~doYL`r8bn-mW}wRFJ^=21w>Eh@vf%jci&5wK z-#-P8G$>1-X6Tq&YL7_NX2-;_Gl5!vwuXTXb4n%I8f9{Ph^U*7d>?6d5UmL;GHy$XMkk-A?D>0%2pxWd&N{{y$~^= zz~S^me=O$_vtFaV;Q4{WqXcb&0Ls3fsPL^Tez8poo{lrYg0~&5*r9bJ8C|Z<8JS}& zqTnFNB8^`7iHHvFjn{Qs66CX6uS{S%3)cPNC)wsz@0%`f7aFJXVf_Kd-?P4z*!^St!G&-d3q zWs}_TZ~AI4Q&u}#>|b4c6?SEpw2=@)0&7@0d2MHm0&BH5N+%R!sER{{py};DO;xlD%Tjby-zsNcw>0sVPu*F?IOE@U z(UMdvXzDsK)_TKvUn%zMvk?zq*wvGwswn~}BmWr%xGx;ZYi2Htb?DbKnLnrDUdBt} zeDcxbc{1by#J28GCUWZy872`pm25~FzB!4t)o3uO$X|0LK(2HkEr27}FnM9Cilq_@+Q2KJgc^zW-(n|}!(e%nN zN=~(bOv;Y-C>@t1VxznPkWujwdc?U_H-x~eX?3oHfL`fZFsz>*%95(W-i;=Rmzf6t zJ?4Mi9)mbs9E#Jd{>pJ@1;LYFuH>?g+7MGBo=cIPV5Pl5VES_DAAk7M{rnHQ036jF z3Z=i;6tIh6b56`972mkD3{&4iMXpSh*ok$R&mHK__xTg<4n1$VE)aB-3i2^>38(CR zmHKHi;Wv)cnTpQv>0FQ|=MS_J4)4Tl!y01N@d(`PomiL8&-M;52H*G5(6^0lWVeKv z4*+RC&by*Ts$sq6(@;2D=Ne8|U(^cu`H{ls#4n>fnlRdHsby9xH zQsN932`D^6XSQyYo!lmy0EypgquRj(L;n}N{VfxQi&V#M-^V4y)`}IWA9kIN5(Pj5 z_tn9-rvSw_lnx%d=As1Q-AVf|!k$(V3|jOU_e!fO29RJ#9dVa+3C5UQU^@&0?D3xv zX4!{T z9p$g`1|}_r%paLO@mib0w{zc7EfYQnE6z?PUQJW~XReGsVRPSY4~1(}b^(m5N&ZO3G+EQ+|CG!DU=cv5C?{cAK|c(lIak~rl1c{e63JmbhWL& zBbxQX0?&<)Qa*n`SRh-zY0Cg_o*g}1ym_Nj1mMQeva|w}V@3F?_|dhSFpw1*BKVQ- zO`=|0$l55%dJE+t^yciO_LjRBca(TBMz%mjXmZ*pD0#nPD&%K_c0}En?PDr2F=8{h zDUS=64d^M^e9rX)i3Mi2SE%NWQy{llg(sD^u?UlQ1;5u=+>|7`^08tx6$xa7(85#O zuO`e)|Ly7=I}L?JrL#V+wmUoy@+Orv?)i7y8DK@grS855Ft(+%qx+1T|;1HWxA~-e;T8+SR0-c%;<)fxuWN>NB=Jmdcfsc45BFQqP>00#{5rzJCB)C zOj-z42{wHvcb`X#uPj4}MVmHCPN|yU(yw%!y|I@lrdV$)1)S)b4Sw#r{1^pLC*TZW zep%B~MP6+tG{6WC-NjnEK_;>knMPtMl=0__DhY}PWsO5pE@HY}j1=Sm`x|oYWnt`E z4&>{@q4I%(je7$x2riu4Vu@}oj~cvmYIXs%L0gkQ;HVaV+M1J!ggzrG`M?)M*@xr$ zG`@w9Aa^FJ(4RVXue^*FX>4Fh9pkAl>G$?KSZ==-EA9w9Y^kIX$U|Iz`djZ7yCD|- zahCpa13=js5e;SgWGeX827Va2BtnUbSgT3wN|#+^T(M164?IWYG@f*~eSlup=m>NO zv$$4X<@(J&>2g2bxx8{x6*JItAECJg3@&3LmAc`9iuxbhn-h_(r-oHH5~C=i#XnaY z+oU#sarZukkcrxL6xC8chyVmB>OwQs7UI)@$5%V7awM4+K}oC=(RL3JWWP(A@*O@+ zm$0-#J@P}xYsY^l9??kOC5=LG50tjF)8}3SxRdjh0?fzpQT%J=(l>X%G>dsQVeJ6fC}+p!JWQyL}8p(;x$ zgYG!N>OHdaH!}JCfi(6oDcH=#(?{@13>M&ixvSUMa36W;0J!T6dzcn~FLDb;!m|0F z;$|kz$H@AMvum|ILC#%@r3qf}$MPT1VxSs=wI5HfF0u9(vyxp^0B;(W$B-1gD1&-- zriAwgMcM(Y|FCD|*VE(0pD(XNeDCp=gZk?Cuc@((OwHP7iN`c{S3@-Frj`x+Ge z&L&dh^A^-aJQ-P*O68r@tZ+OfWh+G|4%tq>vjV*4_T+xS*>l3bkrs|0w`)n0`#gIY z(y|IeR6zVbFG?38{?OEi=tZebTz7;fmcnUT_gt1E$Na(YSo#lLPLJveUt%-se02w`u zQ<5D@*Vs^!LYn9D`4YQZDaxXzooGT~LOlkpQo8Y{w&;X=*7GwzOFWXNr`zutQO&3p zce`#>vrC8HMJQ@+b91eJ*&e9E!TWt9s3OOpT^V5qfJ7*kU+Q}}t71SvZyj--O?Db2 z(R%r`!9sem@oo%|R30%mHY7Ff-k$&klh*36&nGI-D`aLOqRuv)t)U5mP z1MwwQ>D}{R#}zz}306^Man-*~l4W0}9D!}{Rm<25V3}!>+LQQTl@QOSy<>_fDfi2a z?SsrDc*UFjPVNg#y*3V=q>%}L|1=&B^w4-(`9N9Ph`#SHmidDD+}-eF7W!puK8+Ea zAB8XQ`DDr>$%MD(D-w)00!+s-t6wP9-wkFfh)Od_T=oiBwwpeLL8|<5S>9g@kd#p%Pa2Q z%o6ys7av`%(@$8j>B}38=Q6PTCdwq7UIUoLxPumVuuIyg{n_;dDH4SYmg{)zG(`E+y#DWeXnw%f`C_ymnrSzCeYSawcS80$&@(mF{{pFU-0J; z`u_zl{iuDNo2Xsxv68~-kz!bkoEGQQREAk&fx~-k#TL-yw$I<47*JfEuQ=#+n={)5 zicCQ=E>b=@eh5zRQu&_lbh8e#1NZpynpo8fHQ!Lxs%eUCK52dw+DGU3^MTOA)j98t zW7`=4k(2j5)z>`y07k@eIuc@#tNE@;vi zB>8nWrTHCvr_V16+RK|$H%lBovoHW>q5?-vo}afj@Bi3JGz77fC@6-7x}_%x#p)-R zz2dVp9qxIOYe|%F_v-9mVZ6|WlnAB<3Kq^9$&gWca2VNFT><99f3n=S-acuzo{P4- z0v5%${6g&)@xKRLp9LHs**$(lAc6#nGqvp8e!O}8-`K|eJLBkL(AfD@$pZ8DRnjUU zL2713HpS{HLD}hV**2Dfl7(`}OaSIig4U=&--eRt* zR_dGll@K-ZvB3xKqJe%ps>xt2)!3q zNDx>_{O@CGYX>XEBKpFRz3N7!nrPO&ZJpnY0i*i1$ycIO1D`G%_6A4>MGpf9N#e!j zM;bo5|14CK&8&a|mr$8gLH*VxmF&NZQ4d;ykWo`H-*W9d-Mf4{18ew0VP~bQ?e&4k zvnhF@%}GRk{s6Fvj_bAPozYDs@_pGeB$z1@|$pEXH1EglKQJovp{bcjEk5+4=5 z4g36lJ4U+DrrCFMHXunJlm>mbzv{TkNeI7WFjDa?wHT-hhJ|7g z*E}p70aTRbe8^Hqy$ug~m)B3sv>D=R>q|DLL5YtdHThj?c(ggRG1!Lg@daYz1M=hc zb>-OuPDgfVrb z8Kv6Cb4wG@YZ@l*-; z?JcJ1AtmArcAjU0jw#L(r|yM1DU=MJZhnNNHI3GJA$a4j54H!S!Wl-EW~{3ZHYSbt8Hm&^8Ndn z?&?sH`F1(t8amGd=-CWG%pfr#AQ||wN{)q8Np8!K_g(GJEXwp(le4#04uKM5P2JBq zDbg05wODU}3we;tDmi6opF_I5uD?b*H=p~5jpS$__dS6sJ3eZl zXzaBvo*`xcU3**urahV(czmgr&nFAhgfRqL0y%c$#BwC!o|6pB6=$;5!!Ux|@xGa= zNdV?@V*9ROGaaq+h#;vd5bH^bMR7>-@-H&rZV$_MYb3|}*YLgjZBIn7o^rTMb7QV4 z)ZM)OUSGkG={w-b!RIrLMaGHseDalPN}jSndg-7dR3mYX7X1yAj+t+WuPE8Ggqyxc zBq{9;ggT3DOY#3!4w#-NOj}RR&&m>@~H#eN%-tD5|-|jTMR)o|<_m zSVn4L{-oy@K9}X#&PUQ154xA*n}IHg(QuYBeOZhByIlUl7p*7PYdk)< zR5zJ3TXo*p{u~h-_~zdt79;WJL}T;|wN@ClZ!>cTD#^$8UDjx^=u$_j$eeW3r{Y;D z6yoG_X3gqzRrTFefl#v<_4sqG{P>; z3PPIH`mIOshIwB`B)@yX(hYt2vQ(;E?K35-bgfj7^VM((W2k+{&3p-=~!jgXWbS_ zDov54Su;hs#5dcRVt<$5?GZz8QNnmwN>f&^55jzF=H~S$!9UQzL&?kcjGq_(YdO=s zeZjQOF>H3Mv5?#Z|r}mWk7!6^Jz)%UX5ynDXilM@w zPIx~IQ@hs0ccH+MS8F6oAp^lb@R5N^nJdrB-Ep&=r_hl!-R>QY_YqVlZCoB>TQ&yn z==^G27WgG@VY+5V!CS;4D@hOVb3XK&1;^=0wq}gHIoHZGgqx}|R=a;9Ui&yCM_~4@ zoM*xFeC&!fAp6-*Bj7*q2wogvkOWcv9&Lh*GaFJa1FqHJCy*<1-nK-^Jx?@itW?FC z9kRliysrA{n9f|FOHaA^BaF`r! z?|--Bkw2eI2E8SZk|Hp=u&xPd*f5(;dMTNa=CyG^5)vuNiA;KhxhlyY)~}PBb@{VR zw~+n7N}3B_@$EOZN^-F}m3l>E6B=33+(B#e+`pKl5O2xM97EO%t53rGb$zQJK0m{r z2urjIKp7;X?N&IGOjd35HxwSQkW`(}kP#=Wqg;Wi>)S|Us0Mh0Yc4g=tpQZYGBhzt zx8U5Ajzk(9%cA5gihp1Og7sEs{w-WnuxjUQD@`E3#ENrb2>w@rV=Kjl0)wglF36^h zr4nnk)CHLferhr`c^&mmb(k6HIIHNaYx4o&RgmzsEq8n~wvIOC{rdXXqj#4J zgfHG*n({QX9j<>b$O-3QAky$EI$~p|$e9~->-!VdNdGV`o&ykdKhQrmp&rQ8Jm|RX zX3-3y;~*KiutVs*+8e0OvX$j~F>{5Yec>w!^Y4nN4h_qL1GmXeC(G@t5rnpkxL+EdAPrY0=La(E!ykO6Af+^m*He2E~f zawUWop%apHQC&Dr<-(cS#k{%hW?x!y}vZ5>7KpC-W#k(#J)E42dV zaC#*c7IMg0#Nyg8j#gEPRa)TsG$ic!>TUP4N@$k)Oj_eDrIXyS`&uWzb|By{mslOO zzb+x?PmT>&+kYaJ{CTJtNeMdf`(WZbIw}J#XTeqn0?yx8pC;$>Lyz^vTvLhO1t za34Ahx{13fF@=MbX$o6F zVNV#Lt-NQt?h0tr3V&=m-okYw&&vPp&wKXoPzPRY?;aO8{-{k0KZL<$#4;fEzuLW| z9Ye;QfE^}d6D)?~11@l;z6z4jq}P3pq^DG)E7%`({Io9+>I)_{bV#9FTAMG?7FP@VM$}$ zdrkfr!YWM(KmLVK@IIXiw;?i-DdPoclM`S*9vZlGrpxVoCZ1+jHARlwgtyjErZdv= z@kG^@_6aG#&D#|LnkCDR32#k7QE3x++uUC=Y)tO=XyIx3wEn&+M1H)Ha?9nTEodHl zk=>>rHWjJQP(T;K|NQ9xL@wfB9gi#z{~}9N0B{G$`{NJX<$68mF5HRgkA^9H7i}x2 zq^ekiBmVtX7_)q2EKQa~50VUwr?s}+#Y3E6)jNKywPRS)zx-uanP9B$_4&*Mt>2mi z^Ow-M8d?6(0C57o5PDU( zAJwD60l+u8YrC4Zm(YyxJ>{w&|nz1d;{8 z)4&{RR>B~DzQg5J_&RxQI2m^U)!C=Aq*NAti@hI~5IS&p)yKK$n5yKvW)&BM?W@N{aVJ5=OZ5P@Vs0x;{VW z^^db!kNZt{3{-is&OL7v#4@zw@AX!tZmhh6r`PP+%81Y~P`WyGxgqA+e_{pZdFDRR z80Vn86U3+nGsF%pH@co=jJ9{kQ5|--(4PyRhxf@M8w_;VT(Q{a)<#OKSm0XL(kd0(n~BpL zYKQZ_so8B);RXz$oU`L}aeL@@#(T_+obyNtE$&BY82!Q!FIpN!$sRp~s3>?mV!E7dWk`>E>}y$y)6g z^}7lU+to2le3JJU7Q^scs^kdfclzUh9&ZFuPFUytYm#X$!G>S-a)Tv30`t#OeGT_B zC0vOl=1dD|)hOxdWoBO6D?^J=-pRXnZxK^LoK$`N;DqibJ>P?^8Qf zOU>(NxUV4hhgpf~$EI+;hepUs$B0JP&N4m%e1)F+Bqb?E0 z@UF)W^^$m?y1B*XWzzn$#)g;yk=S1}H^)DISqe32xKu!m3n+I$RH=u%kXs1Ze5*&T zBu)&XMxB2b*amTQ%zu?B!8LvMX?sDcb>z10`#_B}q;TzgOaoH@^$eyMZqgd;&zG!@ zd{#b%+tA_s;@oPmP)g5ptIc-Wb=rN*w9S{<5p)pK&2o9~;eGIvG6|8K{fghN#E^3p zX{=;-KU3pJphA&6xAKZQE!ZsoYwxVXqH5l_zjRA2-QC?O9nxKb^wJ=pNOyzON_T@I zB`6^+B`t!WNGTyDq97pfp7nYBDLm_Sz5l=O;X1qQUVA=g=Dxpk&zv)JW=c#ePHaNY zfg2#$gobmRH-sy%4R+5cngl1ZkX%s8?c4T>1}9~6UtF{z77#Goe3-?CL7#O+Bg{cP zjaxwtlZRaN7+babN$0*w!fQWjDUUzN72qU`QKnQb1F;C3B$G&?l-N81GuR9^K%emC zqxJK84YOG0rSLFq1_B{Tm}SETvG2dK%OqjN+bgM$&{O69`sI^HadwfJIDu zUoXZQpQYZ@wN$Bk%_Qw^QT|PG42Wz){bKlffbukj0->z{F#H`zKxAb);kmKVl5G?x zdf91ZDif4|bCcCuvxMiZVKGPP^mhuKO)2%CKSimeei6?~0h)7&zsW|aVsoPj9HTS< z%_tdYt#N1t31AxZ`d~MZQ3Fo)koAs=j3M8gXP@ppY)a9^2cEdr=;^c7twLHlF1E*A zWTV&VRRqM&{iKS@wsE6J)7EQ4oBn?FJIjkalMW61D3^QJ9QQ?t4a_{RDKk1{0*%yO z#bJ8jS;#bCRk{P8MD3Ivj-HK`#(iM6k>$yYv&YF^qH#RYu`aZ{H)Vu56&5pm@~zcF z1Ps^obOqfYkqNfg-uLTbyo_ZgzwZ%~UV{~!qR&UgW5$Kdrh2wEaqL@`8e9hPJPcl$ zXARcDmCG<`P|)Xa2fBWe>9#3%G0oJClev9ueCWGfJn6Z8h9rga;qqSW=tfi`a8j2# zJhedAH3Z}o%62qd{rfAz*Q}}1Fi`eK^eCN1uhZ+yufHoGAw`9q*Xnd0SjnP@*;H4^ zb*Mk}ew_#7rA}@RlFJ5ZYCb{yn!yFV*|46pArcZ*Uxlu z-uO6g={EvARf`t^)HiB`lfYdAWiOIj8W?4)W|qbQiCi8Cxa)_9BX~8YkuMg3tNt2+re^W zKU(Cf1Td#1EK|6|ANWt^mmt6zqGb-ItQ53i^aLL-+(<0tWDQv1sN-)s$tUZ}+NneKoFP8?J|5yW*=mXiX{hOZ# zMh*|QF)``;uErkbh@ZIfEIW_qlfcRW2LX|Ejumj%37dvfTfeJeFe-+iZyE3bnVN8J zG`;B)b=efw4#3@YfMsTozKduxz8t1^bCxr)lZQxMJZvYS*+tE1V4Z#Kq^qpmkN6^FS*!P@H7tSO_CiBD*;svk?u z-3wz&87)T1{3MaUMk*!@GpI4{8_pHQW?+O~2+S#yx1mGy!%=%(>q)HBezZW-3k|B6 zFm8iyK--{gWoKsBdwh6y5TZg}0L+&z1q7uTG=&smE=y>Gm4vxj!xBdSL-LeS`VdZ= zg352Q0G_5Yc80!1SeKdc&;(fNAo?(ANLj&VghQRCDcx9M?(VG=vCzpF|40$GeqS@T7o(!zUHR8x2((4wjfw?!=Z{lYTUUMgk@TUfl=A) z~6u&`XgVC(#$AG27iduf6Jem*o4|$K{RxHfo@BkQGlIsv^v1}rj?kl2yp_(hcXTt9T z=AC3>@NBk2T7Kpn4IQls^rOB;iKLhw6Qx^5xX5V+7ba)fG0gHI$xrqiRzv6m9$#Ju ze48Akv;Zbr4E=_D1EHbbUu=%?I=!;F{$N8FM0@&1+r2L)y%DC@VLynRcR9gcG(bw# z+sku6YVClT7>mgMgbHhIG};9DFgUd@8c70^XBHL!pNCe3iIqtbXK8YtD>_xIMM~p_ zI1~$71;X-56Q`L{hPC`C%$8Op^20jLOSGs+z~$%KyNSc3yfwUb+G1v|y8B1_Bvp|S zsYk&2e8E5hMneNcIZuFzzFb;XN#*?4+O${{%Q&r|L^kK|x=sKqxe#lMv0{CyAlTeq zEXbFaq%?~N&{c~YTFi)B*-N7uS;Q4;1RiWd%)v-OWc1kRjwaws9>Nlv;B{W?2(0No z4mtWF!cKJXTA3piL;3R>Kt%rVDl|Zwj+IJEj@XY2u|A1>ozjjIts5DT1-h{e9_Zql zm6J;N`gaq-wOgm1_~;=nw0P*q&A@}(z`F|y&>W`4dxHriUWT@g==%l2h+W%u(W}KD zAYfBf)KqvZXBnoghJ=g>`vTbLKwrB(DUgvtAlOa}d~?^)%h8?3)y~$@ipSB_3SuY7 z?coNA)z(zT!6b(rhNG&YpbNa)06P^rD)8DtIK>FOA$aL3%Yhz`QEmbskRh@fvLH}> z64nnZ6yP(4hl+_82z0F%wj&I8m43;T#Q!v05{VmkHrZ$51h2La;NN6?(Bg z#Yehts?dD!-jLu7e169(P^DV-J+xg*K_y zS}H#+>{|o(kr-oSDG9x6oK@(-;G758c7Xr5V833+_FDO%qm~Z)CPInH>?z(Jhk1q^ zSY9N$MCF9QgR=Pc;CI&SkYd459dYG zv}=VZ7S67sMBwqFI}YpjEV#Xm=t*n_HY2xMsd)#yE<_3RGQ)}U(U2FyoJbqjv=Cb4 z$NGFrXMD?5b8)f&Tk_dZ&+9Jb(NmxlvL=NsC_i?gQY>R*i*$3)^``kEt;`Xnvc!}A zO&@v)Euxe{OI?rE?kK_iGzN`U#*V+nC+x{66i=;iQNhCn4iE4xT;-j~ZJFG;gAF;H z*2%4I!`%~{Myp{ueO-x_kB5_MFmLs>wYWppbHcUYt&>iWCdZ4+nEJH@6r{HHyMwZi_U44gLcPP@R}rrgcfO~7d0~y6 zyzzOOO6hKJ=9YZIa-RD-D0;<0vJrFV@s@ufm^6T943laroWJfgKe&T6zVBV(i?Wl~<2 zG%nJI1E^j-EzhZ9WANl?1TEseq zM9{Eh>eDNZ7b6;PQ61dU5WDO?K`Nw1tTAnS`?iYx3icRI znj(n?amg!E**qNxvJ$F1q|ZGqak=tQ#(vG4diMmr4a*W7Br}K2rwHJx*Juff6WAJXv`hj@}4_>%16Ce3p_pk(M(7o#Jd@1B~F<7cv+4`;P6vp=4_dX8eVrn#(-R5Sl-hNW|1 zvY2tQ~g%j%N*DP*?b^ z6yA3h8CH+=DU>6mY*CCmDU4Y#96jWyl=5d|o{~9N>FZxN$zG+O=yLC9ZZ-@$nV~yg zx*4oq8d`}%r*@Q^j3zu?H8++Up{~MM%Q(v^KEVw+jkcygBkd3_4-Nl;MZ57WOU${VGnMYL#9SL+d6c2IoP#UCo`OF?*z6z@y10b-xim?<$-ySn6gEW!y;j~ znQde{Mw4Eaa&Jp&^Vw3C7ee~0+#b2E7x`{;$=@?L^N%P@1ov*gc-&BvFGgbcdSD4m zjM&=RYI}#C4vUym#pd+Tm0wbll8_7;FG~eHpb({~ZmSRzn}E)jf=|cHPv57Y6p=X? zgGWe)Z%xl2r*4aBq&!gCPwYyOhTW3$sPV)05Z14%o6w;3$-E zJD!iV{#u`+E{<-wr`j1*AR085(56Jim^`CP8#8fsPX#bJEOwTfCS(n=-|k6^AH z@^-0_7dE!|v`~1X*eiNFH!dEhCnbiN=~% zcsEJObyBGpepvanK|{X`yV3fOe`gO`7Z2iBkYzmmh%DMF+HvM7uggJp%PHZ>An&ol zH`=uAFuhE!XWxmFN@-kGQ!4`#-h&*&R;0eTDz|w$VJ3#DAlVYs^Eon1a-#CD?@3l? ziwWnW(Q6RWy+lRLdh%}nm?fVwb?D>GfkjLm0*paA#}Z8+uX}Yv70$hbBSOG*KTi=E zR|xqaTQN%yWQ!69C;Pf5-vw$-D};@`?48dzUlozU`qJ-+3952f<9RCL3>vn3r@1^T zb0U`{LS7+_Pfw=rl)fLEta7p}E^Wq|^1|7+`$wcB)O8U*P9-F#2qP5Pe4v0_Bw}hI zYFt4eJarSSiHaK9BA1TSQyc5`lv-B&tlLvH3lrA}C*RbGhy}RH z%=7G|ZQUN#gQalpPZzlmxG*bdQ-QZyu;?3An#@{s1QD6nBOScxgJ)G13o6 zX3o`#M5G(!-qX#mZI=(~e97?m9ZrXTYd|Zb({B3w{RjCpTiAEZLtgAS>`a0pvdl0m zq+bbmF&x+<46-37BgGOM(`rG6+dw4QtL9*hZE|c9#jKErC4suH4@Hh4uh(t&+g^dW z2@n*%JWrXMdj8_T#z;O*HKeq%C$MU&^a-JMNIfXR{SH-dILLA=XmQ!dN7`mAnNra* zG-CC+#D~SiMJUsrhEeLd{yrZ|Y|xv%VN>d~gN*AjeURcTPDmAwtto9bMpjzZaRhEi z+OojZT0)#ZOSp`5BmdGVs|xb>mONz|qk@>`g^@>Rb&ECC=V8+Y=4GZk;=$T7sn@e@ z-j^#7hdgnD>QLr;5X4(Qp?RC|9fC?@JvkSAlk}?vFenUXQF~`NUEzAVp?ZdS&4J+O zXJZ9eO9%pxvfeW!Fh+(_Y_cw$83|Z%I}?M&5<_uPkL1X~+DRBx#!7rHn>y_>5%{qV zJo~P!JR2*8^62itczeh!zG{%8jLALnMAuZtl&ai0e_WDU-^Zi3b_zUraSf*mYJ^@u zi9LDQ-PEpM?3I8Nhz)`*^511qq-bqtGP_e{ZQ;)mZ@!6{07nHItkndyqeL@pIWQaC zO&T1ZR~JdYD9AxqkNi3shQR(`d6UMw6k0DOEZDR;AmkQ$u>GYv|$* zjQioI(4{}4VnUp z`}Ubx1WhCt`3_TG;|yctQI6=nx>5_RK26G`4m)ZZu#SQ&!9iuQ@NP||u!)Yym#?pp z`lO$BjvhN4MBt*P`+uzP6T0!x@l+QSl4QJ`mppn@XP-a9usFn)#K^{yBssf?r%Jtf zfrhlJXCx|3pb>g=Mszux=0og{g>GQF{~H3XNtuL=0;K&TXB;_1r@Q)LA@PzS%=1T& zT(aAQqb=rmgH&uwu$e+-81OGL6Ib5Re(s%_hYr#b(kJR4N~omK3Xp{qn>gF7Jf%-H zLIk7SXPuef-drMlwU&#R{ylH1RBV;deQh{b?)qSbv2fYL>(sP_Eb1sR@d9R6B`uvN zja8dw4FP*BP~IsD8NWVA^>s7d*9Da-wmfK92NxNr3ZCw1$9?Leky*5_MEL1a?2{9s78ZY}Org_V=FD&ULEJ;IJu5Z!D}=|niifK-5{><8`RU57LXiPJdD z-lhn(pUPgjCuW;0IL?-fZNFwn)YHC0WJx_zj9QqS?b~JHbG~mc3lt9HHZ;xXrD}Z0|*{}=p zWnD3T*z6mfH$}`Sr}LeWC|Tu{C(0-zWEv55Pn^H>$D7!US*3SrS_xaCK<9cO(rH=! zp@cY9tS$EooW7SdYTk2dZ;v*T@szej;VrQB`0^6fNu{gzFC8Amd>8%l2C-&88RA^dh z*U|O$<4F_p?_cMvQSl&?^rtP=Omn4N;4X|sPPc8yGZiUGwD9Qr#<>WY6#IcJ5!uqE z#VjR=osCeEh4=FCh5o4;XC$Ub&3L+r3}a{{;$35}!(O%#BKx)P>beXn3WU$_o5d=! zRhWs>)~rD2f(0sZC6i)uMyuc`1Rx-RqxrntR_=fFzvG*QOK;K=@FQzs6AjTg(2h6h zeVji=dLrEI_Csr{!DpzEtKV)W7b2>7 z7tN{8wrpG69bca+T~E8Kd4{1GjwMd8TumPlRT;Lga^d;mmU(hp8op1rG4g`GV$*QE zIFI|`#~YkR)^|>mlQWpf8Ont3qKTJK_GQkO{xA+YX*HY9nv9=1Bi5;>Z>6hHL#)}g!;&P17F*#f?x^YYAjVztk8w< zuC7N*Ojd94+JS|@kg=;g4cCMqqR42R-J-3XSm|LR#;jpwMNFC4-I`VXPdQDtc}MNE zlCtvkZ%*9Y)OF#qFevT9;4zKMYQT$lZ16<)wv#Z4n8(b)(Wlx}CZ7AdAJ`=X=iR^o z@iYl>?7C4)47XPpZx`AWPseLe% zU($B-m33-a{1EVv=8L1@+8mK81+ek#-nA30fX-emGu@2%bho+~lrbXiaS#3&7g5SL z*T`FUhr)J|XA(b$-}>yR8Z<$Le0mld=+*jaa{UWFhishJ2b}dgr3&#{U3zyKyWFBj z&|l1|a_HKW`QwKT3eoYWdVImKqTOsP5Dt|IBk9v2HQvYsO- z{YKGbIuLDy#UJ%7brYl-+$UmMG6Y43$aHs)C6i-}&e zu_ydaZbMKTZo~_1vIH_BUYR}*&B)NMMR#N$nFAL^s52odhkp~I{R8HxPOA=6>MR{3 zv82aOi?j6{Q?%TGio>L|{}XR97H?=$tEYKPw0$(cd*rtsP-J5i(EJf1c0b127;UDI zUN?%02}%kt@ZbQJ_++TAVIUbDv*O3Juw%awCpAjo#^;;WkG~fYhQEc#_$PY@C6H0hyHL7*Km6lB}B9m z!86T|#fN_rkx8zg`LPjOVe^ z5OLEw(jxTC7|qS6A2qs{{sVfu`q>lBk`8Twu;A?%Rqw5_X$C%s9D+sSwR}GIo!}iG z1LH=b#`E4Omy!&SCx|V#7Tiwhbf_4}{U#iSPs&v1<3!&@s3?@6*Wiq!si#V{Mz+ji@hi&nTpiB$nxolLwU1@>$z`g%Y+Y7sEUuiEZom z_c?GfXE|!(HETRoDO``XXh?7uRnH_V>{oG}=Xm@mJQ6?N-q@*p5#&&ftG|*t@y6e0 zN`_01UF2C)8gDPpnpj??mGsy5(KGw@yqdf|e448@L7n*TmfNQgWlu!gzeoqSzvmjI z?WPF3hqZ5lZ)vXaaxcE_ebvloBkb87i>19z#-8B+)qV(wT%h0ep9I%n2P+~7R7wP^ z|E_Lk^6qZlc5dFc^nE?-yv$)?MqBMNpu)JPi3tc;7C>mix^%o1&}(+f)6T_2R=pn)ztJ{@7?te_=d;u0AiGpRe!`0ypRqfJA`ufX+Os zKL8+*zxgl3KZf`-KX8o_f)}wF3!or)AP}tI@b|W5@eB1UQ~x0U$QoQ?Qg7DwGXR4H zP-%bTfd85;e-Z!5-#@(ni9cVT!IyTG1kQvwj) zvR5(3_V6(x@Gu`k?|tzBR2B&6=duLudc((v!o&E1NyamQ)Euc?#W4E9$B4nh)VAQ8 z648S|qgjBOE?N2@3Oe#yZ;AiHfh*>@NH3E>AT4rYS2@I- zf8oGYv%lvN&nzQXW??*#r=f?SI;2Kod+X;-*5cK?^}s~;lS0Q45Iw09FU=p z|0!R4DSzR>)#1_osjYr|5NO=#s(lg!iz;3A{=Kj}#w`wIuI4xvw;8TG*R``FB1IB?_7a4OL( z1`y@D{-eXeIrtm_xH{yhYJSfT*k|ZJ`NDYr7Yf+Z1< z3g}0X?<%MN7(Ry|Zv2^#hL%&XAb=#$(5|%1k`WRAjq|@-W^i5gw2eH*7N|<2ZLZer z?}0Yozr(pMR~7JT3KR1^{)vB;e7T+BD+wP1*WtX!2%#;2!*ejMrY7V%d<5 zln$h(78qZ4IW->g@G)@R-JBS;p$rr$GoV_(jFD1;kAds$0_y%f3ZQM-3Mhy6Qmdy; z_ZQ}B`|_u+;I=P0w;`dzKzt{;{?Evn-$1bbFPgW5ovR(s&sVrk_faw)jRhFyl2;i) zz(vYGPXB`e*Hz~>Of1%bjpKn_0U`d6O~UaP!^hFh*4@Voo?!gVM$z|SUKY8Ugc0Xo zhyRfTxc-SkVi)}mFlhh7*uMjZ0oOT>y&rVG0Sv1DFsMS{FyK}zqCt^?M*xHFKMbWf zI1IQ|3aY9F2P|ABXkE3(Z734xf1L>44tHFw-K-p4xb0l+uU;?GA}uSQ0&ew{zRFN6 zhLesziVkql&kg9l_~G*kQwtdc+hGH#~!=%0Xl dJ%0fHy-TXCh60355J(#MgO%)&exRlT{U3(HyJP?W literal 0 HcmV?d00001 From 6184ffa9cfda02c7ab8315eb8d34c2f19840e472 Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Mon, 7 Sep 2026 17:18:49 +0200 Subject: [PATCH 07/13] Add the .NET 10 port of the Cosmos DB for NoSQL web app sample Microsoft.Azure.Cosmos store in Gateway mode (the emulator exposes the account endpoint over HTTPS only), keeping the {id, username, activity, timestamp} items partitioned by /username, the 400 RU container created on demand and id-keyed deletes of the Python sample; scripts-only deployment as in the Python sibling, switched to DOTNETCORE:10.0 with a source zip. Co-Authored-By: Claude Fable 5.1 --- .../dotnet/README.md | 80 ++++ .../dotnet/images/architecture.png | Bin 0 -> 58452 bytes .../dotnet/images/nosql-api-data-explorer.png | Bin 0 -> 99038 bytes .../dotnet/images/vacation-planner.png | Bin 0 -> 85690 bytes .../dotnet/scripts/README.md | 148 ++++++++ .../dotnet/scripts/call-web-app.sh | 199 ++++++++++ .../dotnet/scripts/deploy.sh | 126 +++++++ .../dotnet/scripts/validate.sh | 49 +++ .../dotnet/src/Models/Activity.cs | 4 + .../dotnet/src/Pages/Delete.cshtml | 2 + .../dotnet/src/Pages/Delete.cshtml.cs | 22 ++ .../dotnet/src/Pages/Index.cshtml | 265 ++++++++++++++ .../dotnet/src/Pages/Index.cshtml.cs | 46 +++ .../dotnet/src/Pages/_ViewImports.cshtml | 4 + .../dotnet/src/Program.cs | 31 ++ .../dotnet/src/Services/ActivityDocument.cs | 19 + .../dotnet/src/Services/ActivityId.cs | 15 + .../src/Services/CosmosActivityStore.cs | 106 ++++++ .../dotnet/src/Services/CosmosOptions.cs | 26 ++ .../dotnet/src/Services/IActivityStore.cs | 21 ++ .../dotnet/src/Services/StoreInitializer.cs | 33 ++ .../dotnet/src/VacationPlanner.csproj | 12 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/favicon.ico | Bin 0 -> 36791 bytes .../dotnet/src/wwwroot/style.css | 341 ++++++++++++++++++ 25 files changed, 1558 insertions(+) create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/README.md create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/images/architecture.png create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/images/nosql-api-data-explorer.png create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/images/vacation-planner.png create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/scripts/README.md create mode 100755 samples/web-app-cosmosdb-nosql-api/dotnet/scripts/call-web-app.sh create mode 100755 samples/web-app-cosmosdb-nosql-api/dotnet/scripts/deploy.sh create mode 100755 samples/web-app-cosmosdb-nosql-api/dotnet/scripts/validate.sh create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Models/Activity.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Delete.cshtml.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Program.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityDocument.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/ActivityId.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosActivityStore.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/CosmosOptions.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/IActivityStore.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/Services/StoreInitializer.cs create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/appsettings.json create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/wwwroot/favicon.ico create mode 100644 samples/web-app-cosmosdb-nosql-api/dotnet/src/wwwroot/style.css diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/README.md b/samples/web-app-cosmosdb-nosql-api/dotnet/README.md new file mode 100644 index 0000000..925da47 --- /dev/null +++ b/samples/web-app-cosmosdb-nosql-api/dotnet/README.md @@ -0,0 +1,80 @@ +# Azure Web App with Azure CosmosDB for NoSQL API + +This sample demonstrates a ASP.NET Core Razor Pages single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` container of the `sampledb` NoSQL database on an [Azure CosmosDB for NoSQL](https://learn.microsoft.com/en-us/azure/cosmos-db/distributed-nosql) account. + +## Architecture + +The following diagram illustrates the architecture of the solution: + +![Architecture Diagram](./images/architecture.png) + +- **Azure Web App**: Hosts the ASP.NET Core application +- **Azure App Service Plan**: Provides compute resources for the web app +- **Azure CosmosDB for NoSQL API**: Stores activity data in a CosmosDB container + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/) + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and set it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the image, execute: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator by running: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application to LocalStack for Azure using: + +- [Azure CLI Deployment](./scripts/README.md) + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process involves downloading and building Docker images. This is a one-time operation—subsequent deployments will be significantly faster. Depending on your internet connection and system resources, this initial setup may take several minutes. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the following user interface for adding and removing activities: + +![Architecture Diagram](./images/vacation-planner.png) + +You can use the `call-web-app.sh` Bash script below to call the web app. The script demonstrates three methods for calling web apps: + +1. **Through the LocalStack for Azure emulator**: Call the web app via the emulator using its default host name. The emulator acts as a proxy to the web app. +2. **Via localhost and host port mapped to the container's port**: Use `127.0.0.1` with the host port mapped to the container's port `80`. +3. **Via container IP address**: Use the app container's IP address on port `80`. This technique is only available when accessing the web app from the Docker host machine. +4. **Via the default hostname**: Call the web app via the default hostname `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## CosmosDB Tooling + +You can utilize **CosmosDB Data Explorer** to explore and manage your CosmosDB databases and containers. Ensure you connect using `http://localhost:port` connection string, where `port` corresponds to the port published by the CosmosDB container on the host and mapped to the internal CosmosDB port `1234`. + +![CosmosDB Data Explorer](./images/nosql-api-data-explorer.png) + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure CosmosDB Documentation](https://learn.microsoft.com/en-us/azure/cosmos-db/) +- [Quickstart: Deploy an ASP.NET web app to Azure App Service](https://learn.microsoft.com/en-us/azure/app-service/quickstart-dotnetcore?pivots=development-environment-cli) +- [Azure Identity client library for .NET](https://learn.microsoft.com/en-us/dotnet/api/overview/azure/identity-readme) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/images/architecture.png b/samples/web-app-cosmosdb-nosql-api/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..a513dbd3bd8c0c044042f908d5500e38248dc005 GIT binary patch literal 58452 zcmdSARa9JE*q~W~00|o0CAho0ySoHPa3{FCy9R=%3U_x6P(bj)-QC?~>g)fqr!RZ0 z8SdDt&e`(r^ZFB|sw{(oNPq|c08r#)CDj1{m~Q|8?8PS-=!oq+&j0|hLntRHrs=tK zvijMRXf}uWMPs(zy^&I(X%~*AcYu2UewlILbNM31C}zEdtSmd@XO8=|M~k{d*3lJK ziBF2TJ{+W9MP2i`8$o^j+E)Yzy{xmMQI{gfJCR^Dc?TA5Z> z=pWF>Td3}KTY5C-b*!1gPgPnr3|&kh+v3rGi`qd9C5Qe85BvlG{1Kyt4q1JPhK>{b zZ^I|rxT2VdVZmxaqJc#eNs;XRN1zX)1ZH|oi+0JBkZ#n7zC+ixZ_H2WMU~71JwueX zG7Xo{uYP`hot>SjVcO@206Yn-I4LQqu&^+agu$aa0Hv7{?G;%;K&cw9Gdk73U}9JR zK7Oq{keWh@0!_9Y3F$j$6%a2<(pT76M<@NUpk&p-qkVOp_9+WUy8Bi8oE#t<(sF^0 z8UZ#>3JUu01gW8XbxTi6)7I2nu;VUQK>35;ty;iq=jh1O|8dMM6TdwXr$5`_`I7a3ymm0Xe_dAdj{^G^%c{ ztHWs40*E?m;xGPCB^;YSPSC7|9sG^{#QmzIh}5CCL#jE#*oG*S+#jr8=Q2)Vznm@#49 zMjc#w9z38*5W|RChyztkP4m~!_eIEYf2^3%VBK0ODagyyqF1gl1AbqWXan2ARJH}_ zV-pyWK?6Q>7uJ;I0J9k3Pq!#CfwdeG!ska1{kQ5=cUoz3 zbSH6ASe6exyqL47T9R988i2)QciJgP28fnZO;t5eEgkSZTdh&z7n+i)ROkS?nc)(U zw#qRk_d5WvEvG4b-~g+aZbW-`dwXdC8rkiQivoQAT;^MXXaX4k;fZ`CW0*n$udNvg zt7&SQx&8Y<77#@*t0@oAOLA98QX#|o&?62)6jwm6V~A6|d4Bahag6BObZ@U@<^$}o zlm$P0AJL@SOj1vjvJNHBjAH$IvQR6LW}Y>6w_uu}XNZF*Va3?1D@%a|ZuN1kMdx;0 z`=+M$Rc6)iepMUS@*6Sl&p=1dE2lS2tsId6VUU=$m!qW@=?XJj5`VAV7>T4?1v2ZTDf6W1^wC zxm>OL?Y6p-8Pbx;VX3UAhi}h&8boQ`?6N-|9uA+Y-q4Q0B#mUZP!n|i&wM0JuhZ$D zDx&cHic3dH!>MEEZQ3l=u!bi3;XD=6P-0?YO&xv1 z5+}ERROvNVx%R7VTo86r{|Df2|Lr)Q!Er%4>LZ=nx)ib9B8g)Hf&e}#4k=O-c+!v zE=lXGxhnFwlfuZ~GEnV*%OK3kua)k_bv85ni{Y{V?sOT`z6E%jePFiTWWW5-e>-pN zcxypbZ$5$}FUC*yaNPZNeD1q1!1$yj>#7JaRnnB%Dk1)!I@MA%MB~Y0^(Sp?AdXP4 z0i&2+U2~VE>j5+?MJVF3H@aC#h2xW{`DLDfrSnGJ!iE=-^L^E0-5fHvpUGugu~rfK zpk*fPCx?|c-aPWJRYFsyrRdXQvJGuCf%|CGPy zMi7E0n(kXK0;w!-MCu99h63e;>;YM%B``vE5MhyMi=cs22Yv4$ZZ zYSid;ZBbhj`6V;*`K*H>dQ;2f%{<-k?yxxTNXD+1s#JcqI&_Zc{&14h1ssiSZ*Na` zhFEKOy*H+ysZ9S_$=GAnZI9gr1qH>I>Sk`Q`H$zH$0&IP{FD;ehPdjkr!uddC)Z}R zKaH2^B3DBczVTKRQS$U;5DE}us(Q--ZryNkHTqv@8HEuG_%$DPNVIHB*ojP9 zrgTwdFDe{$t=VyX+=L|%!dcB=?0X454|snLPp>fQe0qC6=czuD5qUz-`^{~i`CEM@ts)&_`NlRgI$`D4ts6alZDty#AKf zWV_sCpKk2`C`0O(I_v{+hsc+d_6tB%x8>dq{KGQ{0yIO6fBuD=5P9z)=)4U!Dl}I7 zX7#PxzthWrx#L3o?UPFMf}{U+7SxQbuCAVU-mgvg-*M;@Hab8pOG(dOUFStFQiG3m zMyt#IRIx;i-_<{w4rFWl{0G%s?;|>4rp$Vi;JU|Rkyqv@Rck~DqtkMm0&zo*0E$9sAP1GayWN3uk|fLQJ5%~r>CVSh;rw`hZew-^7H zZPNM!AU|<$%wu)O72@ing(Svksx9%qZWWtah6A>z94hKJ?~suw-X8s#KI(gQq9j+Ia#c?RBVO;NQXW%Obx&$#Gh5SY$5hlTcMu2^*$dAp1%GC<;Xa6 zJzC%>1xJwjFC!`ZRFBS7~ma88EzhX^;j-+`C%LLE-4nR*u555P$h|yUbt^e0is)U|&G-R%H>F>QUMw&yyB>BB%aldq&@^K2U; zv{4-=7Z!%GDCRk?Tpva0yKx%(;vnHL z%K9-#O61*78UX1aquhjeq`B9YnMgqS!7bUPpcRG4KE|8#-;2ERv z?S9oG&x=rN)&5VZV3Nd2ki>J`77b({8Y=t~@zCP2Y9X;dgql+8To&m>o@^TuCx+3! zV}K}5fu{(?St2%1GND5q_jH0Y`9K(C-DyI`Q?4t#1vaOlu~CgeE1OBt^;&pLrOuh{ zN*P4>@)<1J7Ge`!X#sip9wl>!-drBjSwM0a*>JSdl~&>Ya6 zOmO?&Vkz<%KU*zk{F~6BMXcKt9Lc?RYw5&5&7-N5X!r@N870<+B2fpXlIBDI+cTJK z0nu<5;Q`XCh)~Cr*^XT}1miKWqkpf`WAV;kkw+F6Ai^E#>L>YpVW;YpAY4US&3>QyM(e;c9X{%e~ zW#AL=ls3HU27g_-p~Zb1SJ7N*fh~YIT9coVoiMIN+B!wS>(Pg-fr-79Ldos-ij=Y> zIgc*YY%ot1pY|xdjZC8r*jjhJW^PdVn$e6pzK&W8K5{4vJJiWIr9$7CsgRp`!)z49=K2+a zJdC`A-Qet3qN+xRP1}qd)hk1?FAxzedFZ_AHh+mb)!h(tK&&x}VKk1F5UOdIe3(Z! zuzwLkLQj9{l62YddCy4+rF@G5I4zCe6pSNEUgl-YB{qk`O{a@^bbO4Eo>l;jbT!lR zeEZ|&FW~{#R}^PQEwwz#aM3`9EmE;fqTT-QGVarf@WO#VW8=G|2igRKT5QzLIAEgHm zq&ae;hhv%T1mB$l`)Ugqz!XRSZU=0q>-iWwUHt!=k@-I)YW{ByLz6%NYM^rW)FgrM z8on^3(DnJ(+MlVF%1K|XXOX=cIdhWIwtnrsBx@7>QokQ@`7?16oPZiUadc^gIGYn~ z5n-GaCqdU5E=9T$$v&0cZsM2p_mVL3SC0Y-EtP@MJZ+mSokL!~%;mZYUwfI<(cYIF`_UcGbCi-jLANLC+K&6e7t&e^>G-P%Cq@dsucA$t-#+^0>?_r^$JVh)U#H^@$9;3y(X#l2-<;1rAC(R> zeS>#3pocP4H5C1XAAPMsL>8srN*u+5>J`MLZa_a#8p)T}S|TkBspM>k;*2@<&P1{A zOnQHn9;BfOp3gRFX&JD-J^K(S2M7H0?`3{GDBS~9a)!6lLL7ZqO531_-@cDV&CuOl zKkiggr$r>ScWHK$na{fR-&8xoD}oCzNd*;qtOGgmfs&>mvH zmYsWNe#?-_J#AEBs#T(E(u&Mt)4ZIh={p71fW~R_!!FI?10mu^$P*DM~h~nrbu4u?j=<6#2*^v@s{hQ1jODjNOka0szhWSy0demX2Q~mI+ zdE=c2K`(IVQ>WbtdzQ|wuI_fWkxji+Jy(dq+jGdUB@L{bMs{P10W3iJ1J@^H+jE__ z2A2(%TQN2nu9xb&kg|kPbRRX zf6mufg*_TiiJqrO_coa-Y0@+j9=r4Bt@EUBM9pdXom;?`@q1^+ib$fsPhcH_e z^mkwD_M;WU?`oA+S23~A@bYkhoL{km?AOjoKZV=ZX`V#qMebo1hg*;vU#YgMpQJHo z5>9W26WHxf)aG$b&kBzK_Rzj?u~5JpqA~mpIe&Gc|a>tzQg?X3ZK~BdU1XShR>K%TE!@N&hBtrU*$6KLxB|3C^LP-CPsJicn{tUB;F9 z?@1W6cX2j<|G_mN0~e_I73&&TYDgyHg+xX%@q#pkYHJcKXed1(I0ou8MxnhsGRaz{ zJ`9kE8>CMFmDNqKfE}q($N1Lp*X9Y9R3?B7r5o_SJx)bu zn)pt9AfqZ_yqaH2`D^t4(?f%Vb;f1}?P$ORlWk8O^oWY`%L{2o0k>@g$&MISUJGdQ ziBZplD@NxR_&7uCkouIo+p?^HzO~Ff8SqH*WR6kl|e9~ z@?WC8Y%b8Fo?$pfVlBlLgp#Y6czvh)RS^fi$nTP|2NospHCiCJpjj;jw?=D&=Ke{_-;5#2A}~PToS% z!h!Eu#x_*JT}(yxk9gFK7-s z!!m~cyL}RWa|4%X!mII*L^MuJcHtl!5GwL_xj4QMeqWjHX3?$}&SqisM~okCHJuCi zk=Mla|0;%nC%i`i<{s~BX{xepc~M$%8R-XGo3e(w)=B|OtIx*mK9y_70M-xCTMR*n z2=>V;g#))Cgm0^cDzwTFbp0@nJJmCl?{C$*i&1g&X+*biWr+ddSSobSV8`Mwxsnw$ z-O-==B~fur9ctLe*6#dGdur8qEtK&qnWEe^DK@V49)uOGlAzrqMl6f-3F$bT7y6Uw zQn-?@R3c&DEE(l#(`Y)&xPNht8ZpndGK?&xYui0TOeCnHz_$XaZn%;5h6za^V|G(0 zS8-yjs*PF}oLR8gx?p;&?es@}RZhtkz~&~ta1@?#yzN2={1%})DquhWqqK^i%OLc3 z(>9vilNJlADm03ox{Aor_cfQg1t+w&xCJ-J#{-LkSZz;!89dFTtR|s$V`zt`nT{S? z=wu)L)}ubwL1$PTBmC^Wd(b31?{+sU#2bPLpb(YG>Zre#l>OFjdkA#p6uv6$p~G%p z6lGz!9YQLzFVj_(u{=#@Xyc&8p;XUAI5O>9jD7M26dEKx(+lwq_QQ6C}rBS z#xIBWC!A)m6v8EE*0sernn+Lu@2!pJ1G!n1$UtvijtA2zo13^ON-ZZ-TroKeHumA= zQGLbcx2J#m4ed63G9UbxYcg1%F8L_krPDP9wAO- zZ6`Ob$M!In#@N`66fINA&C-y|K%TcO{YXhrY1^RsEic~xmIa}2IX)tzR7vM7jX7ig zVT$N^GM{OS6LWUK0`y~p5a)cQ^v%QXgZZ?WYx9S|P^i8r=%QL#z$O`&TvI(6uW{t(C#rFn_SBk; z-{QE0*R2|F+Yy5=EkDo!7-F=0Nh%3&jqPZ+JO(8vFJ2Dqsd{9n`&(0)e{B65*mkA+W;w1?TuI)HsbbLaRkD_MFReQ23szR1Ur!&L9 z9VuRIb=m(PtEQ2(PGHCcE5D@ZYiK1!cmSfa>41$pX zWF(;`T~e4cVWdsEOV-)$3 z;zi_R*M)_2Wv5ghvte)_aR}4ulKL`_cIvmr$?dwBzpxFBZfLYD=V$M`Y2#fRKg-$o zhD~ld?;FXnK9C7RC*+;OXZvQHFR91HVLK-2z}F37fi8lPNlz9}O-4iWmW ze58k(#pn<)v*jY!Sh+H`CPF<{?YdS|VI@sRiZiHtgOTofebqZ%b~15#^jt0E_f(1f zL(!cJj#d~9aDz4=h_e|J%}1EHmbFRV;h0rs45_7@&CoyNLL92d(M?$%z^&lKcgFx( zuX-`-V~r~P4d*4Q*Pmsf1d;C(jQ6Fp4g=D(*BOoDyVE%w@^)zUr|hd)KqbzH;F03? z%1257S;XddJ{DCx*E<=>VmuN#mrk4L`@>>o^4tHpe`zn_tt2uEa4W1Qmn)eRSu7fFTMiy1kgSz*?l?Y{V>(*?W9v zS#J_%5{Ho$k&W2dJzd1oYx*4DM9%I8hY)IO*^tq}_fp&id&_wyx`kCNyNj@hwcIFY z&b!b7mwl*%6qIJtb%3wx2HS!1rn5EdF2GjSPc^s#ht7fyE|k=g{BhzKg6Ojwvq9H{TkG!>)S4mt-gqN9wHgFSM4MC}MfzK_M966r$>6Tu&T#6q zD!t=GYogeQj;Z!i{nl)EuuGcr>HIpZyLH87fRnCX`t&Gc+&N)ojTGO=`sUs5^^+7J z5*GLyH`|@=3nWaQlbrw66eGIxCA=3nrw2W-cyA6(eztlSQNQ-Do~szmnQ9S#^meae zr~ay%wONqAb~Bm>^nLh_AxgUk7a(h1v~ft3$gYsN;~i`RA5~&ZW?|;|Ym704qw7wt zJY&D{+zJ_`Gor~zP!tic1^s5>^rElLqQaXlq>9bD|IRE{qZ$to(xGS2p@YjGGBh(w z7*olUMkn00v8^0|?QY3oSpR*HL8_xj%-BORql zauv^(PNh&1qya0-`xo$r*nu909|A@OY(bZa)R!^!x8cCF%fGNUWsF;65U@N=UAsA5 z%yv%^pB<@~9w`ww6hfR7YY-iRVzPe0dI0)y)Q?LF*b-Y!WGTX0&UCx~dXcyQDfz}K zkOgdM4x6)8;6aawDIk>iRw;wzb4L7 zW?S58B?`(Nhb@fM_(_LUK;&!d-ygE=niy=4B|JGF?wm}`ES#tSNrn98GzqyMkt zi772?`n}8^PHnufovm|L%|viIc0%K`yWjPblGl7#T~U%tjN(cc?b*ezph=ZU!RyO; z5UT*>{0z~i+O^B12y#TC$N?(lMA9|CaeyI^Mn=$dK~KHSMLGm1%mm!&V9j}2v=(mqe<-4-&K%O zRA~xwSFo8-HVU8R;A;78oxp zgz69$)K0f3LfrpR!)u8PQ-|@D5wIrVk*Vwn->^?Trv@w zq~|GUu1n$)$G0*IY59Lo2SZY0phnMLLgJp5KFj#9?x_zDNE8O$H5Q^vS@!uL5?G^{ zx8E-a-DB2CTaCbmNwwXc(f^$A-`PoA3)-^+g`&2pj?P}%e2&GsYIT$JIqD407rhfv zTgJmv{Mzfr*<+c`%ZSBd;XxYVh__}CnMpQZ^uU-*aD)IwOz}ec46=Kb^-0vX_KKb( z6m?*UF9 zx1@^h38VED*Tq8f>60~>DA1*-kK}y0%&~TT%YYYHTty4`?I87dSv(8vNkkB5##n}v z5_Bn^KP0&NO7dhC%jYG)$x%R$RIbrAiw?L#6KCuG#yWrfY~T6BSFDMetH60%uGWX% zBtVe&WE>SKxKfH7Dv=sfKfL3~V(Gg#%1#J2G7nNz8d&>t*AVTPt>ya6N9FK*LAT&y z(c0}~;Y3#O_Lh?S-d-3(r6f6E!r{nkXF8sbI!5Hb1pjKIAN6`P9bNJE1wiHjjm}3_ z=m+`g4MFWnwF-AOecj+4g4dd2z5`NkjOrnALqP2SiQ9&iCz)A!IeV_(EDs6Y%Xqd! zHDf9*?uby+xv{FYj`jXAt7PfOcvpRy*&^qlkfSTnStO-=zvR6mp7QPyi$rwBJPT9p z6DA-qJKW&+b&Qh9e(sibgd$xsQVs^8wsDSUt%`7bhWy}g|?yE z-m}Dk3+m!1l!`qzg3kiFi%k5(l$2uWhOZ8*-aBgBK$B_OR4gWI> zGh8I6Ja+^zGg{$mvF+TR+{WQC}gW}O^u-!sO9*>+NZGl4kUxhD4Tem2Nl z!YwH-gD@(V*aqzu#R!Je0{BC$(ra*`33HQ&Fqo$8*8(rmcxB=AH!L^#VH~YxM?)#1N+Q%-FTN`04q$WiEx`$myc0lAGKV4$AG}y3=k>0jDKZ=BaE7m zf0a)#Ai!X!kp)56Q1n@@R<>s~UmjpAP&YY{Q`N<6aU3=ctY7Al;;3tNs=S&UhGLD8Dx zPKo*Budo-Kf4osc0m|+PBGYc|YKuCMLo9%L;99ZQQ5{^EedlGK`T7cBRKGhi*NVUd za#9~I{u9_zDJef^*sDILIMo)doZcBVmv`(>V!6#}z*3)ya%gm*;#YKV36HU{w)3qu zSo_==@EZVijWm9RT`krd%JBDw<9vPfsBpQ+2&?TBH%(W&?G&BeRPdJI5P+W%IVXPD z-iNjK3(?cvNu9Q*cGiNM`c_>z1a=G~;zNHd0)MlL?RqxE)zt6o{_x#IRDms^GIQ7A z;xKoS5Cz?aBKHIlyt0YwlhyH-CMDsc7Et_=Z?00X-S)fKFF)%>GdrK60ValHWx^B8 z8A45cZwmX@qo`b2h3cs@oh@pRjlASjUcf`LhyLfTeLy0HCeEXR$w?+vSoh)*SH0bX z?N1QH$_&TDPvq&-@II09qQ`JvEEihDd(MdahK0Q}^Q%vNMMm^dacjksbU9m%6L)p> zGkb$&4cV{g9zeWibt~@ zT4#hF);Q$j5(xK@p5ap&R2X;?P7nc!pTybLa|D*BIVR_EXH0f$SU62^*jME=U4qN{ zkZikOHh8%X$(8v!IZ9r?HujvcruON=uZF~+gq+-(IWNI?b29u8 zz%I0_YHR#EBcdjX7%WYE7S17<0>1gHcB^x1wN)qtl+9cdCZfY53T94`Jo!vNJtCMs zI%tmvNF;$KZrd3R8%q+m3MzS~Ak~xvz0&DneL{|khU%unguX^6xlpM9A4I=;U@`cvX?T^V_$f z8=0Nk;`C8^4^}|n4Rm3;Zb_#y#>@g!BriKHmzTYa|7f`>z(CK_JDle`oaM62i}hUL zjavM{7W_!r0REkq2|wj9ly%z$LQNmo6WW-_*|yVUh9#Y*emW^qXr6HVFOCB+#0!ZS z%}7hnFw~I?VD@Pip`X_E-@B_En5EhE?f%UlXTRxnp@hTytHPHEMP$*wg*oZxxdD)d zf<*clqW7u|E69JZzI*w=f%JQ{uCfPp+F`JJ4HKUBb6*IO+XMJDGK5FlsJUS$pz@9! z{lj-o)sR5Qiu~Yu1v7)wNWe?QJg+~>``@1&?-wuVTZxC>wP&Z!Cy#bD;NtU+GSY2> z?i&BGJvLjbtvfCA)JQJygD`AQ$sdd$-XnVA`>M(kx+bBzMurMxF5DE0uhS7YF_;nI za5pM}?CVQIH$O^Ad*kpiA=C;YFLn3l^O}E*Q2?nqLmB7lQhR*%cCW;)%G67o-%(mwn&fy>R_AAM8#+B^f~6Q`%$=f zm{|7w3{1`@Sy!7_^dq)1ltw-4O>f+uGQyYnOjI%mNa3h5VYs1@JgNeakNT8e{#)mS%FC2(~6;pQh8`PK|Wwh!5zjIGSoB z&t``UJQ1hu9isIa&)t2TW}41>Yk00jYuA4!zpPKBijhduCntEGL9Pr|NpIO9HP-bS z(JMq<$wC8|0)U@NodpUUs~J13^*&2&=aafh$;c67-S>V~5JA-oHY)O6GWh;{jBVbW zXK1uHz!w0(WB4Q`i5m*nCb6wP6e~^*x9{HsA3`X#UM8CDb~z+rA6Pcph_Ni{cL<5S%1gn#bUs!#+cz=S)GNDh!w}m%#n1H4%hT zUiF;EF-&ybf$IIZMW6%Jn49|yU_FCYRF$wSu)~^Mkc9Tf@A|WYRrTfrr-&m}zX)S7 z`du*D-+4?hw;xv*aTJgNcHl$FW3lP(BG?lY-%IHk+?Fwz;Q`<2ZX6<QC3DG+CQlm(chkW+`^8*SBYyhQbu6Gij-oit<-|Mif= z09CD^U7n|>r;GYu3r*px`Ms`oqOlpWm5XPeVV&WW^I!tuXyfXBN8%qJ9Ps+Tw9FO; z5(TS%1R%v;RaoPM_5CQ10q}kNKTs#lW&lwK{7=%*6xkZo7GtSNcXLN52^SWbK~4~x zr!8*N{(cOEM&(3xPS23I<%AOv$S<&)d~6PTquFT&2aAwx(Q5d#X(BQ-z;=eC+L8!( zilvUWu`Q}LstWy;rsD2FEXX}PTNX=fcjCV@JJE-JTfU!ba;q(_ECJ1ID_K#~pS>kkfWW4hdK_Y=AoE~X6fjl0Y0-p@~2x_k$2l3`+vVLxvw!T@$cCs3Q* z?hzFBM|GW-8x><^=;e^QAGKtDh-t6&l1BQvv!*~c$O53}M@GZhcn|5;82@JW+tG#J z(#Y4{eI1Sr9hzv_2`#JpyZ7Dfd(R7ljGDWCbisgu)or-AvH}a1mR4h14}g^~$6sCw zxV*XSqRO=r1*{vW6sW(#At^q+;ltK;q}^%Ilu%1+q{5~`@<9Cnz{Bz)3UGsz8Y0Bc zz5mGf_wQ41jPHV__vnLjJ1~d+SGe??Dh`E9YOH9Z13vZ!VXqW!UjEtr^Q+QdX=CXjN}bK?%J8f`tTt0cC68b#@rnP2MbA zkZ;;cD50Dy;C8V+R~wlM#GpFCoRg#tNInksqG8b#0y+7RN(791b# zsVY&Vhb`%H4Ek6-z`Uv)?kG-2e zp-jtnhFpscs*X4G8M5cG$gAs;ly=^p$p0>~BmHu^p{+H-K=>r<<(b3Vg zSk^GmyP97hjc=h&E(|T1aKk6WgHm6|j(sG4?3UGAW+<54jt3GYOVg@Tss`a)MMU^wPBS;wRa~%B? zCf-u_-#i0Lel7Wfqy)z@GN=4A4xYy499qaPSGDrZFrSe&6WLBkCa6UO0pxhVl`{&(Bkv z24FU{B5c4}U(sVu3Y~{3Q;XX~jx4Y6wIgO~N?jPTw&vir`QbZgi`f1~Q2B9bwtnyi zqINukjeGFq(eXC)-Tv=3=Wi82&Wjo*H5QglwYnuxTs95ZqC*_^8q)=x=4Uq^@Sv zm#x;&sT&$3lB5V@a&mGufAZoXySuukrl%WpLK|K$DUWv4cj}n3G?d@tz{|JwAZhM; z!^#75^WhC$9=mzAfq0brGoW4}$>Yu8oz(ORg9V?xXMuO_KT0e)b8~YI4a^vB9BA_v zrIQ9aKooJ{oztRS-z##~t!@|{aX`1&*sJ-g?0cuC;Lq8^Gnaibf@|4upsv2Yd>l9^ zC`guaYHm(jOUwK=9MJQT!=YIs^tY{u!3yJ;?0uM$(D3&8ZFimR24T5iOcCFdAD^Nm zwEfVt)961*D1Wg2?Lgb z|IDl`r)8)v$@JI033Ii;B|P2zclKcyE$<=Eb3HFELQhPYa5m%W=;$aI#=an`sHjMl z*6el8%EOKp?*3R2(={KzEmoJ0fm(QO}0X-;>w#Q2ZXR z3qhCCwz&XG-Dzsucz~Z?-|}S=KqB;j*lr4SL&~LG!uI#xvZoiCH`R|GR*K?_)^yIP zF*E!-#VUQ97nj?E<>lpIdqM!f+Z3XHVzP$%j}ZTP)42_P26`yAd*;Qq3_J05;p8#7 zGP|uqjuTc64n?1B#7u~I0jxs~wDgK+sr2!6t*}SDhAoRuf}yI}zI8;=j7#Shd!rdj zN=h#`);>NyIy$&q@LxT!$B)d+F(C1s?fNYYs0Kh$V4P9n%- z){4~(3>3yBgy#-OhV{_ zmNv=wDXKdUo;)+^M0j|)*l`3ND+C$MlO)FhB1ovhtB-`lG-=L%@6!U`n%0&crnK_uqrx>B4wSmYLYn=nJ9k7l`brLn0hz> znrQRkc9r~@YYWpGgbdheGnH>-7t4(5JsarJSZ?cXL^SnOV*O8rTZ_#?%2K7B-)umO z(0(}FIqXq-87_gOjcJ&`?72d$2C3)@W-00;0}03T^Y=M{j3&DZ@CUB!jo4mIgtlC!s`UGOOgJxkh$?w<9>sK=8Xc$0=d4Q?j;th3Iw>^V1vfoAGf1rO?o2S%C2*B^&Z8J4jcWsqPq?O;D3p5_aZH)Q@@a6y1N=u-`s{i^?yc# z3JK@JQ*hqU!w?#Z@Dh>imT9vM$b7K6d`7#MW%4f-8Ep%p$m>ZpZ>_7FI{RsMQRE&q zR{4{;#CfdT6^9Q!{J-8)K!uvFZj0SwT}3tbYO&(i3DN&voPsEhDh+E`0Bx@3gkC!+ zvk(0xKolw$0ALb&{{J5u9*COQU#>GB8P5@@WFE2-dOFCjV_ddtlB;2YhsOT6P>}F? zeNcVe2?yvu>Wpm!=qXt;Mpyjc`;*Y_X9 z;t>g=RS~*Pou!hW-5blIGwg!0fetGzYQ*Ashka-wib)b$t+Q~k2{1*SojK>Hl?KiF zhS_48ztfGp<>F*cCZI%YHmXNjMcR$TmS1_mlDzWz5 z==pHD?J^;BU;X}64Fyqa+rCjOK%pxrM@wsH)z;DR5>Dvwo68nQsr&VA*|Fmi-mmUI zP}t=<#jw-+R?jl0(eK&4dj7ew+HdS=3lAa&zn)T1UVaQk$cn2GPA5~IyZFFO`};n6GtZ03?i0pV&Nlw_cVS_GjH6f*H8>}uRYWM zxd#^Qz}WNs^*+m(i*MtGZYK=a*f&Y)J=_txi{q;H_#&urrJmDjIJtWCoe+LzjFCn< z#l#U3_J6q?tYn@a;&xaW0+H@Ypb2T}>B(XG3M-A~2;6T*kXBV!H@C%pmXoMpmX+Tv z(B?%GNeX_1=AcsY2!!yM~;MUD#b0X%ikZtxV+SGMaI%Ngl{?rR0+*3gN7 zv)28sJF-7vyZy+klmDTE!YTVzAEeIjyY4$%a^}6NMbzp=E_z_Gv9UQVp?W}*wa8#o2ps)LT@w)X4wQTzKpr-ce}!1=q;)D@37WRrK5kN?u>_rK--+(wr{{hcP)~3+=JRX98R-}8iwPo@uEN5Fjy%YiEn=6rrKP32VbhJINS8=ANOyPN$@e_xoaeds54isJ>fURwcdfbB9OF}?N7!tnL+|Ev z)zJ<4FUid=ciS2;Lo1%p88<|noMt?x4i|(p9Fkoohr^l}$7W|6jk?h8Kd96e>Yq%! z*FX1Y*+70Zl*J!rr>?U_dQDUYEXYEeW6Hwoj@Y_UIK*P6ISFIvtMNU}!rK8xk19|L z`60I4Qh9qObDQ<`^*ar9=ls^b?E~=#(tjDVu5Guv_vjYMq3v^%T#D|5m!ui)8-yK7 zlfHz517p%rh2J(<6l>^Wy^3RfOG3(ChDHuoh-6!Z)?{om{U|h0H{;iosVcT8$ZJ69 ze(90%d+l;p|1tSRnt*$@-&JY4<}I81fuXE1_?F_b-dzFBL2#l6?lR#kPlyRx_38KM1~ zbs2!KC&Q*(JXP56yMLG(#|Qab1j4Ooj!EsoqG9QD)CwM2ywZaNmJj)dMKUbJjASeZ zKFf3&USdC|7Z+I@zmo}hB@)2{|27xrd1)rE_gb`cXU`3QWt}?pq6rVhJ^H})99jzg zz3Pw7npyhRY3o&3U8(Oyb;bw+uh|bB- zKyHK3M9BZz)GyEqAuzJ*C(4}<+4)q1Qn;z<7PvxJCFM>Sa^-zJjF*20^x@~%KV14g zx-J%l^DOTam*@MBoEBQG5}hDHfOS_S(j|kwtixZl&d_%oDie2lp}WPYCzK?`IG^ zUe_96WJGKYlhhMeU-@tQrWEECF4dpyW9wRO>nCq4;T-R0Cs7ic=NmfGS6`QJiM;M& z6OW0{erPd&b6>tv2Lblu=POirTg1PG&F|~~G#6hl6;1b@m2a^M*`|eJg|aVpb3(ep zQC8-Q650M_<~xuh+((}ZTfkN^d`ELICG|GDz4h(USV#ILoinI$2j_lIF(~cYuV7ft z>*(p*tI?us-mFm)^LOA~UeQ*27nT>j2ohZh zSegFqg{;wB^iUfj25nBbp6k+=42M?AclCUdVW_NVXr~=oPER3L zV0nz>UTCc=qKVvXSb^IEdEzL4Wqw27F=`i8|{_^?m0d4$IkuLfUv^z7Y6P#w;$o(QH=R$; zZA6yq`$J#hxU{|y&OQ&PW-3lfm>GJcF%Gcp2y~hOp_Ja zP*dZyS2vCUcIe6WuPE2>0`~!9%dqPTox55!ZdltWL*YnSR&&bI{pFI~azkbx6Qq2~ z6YSmjRoM2`6gExnL4Ofy$_qn3jf^>M*I~-Z$#G2Aj7)jFBPzOST?u7!`y_c&F&Lg( zvM1hgyXY{$^6rl$`S@Cpk$ni3xtcXiK^5P|*eaFn0I-r`AoUs$d?OWb`RKV{d$&cs zFtvgDjZ#5p#V<{j#g<9*Zh=>eXieJk-i(c_5C-$uNcyxfoG~02sQ>1p5(0 z$AV93&YCffC-yYL;db;ez7DCMd^zM8g{7r7;8A?HI#s57Tkm^YU#wY*y-7^w_7C1( zO^sDtnm93ad^-Bwstf1X{=;{Z^{rjmaa}md@1nQDyEo?}xMI{b#oC8Id@0() zv2@52;OPf%`fG{oF!7M!Fv}H0YqK-Do57B96H{`cqu3*6qK-R??~ldg6gCpsRI)n5 zv?O6egfz1*(ZOe?O(*?K*Z*p8to8)Kbx~5!I+Z6H?^VOb(Uy_E34BvX=5-|cfbY{o z>PpQ=tzTn~l|fKRE{fb4j*{a`TZ-yqKc)L|JaxrRZs0T`!pt6JS2ZXwIOm*AyNbH& z{qc1++n_%ZdR6Uir{8Do`5?2EMK7O8b?)$t1T-HVy`>l2&wYNiHzApNJ4$VDjpSHw zm7E~Ti9Q3TBDT`~jE8H{g7W=G`+x>=kyKmL5qYX+;l`=m@Hr~|S8;apFC9Qho?3X! z`HM+Y!*%IHcjp3wS8a$(F!MlmNUS;6RD*Kb!cWJ7Ev-t2b-7dY?RtCiN2ctAS@)b~ zOD6uw(NBzj#LeuMc(@-_=kaDYSLS`P+udBHjsu1T4&MoJ9uydtQcq!N zEQD9^y#&h|r#wYP;XuH5a?{>Hhs4!B)18lI z{1xqQ3HrLO_gkO_db76j4D(%u^$dr7uO#8%Tx;NA$`=~tntut{=E8S9zIQ=BLN-{q z&dojNe<1v`zo=_KHjmH7*yrKaq-7z*hb?z|V+Vm*nV#bicR`v9(c}It2yW=3%lJ!tEdN$^ zGN&!byA#w4DH?@*Mr1`XmY-)8U`5x{1zy2Qi_!^1lfcHWKR3ON!uyZ&6VQX;amsif`1?7#H* zaCw)13sNf*FEGik)x5&CSR{t^k{>|fNkhXc%5@uWs$_ zkyIK(Cy$*rGqCn|QtVojLWfXg&=8SPazeC?pQK?~ua)?pq| z<2dVB=vtufD3H3$9^mdUm&_hCAd%udVLq5;No$fIf%Qh~A|Hg;*e zx(D1SIkE7$v@a&;O2KSf=1Iib4Nr1Nki*L&vesb|w%+yLA-7@s+3lsA$CJ;on!x z!oeE88lFnYGpd$v@dd+_ard&FRN67Vm@lxsJ-5-7GZ2>0^l~|e-^I2PpZzS?Z%emp zSpM(JVtV9fO0tM7k~z5yS|pbI>yDSz@?OPihX|kC`htD&?We5W;CS`#V*1Z=tJ+>#C*LlY{d0h5sNkpLG0E5_f*Poc5V+0iJu z69Guepo%< z-4XVG%PNx$jKY`s_~@(K*_DHI$68ToX%tc#&lbJ=ENs7kZYs#O{L=|;3MyIHPZfeMOW_e|0G&vl0%8-=3mY$yNc{hT{ABK>ft*uP+ zwM&P;?N0O%SW!{soa4HbWiR>6gPb4^MQIw%^5o;?eD?7VS zBYJ$&kz{H7&WyH}-|XYpiOE0^&UP^~_EQcd42Bkh3P+V4>JLM=U-<#Uf+-Zr0eme= zziLMH?ApsIv!Hb9f1)7KYw<~6N&^b?u>6m*z;fUV0$yz^h8>)d)#JfbJ{)i)!c5p# z##i7-jCl8MKjDlS1+u0W7Fe(=b92A7{w27>hvSgKMb)6nuIATZdmD+iN`;=)`xFUz zgAItqiJfqe0O`kw6CI}Br=nr(9Aa=nY(sz2#CBEFvnoo7AcD6okQs^|4rlzSCQC+N zZEa`QT{X3@yTNc#&gzva=f4Yz zKptby4tBdqygU8H*;z1j9wcv$OhMqfQ8n0B9wcEdg(sDb66_WrJ<{vnb3D@O{HLtU z7w~?4-x&#EmRB`}UT{^c9V&Y}J1fJj6*JaxadDbJvvjSZeFy8c`EnU-}q2 zR3NT2fO#~4@WK(Gs80lE*+}3bM(HMf%O2ibCCy1wqDu#Cv!idTu*;~dX2GT`OE89q42F>l)HLgYF z5D^hoy|v^l4b?P1=Mnt_j)_^P5Qk01fTaCHiat9DwTPaDrL?%XX*)lq4pczN=YI!4 zJKLQnpJ3EW9gH3>Nq~Maj*q)}Fw%t_lZkPA0lJp~{fCp8PZ^~}MNgd#D9t?=-8YBQ z1wA{bo-m%O&#T?xkM~QDLn$ebXUdP?qMcu}!h-qv`L${+fh)`;EEi_UI1nI~1yI1M zEk~TqKWSFZm9Gm(`JIA^!dBcXyeLHY%k*DK_SJ)EzK7y4)<*N0D$^gnVCTGD31hqZ zl5nLIpO7$C59-Sh5)feNI|K;YuhLVZnz=-w;CA6Jjv zq^e^i!|-%LKcs1gw#Ee|1uuf)0fblySQdS&BhdVH&DL5?m44t&=2oFhcbT=&v_pCN zSV)eGA5@MTay>-A>>(UDVH)_{j~9>Ahc7uK3Jv@-8k)fm)fbX)h*}oXrGhkiKS4tE zulwI~c(VN02bS##qga5JW-F3vfKVub;N*pdRuVVfh{88W$WCx%9|pUJMLh&7Gzy^V zlit?@`bw7?=Cop=Ky&9@M4Ni`=QZTDGe91-3fR`ksY z__&S=gQ!c^42p3v5O$n)EN+ zZt%b5H*Z|u2*<~W9ddSY5h(UL8Flv`AGfysh$KE(xwrjHGgu84+4@xWWchL2@EguC^Ch#l_k6j;4aE?Q%8N)cRBn=4QqYV?i1+82kGYHQ@gyxdfCwd3iEc@}zvm{|!O_tW-+wW{`WLV4U9XF^jg6@tqSi2@ ztg(iMhOx1+tnBmqKWb^Fa2_N{Oraq9*Mvfk9yKf=IRtg!E!^MTOq8Z~&(LCDjZ#s> zN_o6`=eU7UWTvgH4Ld~@8K%UMglcGbXywzH*D=VdR>CWYM|J;wrVp-l3%myWtT=pR z&se#>FbtvS4=J2rz;_(UN$<`j3RMthrxThGK!KClBQ!~>3M3eTRQp-d9b*N`v8+bc zKu|L1A!eco_r4PpF+$!qB3PnQqQY)BGp7-1u$Sr#ZavT82$hgSD66rwd!ngjpCMz= zv$85V=flaoI9n}X{Kc;{gC5X(8V%R`ibE2jUAr0j*8Feg{QSK7Cp15GF%3UPe{Fni zBzTJ0J_vLT^S1)lF)|Wd`)8I;=V<4=Tz+Y|+{Ev%x{{NL9{LfD(csv{C%!Nup{sFc z^~daxz(>iA`kq;Q_&}TysimojXIx%1upj!y8_G`WAaf(EIHs<6=%@$xF@Hf>BE-hdC)cq^Lg$EL!IrwRe79T4Z`P8{G0cq zW$1W&v;f@%rIDXVOCeDyT$dak6q}6u7`(o zp?RF-Y?itI@Kt`~d)$^A-hC_$-BZNHFN}n?hk`5)VejqzZjlxQJ#fmTY|;HM1YHujmi=0gx8gyPs_9Nqcdk$4O{kF23sR(w=sRY{Mq?|ay?}Yy^(;oSGF4NN7z58WTcS{)tFcZ_Bi*COZQNpl$fF%YwF(I zk=It*z!qUKQx$KO=SM+&BKv-ltsJJ14kB7*i9m^_sTu$C6RzJMv58zzO!_RU+ZWy# zq%lN&$#o>2{rmS90?<(Do>|Gwj!jNVu^=5%<*hlfK%8&OC#iTm&XvQIxxT4PiJ83& zOufL3!eud!B}}_%AnvfF4tJ6fi!Z^|37{<2F&J@RzA;pl?tj6l#bB2kVI7QEBK3-V z5c8w6bFG0oc`#+K$fzb{0omV>*2Q!mU9}xZ-$sdBmPY-EUd~kPBzqgxekgI?b=U&G zW>^jvfWG9=tTTuqNA8U{l7~9f9Z>wyL?ZMWFRM5IytcSYbBH!fNF!1qkZOU=G^Q1V zs`q_XIM;_elPj#M=;G3P@%xS@$|ARv{$yRFi6bI{E5E2HWKbf8#MUb2PwnkDw$u~t zgy|LBcgePp&_J|qmM`tW{+|uqis2c^XEJRytTn!!+8)anXjzU0niM6x{SIF!bwQt@ z&~|!q@~;Y|6GemYW(Hk~#-H9_;aN5To`;sLxjBU-MByuxMif7HSSME}QUbe64~13* zor>ZnK>580hipnSb)QlA2a@E{@Ij5U3~le-aIo2AF9n>w9UuR$Y1#=j?pTo4_<&IeA~G?7Foi78i9;h_faw4 zZE$DwqiT?!YP=pB;da3<`kvRK!f&b?dXKP9xJ&dApvF2Ra>cakjL_E78~L%u%%B6U43Hv zyw<&Wh*deIXZ4JMHF9`g?HzTf|7&|gi4mBmeJlxH*aGF4YuSQk;`(PT(_-d1Q|%ZD zNeypUcd6_|Vl~tVr!~D`I#+~qgb{sHNAQ{IeLY+YmY%(v1_Fh+j3e~>TZc}ys#LSixchkHgt82=^b>O!s z6NPhzMzzoP8T3+H=NupNcH(KaizVZ&t4!*(s;noyf=Yia(+}3^$HeOXtB}uLo8Xcg zWqmI0FmA|aS;Wl_9r-NMx<8iuh6<(NrX1dbym>_gBAOq)kxfva=T_HOyWN|#G~6(1 z7CkQ%NBljx%>Vb1b?tP1nxmWs>#@1_!12vSa(o?L{oMM9?$_8io1BgB?yIk^|7qNN zv8)Kl8XM9t(50?$*ouzn6NXk*ng=rX&1il|?{Kj&e5k!g3)=XA!auIsbb!Vxg3aJi zru#4;y;(;l)OOWW^kD3#hsrD&RhhfFrKTC{{5oVxm3r6iwrA6)diO_9!G;zaBh7_a zn<3*0zXloBv%FYQFdwSf41YS@_#7u+Y zcrb}m`a3~8?Q<~5K_Q95bbq$itCSVl#&){G5Re#N{P3$l2$CV}>*Mb3E>flb8IsgR z$mfuIt#c;^@~3B;T-k*40J@-*bP#G&q%LfJd07wODON ziax0!E3|`bgCdk-?3FP|hs)mdo0cSe$;Hewlg9M9rTw=jz2w5Z!^6ouWsj*TDBtM^ z9NaYyyTYDT<42g_*LnQVNjOv}-ekI8Ewi+LU+Zp_n(o3utkII8HjGs(QttGF&>Sy?u+}ym!EYHKQH7@_YyYd~#=0Hk-DRlJ@yu`>n_bUJ8fGB_OhwIG_nqvBX@E%Kd z-$?q0L#LR0wkiCWgh+cO;h!rgVo#OOU18Y4V>8QTIbP@|PHhIPDKA?=cQ#h^_a({O zS6+Of))$uY>n=zC+M{T2RC13;KES-}`slV;az9;K7)5oO)mI&KRQC)EwE22xFueb< z_NmV{W9RsKj)K+!&qHiDhPAIQoVovmK6$Kw$KA`xDC~Wa>-A3BqFH2lUulhpM#7Xd zUhZ6hdpQ30(2=%&^}n>TF4{HPxy)f7&12C?9aJ*H9w{Yl#pHmn` z894A-zBD^~1w=m!c%0F{*KTKL`idLf6}h05>kyVB0}mJdgy$x@pP10HmB~Y3gvK^9sOMh_ z8tHfHa?%?tYeGB{ibggqrf!QR!dgjk-eAO;sB(Ol?jRZeer4Mwyc3iZ*A00YjnOZa zaA;sU5J6RYNM`p|b7A9xK{IUaoW_*h+tie1TM+>#SL$v(LI35Hf6y3lmiRA9lKU<; zA1u}xP(Dhm1BT@}&!NAu(A`l7mP2o0adA!$s%_n<_T%Q`T}JL74wD4nHgY>*g%@dz zNk4?(pgza+Znbu@<9B*kTDmh@-sq1zOux^CrLD2_&~6Htq;x$J{Y|83S66wA@{1Of z=J}Ye$m*hXWA@=@b2eyAKnjn)jNaiRbgu#S7Nnj(=tQqpA@ult^n4^C)(%4A3G1LF zEVKNci(z_BeATz2p!X%} zxTm8d2$N2}S8EQM_Y1sPXcd#4W=s=~QSWar3l2fPJ_zLZ7)}?oMEOu>O~_+S5Q#VO zP6tT!!rMV^w14ENq&5%zvyFS`dT5L(o$6wD1nIz~8sWn_n{S8?1T=&jscL9&Op6KrA3)PAG*J4=T=`#LMd7MDmUW%ZH!9hh;NmgEj{7Fg7n>2qSwG1PzsAS)LIt})g zOPo9OH_5yLVz2j*TM==SzAB{5KpxBzPOg7mta2YHw_4uT!1f1_-z$a%m5B4(*2{Rr zGENQJxz1PkGu@Pds>WU{v^wpi?P&^9ZH{}?|%&?$&L6bzvq2Y z5-{WN<$*P7@a@p!L%DICV5}^wU$QL4%vomy1Bw3{c@3jn%+`g4;(n`HLV4Ygw99gl z$8aD2dyVRZwVzoFa~n`ZMeemI7AxzRjy1PWEl;d_;z8KAZ$w597p&87^kkN*K?>-v zFO?r{S2{z?vhr{W6jQn-qj`Q(Rw?!eYC}Hg=!nq@*v`K#3&t2#iXlvQ_!glZq5Zax zXyc|c69u9F4yZ`AMOz*pZb1<<@;JEq7k6kT^G=P2-fpj?cOIxMH<+qoma}E{7F%us z*A$)?1rJ9OY^07LmAWIA7a5LK)5xRmol>6Nyy*E*>eCQ z>Q95Qk^A71T%XuBq-+-posP|Fo$cU z%W(wasq%OoF!AeepqUOHC+LiNGqfG6qd2AMpMsaSB&gnPZ% zCAUd$lu{b@-#)_C7s6qURR%kDdBYCv!^w*?C4T#mnY)+>}KEAm=ACIXT+ZGTkObakF@q58ao;iEldI!JPw|aQ{F-y5o+P zEgqVQL#MR1+!cmjyj)aTYRU$A_Gh-u*B9Yb*%!S!NlQyBv9SsR z9lCTgS+A<~8}3Y%A`}|Zhc;&PE}lBJjF_bh$erVV{9x9u`ljQ!Nbd`Z8hlf_ALa3n zSCNkf$4pF205m=BAb+U1Jngj&Q&lL)z;518K#qrjPd06Tha>n+Lcc-o65nSR~Sr=YrWB4 z*=v9hM(}_=DT*QS>~JlRX0`8f3Yv)otCeLbPOniC0_TztUy=(cgjP9ikHYa9e?%=> zXuH`d4hW;OL+yr$`^YI1IElM!RT#kIV>`z8CZ_P%=!`?m{-j=a;wXQ7Z| zP=oKj%bxV>;4V3?Q*pOEP3d65yAdDcKo#P$U+K&e56Z9dg5OH}rTSfNFWyK3cc+f* z54C`DVTGx@8GFK>366sLRo7Z`rlUOz&gT?LWl-NfvNr-GAMM7Hoa7L6k~9+6BsFzy5DA980JH+e-Ls zdJ0|G6&uJ+H{iJ$jOQXwYx24GVC2%P+mKH|x7_-h1)OgAyD{HRd!2r;N+S(0JHv^P z7zlR#-P&bnJ+YOJ4tFyqEtX0`e?%hWRs_!5kC* zt zCK*N|hzq@(-?)Gc=7m!`m;Mx2dkzPehL}wdr=;9Rp=jlLTT-R)4I0sE;eTt7iS-^X6ZYpuE;D&-@YRE%j4R>0PV2cRYL> zuc0c6aB#u+U}NEbL-SQZunL*{YBF!E`+``-+;!T-+uI=JqfeFW7{8efVqOo;_w4D? z(YX6lxsy_|@*T|@JAG}3U0j+r-`lkj$9=r(6?gJwlJ#%jqmC;?OT97`k0`)s$yXGi zAzcNQuKIJX2jAMeernbo1t?G8H&p0I#J(ZyMH*8Y!v|f7bNO;8tSw|u%^<@|v4}n- z(vE+2g3lj#TbcE$w=i41N%ALt|bC!ZlTWB7$Ut<31ZVG zFmQ9e>iU*d_`5>Bs+=rJT8@@L)3E8o^}+?4&$(1r`Y^G~8sh7{9~gnu&z(zKYY)Ay z2Znlt-i?@7Z~2mr>NIIIno3}iPKc$`8e{@x1~oFcoJJSku;)}a8(J*bDe^Y8!Q^R{ zi+9lTB#-*B;!dN~EgU}e($*ozqp#49_0>AOpcy#Qa{dq|Z?8q8jcvTQOuanzo~}-&2R56WCREh1uIN+OMJfM=#=lJc zzi(+}dUgk+;|rS8vaap0!*kqwjd!6t8tOh(l6bNoYqhF@Rh@zi>liq>Z%EmRUMp3QF1Wlg zBY_vdj)d<=Pm3)S8?~L}Yi78~A_*N|@V^}oHdf5h31ugThs%r=f#hJXRzMdVEz-sD z1bDpBh|L{ei|qwxPw$<%LpF$%hQBax+uGM?jefxcOT78%^SUPLidK$HGcMQt4?iEA z{gFnB&EvS0l8TM!Jl`&adcf+^!skc0N-5?XG#;Dr3dD4X*A<-d{`c!L*T{GRWXbGX zF!-N(;x&6!ZdH@+&5c8cz4@nw$rYF8U#(M>mYIvamUvO-PinjtXZPR7-EWo@lQoz|bx_9o&9JBzf4DAh`E*x(xJqPh9Np;}IsUlsW?UxjI;+&Z zHJydj_ORF+pcZI4L+vdXp~p@0mE)aJC#r0WR0K)VPV=`RLqHI%e+HJOqCewQ}HJDRV5O06zgZ!=cyywr#8x@EK7 zoFC^uNa1PE%!anu$Vq`QkD!Ar;HNSyDlab};o;%Q=cj`6`vDJCfaB5r!IJ&EM*go% z&Ad?U#KQ6+*J9soAh~)*w&jlqTf!ZAj!^B3i1Pw=8n7a;Ur1CIN5Q)`{&C;4W|E}} zz*XFewY#0k9cXoSuk=+>_!v(qYpoZ*zNr?Z%5NRn!8lRt{&;K}mJlvC^pAn?L%nSr zwQT%4V2Jbi+2H(Y5W+B|X+m+$qPyxN#?uRJGKA`u&WLX~e-h2m-Ab>b_&C9|U&G^c zuoB_I^B)r@;48J{tH+;xDRGJ${!{nRrdtq^YUAv#F2}iNo`RwE`RZu7BN@JtA093Q z3A{w5D;UVHBh_zE=TH3$CqMJZi#IHrq*WUQh9tA>MXhrwXoN~;l zUiI+kpWaUznwn)=l}0CPeX1xL4hJfbNUeVyWoNWCJ81DS z-yMPC6lIWCEb2Qz=sm{^q43e$WUdGEgr7_Ak)2BasR21cfl`{KQbt#SAhi!b0nmFf zWd#IL5~-%9rqs-2AilSAOR8R@y$3f`&!RTKn_)CWGEltS&Df?PuZM5IC6?i#XSbeaS7oS5r3d_F zGtjouT9{yl6Z6`Fs-(vEY-_~xVlV3n@Yte90#n7T(yfMT3)K3MKZ9}{$oJ#a>He_- zoryUeDdjmwMni`mf^kp8eV?+A!+P9%)hhtNKA!78O3KL=s8p&X<3DI7UpzUJC?V-w z7Ng3(H)D5qUTBX%)bG2Q=8A@n{_I3NR3>{sF76;nqK&~m94 z6BP9c+<|CY!SivoLEBYyhS=AjX?tZx2JMG@*#}kSyZzVq1}TuB3nxKs&OKI{vWL4( z;aH^ZgB4%}0CZ!cO!v&`u<-CIJ_Mq&1{T-dMv5H|8=|7W9D)?D(({-%(xY7$V^jz@ z)~cqn!^&C2+7$+(B4)i;W}$Dru8#KS>SGD2uOLZP5(#cVOCd}2Bx?t9O_$vzVm~gV zL-3Ms$|K-H==QQKpl1Bh+r_`afjfpH%L9r=Gsu?)poZbt)|yjX0?8KR$-_yUbZa4y z*b;indC9Nnystw|3@VR+iGZ!KjR2XbE4qY`qgSR3peWb6QQeNOp9X{RafIMV(#E0n z64)#PmtDzc&`k_plJhxyL$U>3$3L|}&n*catXP-Uvr&2KQ~1l1voYmr^QWniG3NzH z6dg}nfr~seBcwe~9$PX?gTp@FWa4PiK3T?_rW{Tx%SI@v@a-Na9>p%5$u|ON|0tQy;*4Knu>|6n zLyQ{cBZzq;&Yz9l2dXo)6VQ493yq)A8*w=v`xObf0szPY2a6YY^4*3l;XXd)3*WbywpRYJ$oIOv#)e~lZTvcO9E}UVhYULdlNePo0G*9j+z%~1D zK;SKF8!u^m3ZXe3@JLuj)EF1bh+p}znQj`0L5SV6J)T+qp+4e;nXEw>cKRNeKi4Cb zgzPyw1E6!@*X_FsOGdrN0^L)q@1svY?)C~8R4W6S-Jat{(f6wI2P+;`J@nT9(p(<&^=m=;EupwIjSb zTq1VgOq6%~N{6=6iW4rRf$p6gm3$fe{EO`|@H!RX`GWSyIvR~rkWm}E+TY**-#wW2 z84CoFf}T7@<#-akxl)m2-hlJCNRKNesWNCss8UH_*2XRq*Fb+JAXnwlh5MfR6cb4# zAMU@3IcnLrQ(HdH`nVz4ig@7>D*HR|KZWl${D=c_yH{qVpaB4(`c8bSc;{i!+98$_ zL%+e#oRMMUy?M(2vw9bZ!1F#fx$FbapklZu6pA&Y3?9hJ*)Q4j;0)zTfBxii+XS}e zX5*fhXi*%cK;sOF(BB16#ftHXw-47oD%T_+0>1di9x#;-U8rkn za@2Ex$>Zc+NAR*~d_HTueNIk^?Z6{kW7rXReY(lZ#TC`6>JJ}*gdhbfxfm3QH;k1! zq1hDuF)Cv__rq!WB>W2w_kaDfOlQ2&_a*u83Zz4zA7w9+Q}xQTCu==gEk8f54s5iM z+TE=wgqeUXB1ye)1NhB45d>ThF!-+7K9*CYKnNTLEfJAl5JC9Fy!xd6Ft%^@ViK_X zAzdXB#Zt10o#OENq9 zfoeQ6ZBosm#y%=}()8aQ1=4l@-iIIP+mun@R1f9w)VTktchgxwOJfRYB;09}5uy0l zK%5uNyM*$R1eFX~8|Yqa{Y(-22L?JwSJX(AK!nXNlWUf!5wrC4VXY2`e3eB? zxvTJfd;o(fW60JvH-X(R=9-8mt`T6AUq3NN{SX4q0?2Y%(?Rx=tJmT}h3LS+Bt+GJ zaC;Wa_`U+xb}nx2XjHI2MGjd8vuPu9{*hU8IhgPB&N#u@-U7?9lPb2acSTJ}W@qb* zABNDu71vs=`6d`%{iGz2bm}2>RbhZGJ{iIZs)Nu+MJx&oSfx+2NT~o^lAkY|*KYr-d zkWtb0vi!Lf^GR*QO|JaulkM>L)HdXMEv!UXy=+NmyWo&7OR2bqO z-3;&s;se(97z|Dy@!loe^E)r$5Qw=Hsk)_m^VWbJ1m^t9_f&THK&=X*O>uC1 znNJ8wJMt!CkjnOWo0Ctahg!HW7yiy_l9>ZX)_I!bS-T3BDjUZ?nPRPSirwk8s9%4f zmSccI>ZM)8#l!mp5K91?<Yd4%th0~Psmi`C4gYkPHQSl;>Ey?u_mkCFJVcO~Uis^Tn?Opquu*gwl1 z@H{jv1$RgC6~%wGsq4wT&!9%QP<9Oxy*Pk9kB+I9l$DtYN#C6B_DrsCGg~e434I#U z>oYvGkI&BZ{29`xs_wPQ$~1F%=<4LSjB=MPro;0ly~{N)CF<3(jy*MTR7+uqbc4#T zTBEjgC0)w+>Xn?IKYzkta_nTJfJl!0E>9i0IKlNLUD-nj`2_#9PzGBoB=EeI7B+g&A?^hr27vZvsry&)udD`CCV2WbVp-F}+-5@K>M` zY*H@OWI_i+?0XV^pLfXhV6cqLFCvx{5ZFj4Y)TDEq{SGDXj09v^3Bq^O(@A%N8{=($TnQ&w(82WK{q=e@^(}6o3P>tSJ(RO;tTNu z62Z*kB$Ol|R)W1{9xTR&BNX!p&1N2$nVDgppPePrr&N=Ap~Z9BxZ>3`yl*N`*ez?s z(iL0~(!E0>l)&MOx-dM3IkQSc7Oi%#3@JILFKQhA zgR&XfwT&%Rg$rKSG{Qu_Go(2vXAGaI8zn@+){mH^FdLe^@N3`Y)~mI!0c$SLcgnFL*MNZR)3)W9HvbMBNI#NKp~%Dd6CR!Dwqdy=*gL ztPz4ZJPg=S>i#Um(2}r?~PtnMv~~dTCrm2?SPzMa>?c(qh*KbLsn5f zy3d*+jWus83FV$S!my2&)Q&Ncjgoxys8sDCmI?Rd%8P_u1~caRhQhXNZ4s-GSnwEn z48bysIni~IeVO!CT&@}g@+oe8<_7OA_1O=9#4LI=4II4u&{%NUqlkc3^Yru-M9!rt z6~JJiP7HC@lH7TF7c;+{fI5ZAV(G}FsAQ+sR6ny_Y~?&v>(=LDZGBqv)*EoFnhE6# ztBxL!gb%O34qLg|Q4Njb%l(j0l`HNts+Vyowyy8Jo^cS3=kBp(7_7xJ`+#0$L*sto zZ!PZ=pGQ9zpI~aQH6o3Mjj8c!qgW6SH$t1iaJldntfBsu<4d3oMl?qJGGVFMO;tf1 z>i!bl8yU~EQgAb6p_b(!*=*{k)bI>4zDCWaL~in#uE>?7~|i8mbtDKITL$mX%WX#Am!Hr=<8972Z3Kgf0~)>+Aw2L%7Wr%E!k? z{jEg5Fh9TBtlIf&EMVgI&#;iM$m^di5g}WLVb#IO@B>Y_^+Sw-Q>qaya<9p#%Smfe zRTT&8Hz1<6t#3-V4yW2P9Mw>CORZknV<|Yv@qATUuI>8bZ3eOAsUk1VjXBX`}@K>Fzu?pYLyw31lFAQVB$Aptj9sDp^d_q>qD zBrg!bhy50y{qgl^dSXILSC>UGl_(rJ?_AfRQ*G2Ds`x2Foe`{`J#DA<%yN zvCB^$M2U6#eS2#wjffvj^s!kL69mbkfRU?Auy=U4#OnK|`xreh;pF6GeY&}X+6V`^ zq;t4(*VNP$-=ojuR+g5dwAAag$k@v3hys(rZ3f`0*k@sp$Wyj#!(}3;z{`eK$NG6+ z%bFzU6C*-O+~iCJ+~d(-(%Uu7^+~)Z;)i^XA1&zZ<)@~xP_jF?-MO44$7`hB=-Z(5 z=#q8?in{j=FCh__GNWqmkRqYuQa=4yv3Sj+NO|Z9+1W!rG8})AgY<$JjZh37K^s;N zo&+FTfJX}#5_1r?##U7Lkw&u)5MQNXZ$u861wWm#YXB#y;1^YpDiR#?8Sje?8%4AU zPjL{iDW$NQW`gJH>v|h_1ve@L5;)|Nqwi$Ik|?0u0vO?Dh{gjk;LYw&bc20!c@f!Jz|WMglOUumW`skatQF zB^Ka=1cn!&d1GT^T1$iwYRw?VU>OZPJpt#%uczD7OYY+;(&1PShCPb`*N(Zri2iQk zyMfx3`1Q=MjaQ1MppKeETAaQ$hYYcJT2NwJ`vX9O#NGI?H=wOuKFqx_$^-J)B3?ee zI+d#-0rFU2CFTbTi@L8p2+|XPYszBO%l6*b#lZX9zdt|JeEbOX;c5c|1HkXZEp?zf zFcJ7l0^J@q3>%3@g}N57uEF_BeH~=)MHI#JgK}RTP!7Kg1RAKD6{7NXnvp`uaTHt( z5C;Y4uWthUjHZxdb=2e*qckE3xj1pF6$xTNhz*PL1|BQ@w&NupoH!aXiVTxY$dF!E z0B;`3@DZ9L0TC1R3-F&bHVSGV1I1AsE_jQ{y<6{n`eTSZ0oa~(g^$pb9vPy63QlU& zMKmle5)y=u3`bF*!!pNt*gh0&kGom*zwHgc_Ra47|J$AoZ2!uP|9{(Kf$g)2WB%Jd z=@HnTf$+cW^B6$5v>>VVf4{K!-;3~vcVtlh?-v69d-3n#9Xa{``^BgKc3`9se5+0` zzWuiY8*s2|O=kZ)03T9p*vNv*|28S5vCAM-0#%b(xU$b6s0>8H`pbn>XnH0eunJ1PQ1FlzJi1DaIf3~$tPGEEw8G3M>lMFCIwNcS!t-a zeoHTc0tiq?n3|db!B55KClVj%$6@ixT~}8=rQ;-@#D#@3b86mN<6{&FeTK+spBn5^?#dSyH&03z zFfs?T$B3HdONf%qmOk4hc(!Ql-?}pvTz_jAA|v_XLrhFeMTN#fKIwap5(%_~#%C`k z9SNyn%8kaF{^_u8IjShu=q=~Z`bCsb1fqgcaNlnYZ+T$dtt0!@*=al96D6tOgHH_d ze0(u>*fKa4)F2f!s!3H*E>c|d|7*{~HV3V_{Z}XUHevRW3>-I9r|GKezIx89;&eAr z@VrguG`#itl`u6%#bc<%X((HXByYr4Jcv_0Vj&wkK>TpY@y;pWrIeLk$E$QPQ5pQq zj};4MCxt$9SlZUN7pGf9_r?1g0iM63sFAhoe@_@y$bq|N`7jn_LD2^RrE!O7LFDU{x~N$c?jw*g<}+pxz*Aby znS)thO`V1tIbsO;Un`Iul&Ra<-ep~l!mAn#tMDJ zwSRK^8Am~j^pzMx14Y6_^<(ilo&C5MAIU;xwL{6+8^n03^H>e1yVFQ*o#(`dg#&JU zPBFaBo1KDa*|g*DeEYq)Y15gBgg zhv62_tQ3^)k1Pc<-^R2OBo$Knw62$)s(Gm`Oux_0ZPJ=}8|YzpnCGX@i8*Bx;Z77j zY%Tifa-OPV&P)0JWTG2^cuH7SQzH&=LMa(Iem9W04&{pH?!YvD{L2j#oAgS@_g(H)h%D=qNKcH|DBvo^EYY zG*@8H-eCSzYp1LdElFjC7@-OTp8oolCmIp(|1nz>kZn@?)mkaN3q9|3DfK6w%{WAzSmZ@S)E7Yn@EI_ z0oyROcbL30>O^$O`V)k8O&+5hVa!r6)AgkCezj0+ zq*;|f@O)r{|1-S( zl@aUf%lIx0l=LV+4-3FX7M-@rtI~DcYS-dFt`GDY}gO4r+MOhkfYaTD+Z=kBxXIJ-3Fm{&r&L=tt5J()Uq1#>Q%{WMf9r zgTUo|)97q}iHfVqq6f8zq}fkzc^-7Lmv@|7$SJy4zCqkUS5C+*RZR46`tkJa^Iu=s z65@)^jX`U81+?CwGA83RD1|D47t7(aa#re}??AOTRG5?owdIF%;I$zkC65glnI89~ zn^q=Sturn8i~V%q!c=MuE4d z7mAU%*4;cPpRyjfGg*VIgy5pT@{tj22G=&&&dX8aww;9m>#bW z1=BD;#Mc**_?MtzKnz;tbF6G^uR(WPQWA*?Z%+CU^f&}T2Jt7VPB8eU0ctz<|C0WX zeb4vWz^V%6D3lKII_e`>mri;yt6(SNGnEWwW@it$-fb%9`Mo|?thD5_%~m~MbbAvp zv?gusIM*0+^o_4PPyQdEK{{!H0O0+C`N6_rFa@839`aoe#DeY<{y1so$%pakOGCT! z+|%C3&qU=E47^stS*kjMbqHhyq0zRDqzXsPP%io9jh?rC9e};3!J|>)$umKM zyn(=#(NA8ylwmsgX?poHbq{^9jOKOH`}d~>8FOzIEzrMp_uMqHW^qK5@w0Ei5_yC_ zef{d!jUXth@e6x|vpi|_edd93PaI-<4e9~wr3jZZG5xuP6jLDPaL+ySk!NO2i2L`+ z)*#~TR03mTk4k=%hAuZcm>)_=~%{whSvvO&mSP*$Q}JX5v%8a zrLKfX(DQU5@SW2*=wjgO&ZbO18vpA4;7^_%`xufpKZ%AHlB?~nX8lA>QCBG;w!gqF zVqj_a^eLcoom)0bwEiInxuX^Q-mZ=K{=Db?t`Kdd`E=yj%ZxU<9M=`00T7$M6{x7j zB;$)#`vv&wabQ{({5P!?8(3D?IWaaJ9l5#rre(}|JzII88%-=26a(0s`F&}!@Cv==7AF&GkUiZswp`@sYo6rY5E|1>T(D8x0we>P+lWE@7v|rh|QCg9_AJnKz7j#<( z)`p$FY3KV(54;T84^#b>CV*<;e!_2kQd7|IW%A0ixI`tgO?-T9+>_FI!L{CFIK>+G$0+_XGON+kN58H>Mdt-t^((bxc6%&8MZ_@b9~!}t`CfV z4F#Ouh;9$hpZ2HglT{jB*N5UNpNeiqgE3Wr+_HMjgZGK~7IgNS9AC;O zOt1oP{!(T77okdMw1LadMSn%d`J4kF|DwKUGN&?byA9Kx*3}?m00?Gri}vNh5?RU3 zW~HyOv){V&?o0obw{22oPLUoJ)HB!?BrSe+QF0e`+Vhv8SB3nf0ZmPdf46Z;9&N6G z^ZVeqp3@<2J61GVsXHF9XO^_k`v6l2Klr$S+w^CAxZnElNqK3`QBcaavHQ0=Bl-L~I5>8WOqq%zL8wm;Bs- z^5v#vu+Ws&Ix<(|)hma+9Lo{PfWMt~DlHeluJF?lXC-Z@J`TJZ8LdRNog6}q^@G^g zs!R~{K%oaTp`s~tmdOa)MY4Z7RPI(!_7XAVUM0}ViLPmd{EK&NaMmhA%rR|nZ$JCV zU1#}A4b9KZMTeD0bYb;&eJj!0Kt|GX9Gh3Ne)V@TfBVvXqv;H%mG5_q(k0Pdg6zHf zudOGg{OiJPcO73?pCsP9?`7kuj^>=+Onh(VC+toz*{FPV!-5cz=UP=`|IQ>5&?~S$ z@%;s^pl|1;DGs!VoLvddjVI?s`{TolhA*3J+U-rNcqfD$BlP<9Ee&8{9M5vX4%}Jo zUMfBm?G4PG+brP3an6Sb4gbtPr=<3I_KKNib0-RJ0HqdnuYm1298(Aeu$FhHO1=NQ zBJcv<9P^SMLM;ov@Rcs^;rsFf5`<0ttAYuBx%T6utWMa}yUSWa-+RApGVw1be@Lb= z&`Fypy?oNxuSCLu|G+i~@`SMqrrTkP<>aQJ9n8NmL8LuNkY1GwsgdEVk^5_qTL|%US%0-shpy%ZCO<5ws zhJKo6Nw`9yUQgfE2&Oqn$q7c6L&ly&nAO?X@IT{BF4}$>V{4&;f`+fRqZ7GVg($a& zK;lrqv3&PGtcsM9)Ag<3HK!K>>3Z)ZuuzVmCF;2_K%gYY)1miWWfe_roToa z*+T{R2^u)`;ifCn*A?G*q80TC!|^>lPHb~Ulwx;^>*dWeU(ecyXJ#3J>>fgg>s_zF zQBfk;_T5%jY|g8{FtY$NRvhTl~dbZVq*K0UG05 z*;~O)nfrdtTh@jZrW}A#mIBOl8vlnT(dKEdMi_zC!l7+-*O^*s{|Eod`fVn>C8}ic zZ9Bs^)hbkP3YjQVE9(?~yMJk(nWRmjK!XG=V##oJ$`{akXYV+I_95^LY&`{&&0B05TEGHOajcf5$I}(JN0{ma%OggI>)&e>*JjMy14`23` zN_7>K(Mv0yQ02PimK{HR>Q%-3_QiGk%Q;Q|CGa(3N#NrR#-v(_3e38`El+kIEiJph z4!uUdf8BQMZ7+4>MOAa|7ic~iNOjs+`=+!YY5S8=#>?iU>Jm%<&3xM!f6rZ!``61$ zNK9lmqy2CvH74VaTf>vs(xs1N;&cp4qs4OA36uZsbaY4QFc$gD!}ZcEFQ=VX?~m66 zQwe7^{Fl-M%|K|K! z)#@=2nU4K+9>ZU5jOTTHc7v+wvVMI1i~=9!aRd*@CSsB6ozD-|0_si){6yrmB>#K| zUhQ(H-7Vh^*;2Izi_H*66#q#x-0lL_n@gx<%PB}3loIHG@cr%Ef&|doh|haohzl6d z+>$FoByb!b?dq^!8e#t)UrT>qL4T!Os26i$$|$=G!rQ?Lds|xt`CzRb&=mm{Hh5CG zW@*XQ-NWHOa`btoM^qS&eemTGM4rKf>HoAu7G#Ao-~MlC2FT6oEYvkLxBxN1=S)Kf zo;um!X$o{%-ZxB|B~@T1#Ml$KONK0tg?`E79Rn7fsxNm}+cVAh-oU*2kt)C^ANeMK z0XSL8cfi>}JvdxfdxMnJZ{8lSAKqZ&97%hT9*M32N_g-Z6wiiiHG%;{8~rL;%WPef zkt6W#Ca${|ty6=X*;vnJ>j*wUaHLM*2hs0Vy z1A)Nl1^`A64*#|ca|)adQ4259_=hy)j&2?Xa{w^pam25qW8g^LndKm{g0#Dd*lD|P9yy?-K1oI+*e`<@ww%gABw9c) zOi09%;#u82J&Dh|EEQ6|8KCayx}`lj4}A_SRC}UHE-xy(s4n#=IDk#7ejC?kW%kN%8M(jt;{sK>CV1zE{ z|C3lel#Z#g0)R`eUWmZcPk+R3=@?I31d8wC=L*pLm&*sZPq-zse;_@dB+xc&t$|;4 z6Hz>&B)ffOX^8nmBRbH)S5Z%c=I&dW>D4^Ge@0K2baWgjJyxSsNL?Ix~Nx-k|-NAMoQ}uKQLIEUQ&U>>>#5x90 zI>zoYteK-3yPR!|JP>VM_en4Mn+3U}K@lTy@ROT@_h9&Mf7DV1ojk!@i_;3U9Vsx! z<;h#GA6t`^Gc^5}3mJmGNzW1#JOzF39_t@fiRh;vuy|%KYOMJxiAg#m?c*oH-bwd2 zj7f)^4wi4llm6PyZK!XV92P=%b}bLDT$uaN`1R&Z;@0K?gt{*TqiSXf-w**ZMawgl zH*XGW0&lm$JVQRN#CE2yCY`}-hK&b}tzW-pwP_XhK6vsr<~;vf1aWj)Xi470wgrs* zoRm?#MF>{!wk7(LMQS29pBS^9Zx4%)U>$$-M{;qtJa#S{o4fm(fwgr!cYa{0hQfn8r*FU zlQHPI8UJ)=n$&MTjHcOt44k$ZFyel5Y%@TrrIWbIZCz06YUTNmN&RQD_#8=vw}ClE zc3YGSvy^Z+po5M3fYkC9VCYZfQ~Ireh@92$Y)8L6my%VUUcWYtAl?n6(VxEo_*;7Y zVPs7YnG6IMb&-iaN-F%~I8*7vbastXLsf7^Ejb&fmVm#_!*CV??@+Q`?j_ZCclq6p;r^A%*xBIHhaOc)%6BE-0V*cW*r zL66|dlq+7L;ofwhV}pPMOh^K7j#1-6NaGcvp*{PS(Q3o zyDB(s-Fy1=Dwjh4{reXl)%DzidF}C&9;w%_7l3j79hmPzDd6($YsWUOeHdLwULLi# zct<}#GcN{U5Qz$T|E`RlI9>sJtvia;e|NW9*LO9qO3D0(oJ`g8Cw6o&%#CF2Y~npu zOmbl!_|}GK1bXd)blYShpD9F5=F3gKQkuWhBZRNS3n#nQ34$V;==nUJ$P3yRGQ(Zq zi_*-N1P;;>W@CL#N{MpoW8u8srKD|&*0W22&CDOf>PDAlX_Gh}EFR#-_F$e4FAvX; zG-@j0M6Cz02e1M_@g6Hu5Wn4212)WPcdqUrWd^rBJ${RjS|Bo!qw=qxV@C&SKeSnQ zs=;^XaZ>gQIt(e|_3}`EpORx|F;_Z5uQ`y$Mv;~R^EK4q@LjqPAWeA#n+KN$NNwV0 zIkU`oTEvwg7NpqSgT>n_JAhUVjSA2Ae8ENG1B?~)y}!SI@}&9a0DCLzcQ~Ix@{jfQ z>pi99)dRTH!vHEpE(nC<5qyyP#L5_VHTDCYhXRoT%&B>ekZ|$K8*_R7{57=i-65*F z9}Nh&TrDlv!k&?#jI&0uFYSlg5?BvsJ&DC$rU0xS2mo4h!pr7ex}LFq0$s*9b0;Lo z!V?)z%@LVpze?AyQ@-_6KgAu}*<;w70l+%rehunn59KzAEuAVoPOCv;u_va$Xu`n< za8|b<14oAD3cN7`LCj9^U!W9D(@+28J6->9Hao9pTt@yBCN+UZqTK0HHa3`!@VlZr zWBIS}>fc}!5hHhLD+t6^V5G;a7EJB5GxHOp3f0WcrVN339~MsC3$9Om8RvnQ*&J-~ z6*BhlpVa*?T{flv^B{@8PpkX|25~+J&yx}yc*Tr^zrSod!R2NLxw$w94kGawT$f7c ziOv9-+^=cmmMgd{J*_tfc9ylXXq0+LeKz&X&z_|2Y!Xx}vP(4JV zBtEReTR%kspDB;=X~hYu%%MY~YxU;Jq)-*OsGe%vgb4KBf!JpO*wvtR8NF(8FTdOX zYj}tvf1<>BrY^KT+&$uBQRkJCV3BFy-El6SK))4`DOq^cT?WoQL+N@+Dy*2Y{h)(M z`D`-a^XWEY+075s$rreW=rU0{u=LjWihYfttc! zC-boT$B((Khra?#4nSgeajW5gs2~T}?dR?+fZ_^2A0Jv7PKV;RyT>yTeg!5Q&?jd= zL~a~#xdvj5BioE55@vEPmyX+AXY`96^Wx5y8aymf^*RV8i)0B+kAQVLDHlS4K+OBy zRF15N2XME<-C)mDwV<1@rh}uKsGgu_Yqjh_N{;p>S`s-P5`$i*F^SnIDzeRWo@n zVAg~5pCQ-shGyo_5*`?SlCt&ngw-dAmU~3l#`(Nv?Yli508dE~W~!=K80y`s3AK-> zq0}+?23=H)Z~tp&NyC%qBBxjBNTOV8G`fwF_2Ya75%LX8lQT$ph6=xk(6rL^yG!=j zt6A_9%z5_`c8s`3N)`%9@6oC0P3VJ_=|y3j{QT!YzK3t)=%`{+cO@*S;==S@%}AI* zNr9pB6;)^#rmiQ6OWP^#t8ON!$B%21l#p-v4_*Aw@^ z8j->}M_}z?0u9I;a;QOeNV+l=6zVdN_k%dF%pt3(?urWL=vJh3%-g%SHB6c^Rk)}@ zae@Hgdo+apjP%Df9ONbCaQTTF7{mwTB(v05j7ndcH+T!S)7~+sWr{(_jJl~b>r?;a zi73W%N|7`JlqvsN2at+^k{IUCJnCK3#q2M%{GG)5<1k1P z@JXslBgC0BxkpDvBw8Zgcu~igy7qqk!U=?Je=mj-$?bwiDm>3bAU^2njEG=PHCh&y zsM*Jj?&J;lMe+50S%0u^c4;APL@@X)rh%d1kgI%$i_g<&XR(#Hu={GbhQBj}E*z5p z)|ob~rfx22&`WQtUfC(6g<3e7S4bD5Q<>b(Mu=g7d*T8f59N8kg8EE>8@B|x4C>kud*k}@0C*83Jv#M|Bu)`UIy)j7`BBZZQkeNCaxR`K!{sDlbiqpvm*31A>&vW=NiOZSl~OSHF#RsMl=h6BkOXF%0G5M-Z8CIu~>M zKf^?ZHz9B&c{0Eg1~Jx`f8WnM*@wt81ug-Q1}RSc;m`7MgbA>Ve3p|@HIeU$2T;th z#{fH|W-W@iuTl8DKnVtgto*Vc{qS@Q<>Bu<78GI{WK*&{nwygzhuLQvoJbqXCSY>I zA84=8{O*LcaoW!e*2y(c;6&evz8M&KZX3PIW~E!L78Pi93^~EOg*x&meN_`&B_5I70 zjP_XjtGS<8pO*ae8y8l@<1g)RCn_tcZB3Dh+RSFvsCfi1x z#_urG+vpf1QA%eAiJmhkJ>8ySsx5Kqz3s=Tf-lXM%hV-v#GP9@a)ZU*|EHD)> zE#3*d=-nens(j-D@HdFfL3@xIXFEBYECq`{$sui~tp-PpUPYCW4_5t)sQ}!!j$RI3 z0Ye_VrNJ3r-zG~tzOGjG54|sF_9$cs^9q%&4TzT&+K8Fl34<;Tp(;KH^;8q2Q;e6e znSRx#H3h6b@~_ar3ed0gbT6e^9JvZ?@~l6%uzvcPWfxN>)s->KAo&#&+kwHqBlO$)AL?m#IppJ!HWtBc`k(e6Dv7H}VeKp4tGzLdVet1v}pT6wv> zKpL@qCZoH%aT7>onHa^=h*qF0$deXUM`(x9tgSWV)|34D+N*H!41M*`w9cIhAeWf&3^5W07h%VRhfwMXzK(0=9D zoN&&};@cgIeg|rLhS5-f9JL4Y3fvh$26pp<d^%Qzb7e68< z+VWEM@dnGh(KD&XVL% zEuxq%Pt&zm)bb;mRW9TZrq8%{#}5*hga`HmPKP%>+!wz6dsn?O``)uQFYES>hruw8 zl3qtn$^R&b=;2$?Wvv=%9veAYk*eK_&pGkm&Y-%mSArHZCBDUlCrH5fEh@%8?I;d` z@y_8^Y+6T3>5lw6`#vtO=iG#$ReCo3OCL>@DjYE+@X?8!V59rfdtnw_`ddPeAc~OF zJJ$;e+akA&9lX(rnrZ&~fgT+gC4`p=I{rMJkPCZgl$6kQqbRibxqox0|HnvQV|)Gf zcD7{C+{2;YTuFWF%eIqa}O+cT+ zv!J~@Z1dE|IVPnq8s@RcV9EOY*s(_mqc`8ei?m+7Le}YcXRO0X@bVyYH&W}c<)YAF zI}g9X7c3?g+)3dO=mh#mN*_2$ZYMFeWq= zOnpn-m4EJP!}E--UR^_~&yG%>NY}|V`{OqmdaSzntHN7iV=|F11l{V4KOW95rlCy7 zeqKbp_f=rK`%dU{wOOVD3)=MwmQuSg5}EN__SKPLol{m9Re&` zTihtBBu&nJ*ag2Ac2`8_!EQZ$zWx~xmRt)~mG{0$>PM)73UpnOl%DisFi~iJ-_gB3 z{W})oOq#X;TB>U`kt5I2rGKqfR-7-temd@sArNH5Pz(wegoy=bDAO0hy)}_Is%qV8 z`_`Se4@x2krAw|zWZZ7hKG$I#!|zpVNfMaKiGLb=7H23ZPu}-xZ>ZtVy<$ zD!=+Gdy6q=73b%s7l*4Qv0Gf0i<_1?q(6rT>TwGMybt2~B_Es8Y22gn*ySJj6)!U3uYAKuWG}}R z>5#}oyajZZUDD94=y0D5vH~Dm9>@4jAa{K(2HO9IC=5r7##MQ&Vm{}ih?3)KT)G)I z%9NA9Sb&%i`TYR;VhMuPxILdkH~runq;u{OW;6^Ely2SVmB5H#b;=4x^eVq0QpTE$ zlTjs(P(IROGojd0k$%^JJu6UHJwqTmvB#GsW$EyG(Cn76BRtjaUBX`#{K|^@_kg#C zKuU$n7q4@NYQOZab}H{9(wgp1q>`yDd81Q>2J#nqSg|wnHv(Pn`6(5?)(tpXO+0$C zJ@|(M51lB74VHt_P+E#ERtABrl(X$JK$++VJ|r{^J!LB33AQ8UvTQy=B){t=UyIvh zHYpC(VU`ycV=Bw_wzPJ)*Zh#_`P)LXU-0xfv5j}mJ231mZK4Yn%?sJxtAfbcfNGZ(7wLAsdeW&Ql0%2@C+yXnVBudvjm*VFSt0>nYL*L zwu^mXS|R2jLjOI8w`3Ko7HU6^%O+Irg{fSdE3nuhf8i-$FbXJ59 z==t27(k)nfxBatfv?-dAR$iL^E}@1ni!0=}EaMy&%>UjcvcVT5DjVjQ2OKR�MV7 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 literal 0 HcmV?d00001 diff --git a/samples/web-app-cosmosdb-nosql-api/dotnet/images/nosql-api-data-explorer.png b/samples/web-app-cosmosdb-nosql-api/dotnet/images/nosql-api-data-explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..49369f4e8f1414f113e445ded97238bfe561b148 GIT binary patch literal 99038 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 z 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

iA-uTYd~k=e7F! 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 z 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 literal 0 HcmV?d00001 diff --git a/samples/web-app-sql-database/dotnet/images/connect.png b/samples/web-app-sql-database/dotnet/images/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..351f99edb7817ace21289e70ff6d3910b465b264 GIT binary patch literal 21415 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 vca8e6`^}tw=8rQ3>GI<~ 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 literal 0 HcmV?d00001 diff --git a/samples/web-app-sql-database/dotnet/images/studio.png b/samples/web-app-sql-database/dotnet/images/studio.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8227c8df9c66aa502d465d765265fdf2634937 GIT binary patch literal 93215 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 G@BRxt{$IEN literal 0 HcmV?d00001 diff --git a/samples/web-app-sql-database/dotnet/images/vacation-planner.png b/samples/web-app-sql-database/dotnet/images/vacation-planner.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c515161863487cdc0705e2a8e8c9c4a2bd60b1 GIT binary patch literal 85690 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 Date: Mon, 7 Sep 2026 17:07:52 +0200 Subject: [PATCH 03/13] Add the .NET 10 port of the SQL Database web app sample; describe every sample in the root README The Vacation Planner reads its SQL connection string from the Key Vault secret (falling back to SQL_* variables or a Microsoft Entra token), serves HTTPS on port 8443 with the Key Vault certificate, and exposes /update/{id} and /api/certificate like the Python sample; get-web-app-url.sh now fails when the 8443 endpoint or its certificate cannot be retrieved instead of comparing two empty thumbprints. InvariantGlobalization is dropped from the template because Microsoft.Data.SqlClient cannot open connections in invariant mode. The root README outline gains an introduction, a longer description per sample, the implementation language in parentheses, and separate Python and .NET links for the web-app samples. Co-Authored-By: Claude Fable 5.1 --- README.md | 42 +- .../dotnet/src/VacationPlanner.csproj | 1 - .../dotnet/src/VacationPlanner.csproj | 1 - samples/web-app-sql-database/dotnet/README.md | 136 +++++ .../dotnet/bicep/README.md | 145 +++++ .../dotnet/bicep/deploy.sh | 319 +++++++++++ .../dotnet/bicep/main.bicep | 504 ++++++++++++++++++ .../dotnet/bicep/main.bicepparam | 7 + .../dotnet/images/architecture.png | Bin 0 -> 88157 bytes .../dotnet/images/connect.png | Bin 0 -> 21415 bytes .../dotnet/images/studio.png | Bin 0 -> 93215 bytes .../dotnet/images/vacation-planner.png | Bin 0 -> 85690 bytes .../dotnet/scripts/README.md | 144 +++++ .../dotnet/scripts/deploy.sh | 481 +++++++++++++++++ .../dotnet/scripts/get-web-app-url.sh | 241 +++++++++ .../dotnet/scripts/validate.sh | 59 ++ .../dotnet/src/Models/Activity.cs | 4 + .../dotnet/src/Pages/Delete.cshtml | 2 + .../dotnet/src/Pages/Delete.cshtml.cs | 22 + .../dotnet/src/Pages/Index.cshtml | 265 +++++++++ .../dotnet/src/Pages/Index.cshtml.cs | 46 ++ .../dotnet/src/Pages/Update.cshtml | 2 + .../dotnet/src/Pages/Update.cshtml.cs | 17 + .../dotnet/src/Pages/_ViewImports.cshtml | 4 + .../dotnet/src/Program.cs | 68 +++ .../dotnet/src/Services/IActivityStore.cs | 21 + .../src/Services/KeyVaultCertificates.cs | 53 ++ .../dotnet/src/Services/SqlActivityStore.cs | 123 +++++ .../dotnet/src/Services/SqlOptions.cs | 74 +++ .../dotnet/src/Services/StoreInitializer.cs | 33 ++ .../dotnet/src/VacationPlanner.csproj | 14 + .../dotnet/src/appsettings.json | 9 + .../dotnet/src/wwwroot/favicon.ico | Bin 0 -> 36791 bytes .../dotnet/src/wwwroot/style.css | 341 ++++++++++++ .../dotnet/terraform/README.md | 168 ++++++ .../dotnet/terraform/deploy.sh | 241 +++++++++ .../dotnet/terraform/main.tf | 204 +++++++ .../dotnet/terraform/outputs.tf | 35 ++ .../dotnet/terraform/providers.tf | 26 + .../dotnet/terraform/terraform.tfvars | 2 + .../dotnet/terraform/variables.tf | 359 +++++++++++++ .../dotnet/visio/architecture.vsdx | Bin 0 -> 211016 bytes 42 files changed, 4191 insertions(+), 22 deletions(-) create mode 100644 samples/web-app-sql-database/dotnet/README.md create mode 100644 samples/web-app-sql-database/dotnet/bicep/README.md create mode 100755 samples/web-app-sql-database/dotnet/bicep/deploy.sh create mode 100644 samples/web-app-sql-database/dotnet/bicep/main.bicep create mode 100644 samples/web-app-sql-database/dotnet/bicep/main.bicepparam create mode 100644 samples/web-app-sql-database/dotnet/images/architecture.png create mode 100644 samples/web-app-sql-database/dotnet/images/connect.png create mode 100644 samples/web-app-sql-database/dotnet/images/studio.png create mode 100644 samples/web-app-sql-database/dotnet/images/vacation-planner.png create mode 100644 samples/web-app-sql-database/dotnet/scripts/README.md create mode 100755 samples/web-app-sql-database/dotnet/scripts/deploy.sh create mode 100755 samples/web-app-sql-database/dotnet/scripts/get-web-app-url.sh create mode 100755 samples/web-app-sql-database/dotnet/scripts/validate.sh create mode 100644 samples/web-app-sql-database/dotnet/src/Models/Activity.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/Delete.cshtml.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/Index.cshtml.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/Update.cshtml.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Pages/_ViewImports.cshtml create mode 100644 samples/web-app-sql-database/dotnet/src/Program.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Services/IActivityStore.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Services/KeyVaultCertificates.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Services/SqlActivityStore.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Services/SqlOptions.cs create mode 100644 samples/web-app-sql-database/dotnet/src/Services/StoreInitializer.cs create mode 100644 samples/web-app-sql-database/dotnet/src/VacationPlanner.csproj create mode 100644 samples/web-app-sql-database/dotnet/src/appsettings.json create mode 100644 samples/web-app-sql-database/dotnet/src/wwwroot/favicon.ico create mode 100644 samples/web-app-sql-database/dotnet/src/wwwroot/style.css create mode 100644 samples/web-app-sql-database/dotnet/terraform/README.md create mode 100755 samples/web-app-sql-database/dotnet/terraform/deploy.sh create mode 100644 samples/web-app-sql-database/dotnet/terraform/main.tf create mode 100644 samples/web-app-sql-database/dotnet/terraform/outputs.tf create mode 100644 samples/web-app-sql-database/dotnet/terraform/providers.tf create mode 100644 samples/web-app-sql-database/dotnet/terraform/terraform.tfvars create mode 100644 samples/web-app-sql-database/dotnet/terraform/variables.tf create mode 100644 samples/web-app-sql-database/dotnet/visio/architecture.vsdx diff --git a/README.md b/README.md index 522602a..a82c529 100644 --- a/README.md +++ b/README.md @@ -27,26 +27,28 @@ This repository contains comprehensive sample projects demonstrating how to deve ## Outline -| Sample Name | Description | -|-------------|-------------| -| [Function App and Storage](./samples/function-app-storage-http/dotnet/README.md) | Azure Functions App using Blob, Queue, and Table Storage | -| [Function App and Front Door](./samples/function-app-front-door/python/README.md) | Azure Functions App exposed via Front Door | -| [Function App and Managed Identities](./samples/function-app-managed-identity/python/README.md) | Azure Function App using Managed Identities | -| [Function App and Service Bus](./samples/function-app-service-bus/dotnet/README.md) | Azure Function App using Service Bus | -| [Web App and CosmosDB for MongoDB API ](./samples/web-app-cosmosdb-mongodb-api/python/README.md) ([.NET](./samples/web-app-cosmosdb-mongodb-api/dotnet/README.md)) | Azure Web App using CosmosDB for MongoDB API | -| [Web App and CosmosDB for NoSQL API ](./samples/web-app-cosmosdb-nosql-api/python/README.md) ([.NET](./samples/web-app-cosmosdb-nosql-api/dotnet/README.md)) | Azure Web App using CosmosDB for NoSQL API | -| [Web App and Managed Identities](./samples/web-app-managed-identity/python/README.md) ([.NET](./samples/web-app-managed-identity/dotnet/README.md)) | Azure Web App using Managed Identities | -| [Web App and SQL Database ](./samples/web-app-sql-database/python/README.md) ([.NET](./samples/web-app-sql-database/dotnet/README.md)) | Azure Web App using SQL Database | -| [Web App and PostgreSQL Database ](./samples/web-app-postgresql-flexible-server/python/README.md) ([.NET](./samples/web-app-postgresql-flexible-server/dotnet/README.md)) | Azure Web App using PostgreSQL Database | -| [Web App and MySQL Database ](./samples/web-app-mysql-flexible-server/python/README.md) ([.NET](./samples/web-app-mysql-flexible-server/dotnet/README.md)) | Azure Web App using MySQL Database | -| [Web App with Custom Docker Image](./samples/web-app-custom-image/python/README.md) ([.NET](./samples/web-app-custom-image/dotnet/README.md)) | Azure Web App running a custom Docker image | -| [ACI and Blob Storage](./samples/aci-blob-storage/python/README.md) | Azure Container Instances with ACR, Key Vault, and Blob Storage | -| [Container Apps and Blob Storage](./samples/container-apps-blob-storage/python/README.md) | Azure Container Apps running a guestbook app from ACR with Blob Storage, secrets, revisions, replicas and scale rules | -| [Azure Service Bus with Spring Boot](./samples/servicebus/java/README.md) | Azure Service Bus used by a Spring Boot application | -| [URL Shortener](./samples/url-shortener/python/README.md) | URL shortener composing Web App, Functions, Storage, Key Vault, Service Bus and PostgreSQL | -| [Event Hubs Fraud Detection Pipeline](./samples/eventhubs/python/README.md) | Real-time payment stream processing with Event Hubs (AMQP, Kafka and HTTPS ingestion, Capture, Schema Registry), an Event Hubs-triggered Function App, Key Vault, Storage and a Web App dashboard | -| [Event Hubs Cold-Path Automation](./samples/eventhubs-eventgrid/python/README.md) | Event Hubs Capture raises `Microsoft.EventHub.CaptureFileCreated` to an Event Grid system topic, a subscription delivers it into a second event hub, and an Event Hubs-triggered Function App decodes each Avro archive and writes per-device summaries | - +Each sample is a self-contained project with its own README, Azure CLI scripts and, where applicable, Bicep and Terraform deployments that target both real Azure and the LocalStack for Azure emulator. The language of each implementation is shown in parentheses; the web-app samples share the same *Vacation Planner* application and come in a Python (Flask) and a .NET 10 (ASP.NET Core Razor Pages) version. + +| Sample | Description | +|--------|-------------| +| [Function App and Storage (.NET)](./samples/function-app-storage-http/dotnet/README.md) | A gaming scoreboard built on Azure Functions (isolated worker): HTTP triggers record player scores in Table Storage, publish messages to Queue Storage and write game-session summaries to Blob Storage, all against the emulated storage account. | +| [Function App and Front Door (Python)](./samples/function-app-front-door/python/README.md) | A minimal Python Function App answering `/{name}`, published behind an Azure Front Door (Standard) profile so requests reach the function through the Front Door endpoint; deployable to real Azure or to the emulator. | +| [Function App and Managed Identities (Python)](./samples/function-app-managed-identity/python/README.md) | A serverless text processor: an Azure Functions app reads text blobs from an `input` container, converts them to uppercase and writes the result to an `output` container, authenticating to the storage account with a managed identity instead of keys. | +| [Function App and Service Bus (.NET)](./samples/function-app-service-bus/dotnet/README.md) | An Azure Functions app on an App Service plan that exchanges messages through Service Bus queues: an HTTP trigger sends greetings and a queue trigger consumes them, connecting with either a connection string or a managed identity. | +| Web App and CosmosDB for MongoDB API ([Python](./samples/web-app-cosmosdb-mongodb-api/python/README.md), [.NET](./samples/web-app-cosmosdb-mongodb-api/dotnet/README.md)) | The *Vacation Planner* single-page web app on an Azure Web App with regional VNet integration, storing activities in the `activities` collection of an Azure Cosmos DB for MongoDB account reached through a private endpoint. | +| Web App and CosmosDB for NoSQL API ([Python](./samples/web-app-cosmosdb-nosql-api/python/README.md), [.NET](./samples/web-app-cosmosdb-nosql-api/dotnet/README.md)) | The *Vacation Planner* single-page web app on an Azure Web App, storing activities as JSON items in the `activities` container of an Azure Cosmos DB for NoSQL database partitioned by user; deployed with Azure CLI scripts. | +| Web App and Managed Identities ([Python](./samples/web-app-managed-identity/python/README.md), [.NET](./samples/web-app-managed-identity/dotnet/README.md)) | The *Vacation Planner* single-page web app on an Azure Web App, storing each activity as a blob in an `activities` container and accessing Blob Storage through a user-assigned or system-assigned managed identity rather than connection strings. | +| Web App and SQL Database ([Python](./samples/web-app-sql-database/python/README.md), [.NET](./samples/web-app-sql-database/dotnet/README.md)) | The *Vacation Planner* single-page web app on an Azure Web App, storing activities in an Azure SQL Database. The connection string and the HTTPS certificate are read from Azure Key Vault, and an API endpoint verifies the Key Vault certificate. | +| Web App and PostgreSQL Database ([Python](./samples/web-app-postgresql-flexible-server/python/README.md), [.NET](./samples/web-app-postgresql-flexible-server/dotnet/README.md)) | The *Vacation Planner* single-page web app on an Azure Web App, storing activities in an Azure Database for PostgreSQL flexible server injected into a virtual network (delegated subnet and private DNS zone), with the database and application user created by the deploy scripts. | +| Web App and MySQL Database ([Python](./samples/web-app-mysql-flexible-server/python/README.md), [.NET](./samples/web-app-mysql-flexible-server/dotnet/README.md)) | The *Vacation Planner* single-page web app on an Azure Web App, storing activities in an Azure Database for MySQL flexible server injected into a virtual network, using TLS-only connections, with the database and application user created by the deploy scripts. | +| Web App with Custom Docker Image ([Python](./samples/web-app-custom-image/python/README.md), [.NET](./samples/web-app-custom-image/dotnet/README.md)) | A web app that runs a custom container image built locally and pushed to Azure Container Registry; the web app pulls it with a managed identity (AcrPull) through a VNet-integrated network and reports its image and host name on `/api/status`. | +| [ACI and Blob Storage (Python)](./samples/aci-blob-storage/python/README.md) | A containerized Flask web app on Azure Container Instances, with its image in Azure Container Registry, its secrets in Key Vault and its data in Blob Storage. | +| [Container Apps and Blob Storage (Python)](./samples/container-apps-blob-storage/python/README.md) | A guestbook web app on Azure Container Apps pulled from Azure Container Registry that persists entries in Blob Storage and exercises secrets, revisions, replicas and scale rules. | +| [Azure Service Bus with Spring Boot (Java)](./samples/servicebus/java/README.md) | A Java Spring Boot application that sends and receives Service Bus messages through the Spring Cloud Azure Service Bus Stream Binder. | +| [URL Shortener (Python)](./samples/url-shortener/python/README.md) | *Linklet*, a Flask URL shortener on an Azure Web App with an event-driven Azure Functions worker, composing Web App, Functions, Storage, Key Vault, Service Bus and PostgreSQL into a single causal chain. | +| [Event Hubs Fraud Detection Pipeline (Python)](./samples/eventhubs/python/README.md) | A streaming platform in miniature: payments ingested into Event Hubs over AMQP, Kafka and HTTPS, validated against Schema Registry, archived with Capture, scored by an Event Hubs-triggered Function App and shown on a Web App dashboard, with secrets in Key Vault. | +| [Event Hubs Cold-Path Automation (Python)](./samples/eventhubs-eventgrid/python/README.md) | A cold-chain monitoring pipeline in which Event Hubs Capture raises `Microsoft.EventHub.CaptureFileCreated` events to an Event Grid system topic; a subscription delivers them into a second event hub and an Event Hubs-triggered Function App decodes each Avro archive into per-device summaries. | + ## Sample Structure Each sample project is organized by Azure service and includes: diff --git a/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj b/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj index 10cba06..f1ee0c1 100644 --- a/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj +++ b/samples/web-app-custom-image/dotnet/src/VacationPlanner.csproj @@ -4,6 +4,5 @@ enable enable VacationPlanner - true diff --git a/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj b/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj index 9622602..835cd67 100644 --- a/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj +++ b/samples/web-app-managed-identity/dotnet/src/VacationPlanner.csproj @@ -4,7 +4,6 @@ enable enable VacationPlanner - true diff --git a/samples/web-app-sql-database/dotnet/README.md b/samples/web-app-sql-database/dotnet/README.md new file mode 100644 index 0000000..ac6ee2f --- /dev/null +++ b/samples/web-app-sql-database/dotnet/README.md @@ -0,0 +1,136 @@ +# Azure Web App with Azure SQL Database and Azure Key Vault + +This sample demonstrates a ASP.NET Core Razor Pages single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in an `activities` table within the `sampledb` database on an [Azure SQL Database](https://learn.microsoft.com/en-us/azure/azure-sql/database/) instance. The connection string of the SQL database is stored as a secret in [Azure Key Vault](https://learn.microsoft.com/en-us/azure/key-vault/general/overview). The application also retrieves its certificate from Key Vault to serve traffic over HTTPS. + + +## Architecture + +The following diagram illustrates the architecture of the solution: + +![Architecture Diagram](./images/architecture.png) + +- **Azure Web App**: Hosts the ASP.NET Core application +- **Azure App Service Plan**: Provides compute resources for the web app +- **Azure SQL Database**: Stores activity data in a relational table +- **Azure Key Vault**: Stores the database connection string and the certificate used to secure HTTPS traffic + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/) +- [Microsoft.Data.SqlClient](https://learn.microsoft.com/en-us/sql/connect/ado-net/microsoft-ado-net-sql-server) +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep), if you plan to install the sample via Bicep. +- [Terraform](https://developer.hashicorp.com/terraform/downloads), if you plan to install the sample via Terraform. + +## Security Configuration + +The Vacation Planner Web App supports two common approaches for accessing Azure SQL Database securely: + +1. **Using a SQL Database connection string**: Provide a standard SQL connection string using the following environment variables: + +- SQL_SERVER: The SQL server container IP address (e.g. 172.17.0.4). +- SQL_DATABASE: The name of the SQL database (e.g.PlannerDB). +- SQL_USERNAME: The username to connect to the SQL database (e.g. testuser). +- SQL_PASSWORD: The password to connect to the SQL database (e.g. TestP@ssw0rd123). + +2. **Using Microsoft Entra ID service principal credentials**: Specify the service principal credentials in your environment using the following environment variables: + + - [AZURE_CLIENT_ID](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.environmentcredential): The service principal's client ID. + - [AZURE_CLIENT_SECRET](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.environmentcredential): One of the service principal's client secrets. + - [AZURE_TENANT_ID](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.environmentcredential): The Microsoft Entra Tenant ID. + +This flexibility allows the app to run securely in Azure or in emulated environments like [LocalStack for Azure](https://docs.localstack.cloud/azure/). The client code supports both authentication modes using [`ClientSecretCredential`](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.clientsecretcredential) or [`DefaultAzureCredential`](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.defaultazurecredential) from the Azure SDK. + +## Azure Key Vault Integration +The application integrates with Azure Key Vault for managing secrets and certificates: + +Secrets: The SQL connection string is stored as a secret in Key Vault. At runtime, the app retrieves it using the Azure Key Vault Secrets SDK. This is configured via the KEY_VAULT_NAME and SECRET_NAME environment variables. + +Certificates: A self-signed certificate is created in Key Vault during deployment. The app exposes a GET /api/certificate endpoint that retrieves the certificate using the Azure Key Vault Certificates SDK and returns its name, confirming the integration works. This is configured via the KEYVAULT_URI and CERT_NAME environment variables. + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and set it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the image, execute: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator by running: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Deploy the application to LocalStack for Azure using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All deployment methods have been fully tested against Azure and the LocalStack for Azure local emulator. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process involves downloading and building Docker images. This is a one-time operation—subsequent deployments will be significantly faster. Depending on your internet connection and system resources, this initial setup may take several minutes. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the following user interface for adding and removing activities: + +![Architecture Diagram](./images/vacation-planner.png) + +You can use the `call-web-app.sh` Bash script below to call the web app. The script demonstrates three methods for calling web apps: + +1. **Through the LocalStack for Azure emulator**: Call the web app via the emulator using its default host name. The emulator acts as a proxy to the web app. +2. **Via localhost and host port mapped to the container's port**: Use `127.0.0.1` with the host port mapped to the container's port `80`. +3. **Via container IP address**: Use the app container's IP address on port `80`. This technique is only available when accessing the web app from the Docker host machine. +4. **Via the default hostname**: Call the web app via the default hostname `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## SQL Server Tooling + +You can use [SQL Server Management Studio](https://learn.microsoft.com/en-us/ssms/install/install) to explore and manage your SQL databases. When connecting, use SQL Server Authentication and specify `127.0.0.1,port` as the server name in the Connect dialog box, where `port` is the host port mapped to the container's internal SQL Server port `1433`, as shown in the following picture: + +![SQL Server Management Studio](./images/connect.png) + +SQL Server Management Studio allows you to manage database objects such as tables and stored procedures, as well as query data, as shown in the following picture: + +![SQL Server Management Studio](./images/studio.png) + + +Alternatively, you can use the [sqlcmd](https://learn.microsoft.com/en-us/sql/tools/sqlcmd/sqlcmd-utility?view=sql-server-ver17&tabs=go%2Cwindows-support&pivots=cs1-bash) to interact with and administer your SQL databases, as shown in the following table: + +```bash +~$ sqlcmd -S 172.17.0.4 -d PlannerDB -U testuser -P TestP@ssw0rd123 +1> SELECT id, username, SUBSTRING(activity, 1, 20) FROM Activities; +2> GO +id username +------------------------------------ -------------------------------- -------------------- +e444433e-f36b-1410-88e7-0034efb7413b paolo Go to Paris +e644433e-f36b-1410-88e7-0034efb7413b paolo Go to London +e844433e-f36b-1410-88e7-0034efb7413b paolo Go to Mexico + +(3 rows affected) +``` + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure SQL Database Documentation](https://learn.microsoft.com/en-us/azure/azure-sql/database/) +- [Quickstart: Deploy an ASP.NET web app to Azure App Service](https://learn.microsoft.com/en-us/azure/app-service/quickstart-dotnetcore?pivots=development-environment-cli) +- [Microsoft.Data.SqlClient](https://learn.microsoft.com/en-us/sql/connect/ado-net/microsoft-ado-net-sql-server) +- [Azure Identity client library for .NET](https://learn.microsoft.com/en-us/dotnet/api/overview/azure/identity-readme) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-sql-database/dotnet/bicep/README.md b/samples/web-app-sql-database/dotnet/bicep/README.md new file mode 100644 index 0000000..cfa5bc2 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/bicep/README.md @@ -0,0 +1,145 @@ +# Bicep Deployment + +This directory contains the Bicep template and a deployment script for provisioning Azure services in LocalStack for Azure. Refer to the [Azure Web App with Azure SQL Database and Azure Key Vault](../README.md) guide for details about the sample application. + +## Prerequisites + +Before deploying this solution, ensure you have the following tools installed: + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/): Local Azure cloud emulator for development and testing +- [Visual Studio Code](https://code.visualstudio.com/): Code editor installed on one of the [supported platforms](https://code.visualstudio.com/docs/supporting/requirements#_platforms) +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep): VS Code extension for Bicep language support and IntelliSense +- [Docker](https://docs.docker.com/get-docker/): Container runtime required for LocalStack +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli): Azure command-line interface +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/): LocalStack command-line interface (proxies the Azure CLI via `lstk az`) +- [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [jq](https://jqlang.org/): JSON processor for scripting and parsing command outputs + +### Installing lstk CLI + +Deploying to LocalStack requires the `lstk` CLI, which routes Azure CLI commands to the emulator (run `lstk az start-interception` before deploying). Install it using Homebrew: + +```bash +brew install localstack/tap/lstk +``` + +or npm: + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). For more information, see the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +## Architecture Overview + +The [deploy.sh](deploy.sh) script creates the [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli) for all the Azure resources, while the [main.bicep](main.bicep) Bicep module creates the following Azure resources: + +1. [Azure SQL Server](https://learn.microsoft.com/en-us/azure/azure-sql/database/sql-database-paas-overview): Logical server hosting one or more Azure SQL Databases. +2. [Azure SQL Database](https://learn.microsoft.com/en-us/azure/azure-sql/database/): The `PlannerDB` database storing relational vacation activity data. +3. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The compute resource that hosts the web application. +4. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Hosts the ASP.NET Core Razor Pages single-page application (*Vacation Planner*), connected to Azure SQL Database. +5. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): (Optional) Configures automatic deployment from a public GitHub repository. +6. [Azure Key Vault](https://learn.microsoft.com/en-us/azure/key-vault/general/overview): Stores the SQL connection string in a secret. + +The web app allows users to plan and manage vacation activities, storing all activity data in the `Activities` table in the `PlannerDB` database. For more information, see [Azure Web App with Azure SQL Database and Azure Key Vault](../README.md). + +## Deployment + +You can set up the Azure emulator by utilizing LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN` to access the Azure emulator. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain your Auth Token and specify it in the `LOCALSTACK_AUTH_TOKEN` environment variable. The Azure Docker image is available on the [LocalStack Docker Hub](https://hub.docker.com/r/localstack/localstack-azure). To pull the Azure Docker image, execute the following command: + +```bash +docker pull localstack/localstack-azure +``` + +Start the LocalStack Azure emulator using the localstack CLI, execute the following command: + +```bash +# Set the authentication token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +lstk az start-interception +``` + +Navigate to the `bicep` folder: + +```bash +cd samples/web-app-sql-database/dotnet/bicep +``` + +Make the script executable: + +```bash +chmod +x deploy.sh +``` + +Run the deployment script: + +```bash +./deploy.sh +``` + +## Validation + +After deployment, you can use the `validate.sh` script to verify that all resources were created and configured correctly: + +```bash +#!/bin/bash + +# Variables +# Check resource group +az group show \ +--name local-rg \ +--output table + +# List resources +az resource list \ +--resource-group local-rg \ +--output table + +# Check Azure Web App +az webapp show \ +--name local-webapp-test \ +--resource-group local-rg \ +--output table + +# Check Azure SQL Server +az sql server show \ +--name local-sqlserver-test \ +--resource-group local-rg \ +--output table + +# Check Azure SQL Database +az sql db show \ +--name PlannerDB \ +--server local-sqlserver-test \ +--resource-group local-rg \ +--output table +``` + +## Cleanup + +To destroy all created resources: + +```bash +# Delete resource group and all contained resources +az group delete --name local-rg --yes --no-wait + +# Verify deletion +az group list --output table +``` + +This will remove all Azure resources created by the CLI deployment script. + +## Related Documentation + +- [Azure Bicep Documentation](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/) +- [Bicep Language Reference](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-functions) +- [LocalStack for Azure Documentation](https://docs.localstack.cloud/azure/) +- [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) +- [lstk GitHub repository](https://github.com/localstack/lstk) diff --git a/samples/web-app-sql-database/dotnet/bicep/deploy.sh b/samples/web-app-sql-database/dotnet/bicep/deploy.sh new file mode 100755 index 0000000..47ce812 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/bicep/deploy.sh @@ -0,0 +1,319 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +TEMPLATE="main.bicep" +PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="$PREFIX-rg" +LOCATION="westeurope" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +ADMIN_USER='sqladmin' +ADMIN_PASSWORD='P@ssw0rd1234!' +DATABASE_USER_NAME='testuser' +DATABASE_USER_PASSWORD='TestP@ssw0rd123' +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" +DEPLOY_APP=1 + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit +# Validates if the resource group exists in the subscription, if not creates it +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + # Create the resource group + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + administratorLogin=$ADMIN_USER \ + administratorLoginPassword=$ADMIN_PASSWORD \ + sqlDatabaseUsername=$DATABASE_USER_NAME \ + sqlDatabasePassword=$DATABASE_USER_PASSWORD \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + administratorLogin=$ADMIN_USER \ + administratorLoginPassword=$ADMIN_PASSWORD \ + sqlDatabaseUsername=$DATABASE_USER_NAME \ + sqlDatabasePassword=$DATABASE_USER_PASSWORD \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + administratorLogin=$ADMIN_USER \ + administratorLoginPassword=$ADMIN_PASSWORD \ + sqlDatabaseUsername=$DATABASE_USER_NAME \ + sqlDatabasePassword=$DATABASE_USER_PASSWORD \ + --query 'properties.outputs' \ + --output json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + APP_SERVICE_PLAN_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.appServicePlanName.value') + WEB_APP_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.webAppName.value') + SQL_SERVER_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.sqlServerName.value') + SQL_DATABASE_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.sqlDatabaseName.value') + echo "Deployment details:" + echo "appServicePlanName: $APP_SERVICE_PLAN_NAME" + echo "webAppName: $WEB_APP_NAME" + echo "webAppUrl: $WEB_APP_URL" + echo "sqlServerName: $SQL_SERVER_NAME" + echo "sqlDatabaseName: $SQL_DATABASE_NAME" +else + echo "Failed to deploy Bicep template [$TEMPLATE]" + exit 1 +fi + +if [[ -z "$WEB_APP_NAME" || -z "$SQL_SERVER_NAME" || -z "$SQL_DATABASE_NAME" ]]; then + echo "Web App Name, SQL Server Name, or SQL Database Name is empty. Exiting." + exit 1 +fi + +# Retrieve the fullyQualifiedDomainName of the SQL server +echo "Retrieving the fullyQualifiedDomainName of the [$SQL_SERVER_NAME] SQL server..." +SQL_SERVER_FQDN=$(az sql server show \ + --name "$SQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "fullyQualifiedDomainName" \ + --output tsv) + +if [ -z "$SQL_SERVER_FQDN" ]; then + echo "Failed to retrieve the fullyQualifiedDomainName of the SQL server" + exit 1 +fi + +# Create server-level login +echo "Creating login [$DATABASE_USER_NAME] at server level..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d master \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -Q "IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = '$DATABASE_USER_NAME') + CREATE LOGIN [$DATABASE_USER_NAME] WITH PASSWORD = '$DATABASE_USER_PASSWORD';" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Login [$DATABASE_USER_NAME] created successfully" +else + echo "Failed to create login [$DATABASE_USER_NAME]" + exit 1 +fi + +# Create database user +echo "Creating user [$DATABASE_USER_NAME] in database [$SQL_DATABASE_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -Q "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = '$DATABASE_USER_NAME') + CREATE USER [$DATABASE_USER_NAME] FOR LOGIN [$DATABASE_USER_NAME];" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "User [$DATABASE_USER_NAME] created successfully in database [$SQL_DATABASE_NAME]" +else + echo "Failed to create user [$DATABASE_USER_NAME]" + exit 1 +fi + +# Grant permissions including DDL rights +echo "Granting permissions to [$DATABASE_USER_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$ADMIN_USER" \ + -P "$ADMIN_PASSWORD" \ + -Q "ALTER ROLE db_datareader ADD MEMBER [$DATABASE_USER_NAME]; + ALTER ROLE db_datawriter ADD MEMBER [$DATABASE_USER_NAME]; + ALTER ROLE db_ddladmin ADD MEMBER [$DATABASE_USER_NAME];" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Permissions granted successfully to [$DATABASE_USER_NAME]" +else + echo "Failed to grant permissions to [$DATABASE_USER_NAME]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$DATABASE_USER_NAME]..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -Q "SELECT SYSTEM_USER AS CurrentUser, DB_NAME() AS CurrentDatabase, GETDATE() AS CurrentTime;" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$DATABASE_USER_NAME]" +else + echo "Connection test failed with user [$DATABASE_USER_NAME]" + exit 1 +fi + +# Create table +echo "Creating test [Products] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -Q "IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Activities' AND schema_id = SCHEMA_ID('dbo')) + CREATE TABLE dbo.Activities ( + -- Primary Key: UNIQUEIDENTIFIER with a default of a new sequential GUID (best for indexing) + id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWSEQUENTIALID(), + + -- Username field + username VARCHAR(32) NOT NULL, + + -- Description of the activity + activity VARCHAR(128) NOT NULL, + + -- Timestamp of the activity + timestamp DATETIME NOT NULL + );" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test [Activities] table created successfully" +else + echo "Failed to create test [Activities] table" + exit 1 +fi + +# Insert data +echo "Inserting test data into [Activities] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -Q "INSERT INTO Activities (username, activity, timestamp) + VALUES + ('paolo', 'Go to Paris', GETDATE()), + ('paolo', 'Go to London', GETDATE()), + ('paolo', 'Go to Mexico', GETDATE());" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test data inserted successfully into [Activities] table" +else + echo "Failed to insert test data into [Activities] table" + exit 1 +fi + +# Query data +echo "Querying test data from [Activities] table..." +sqlcmd -S "$SQL_SERVER_FQDN" \ + -d "$SQL_DATABASE_NAME" \ + -U "$DATABASE_USER_NAME" \ + -P "$DATABASE_USER_PASSWORD" \ + -Q "SELECT * FROM Activities;" \ + -V 1 + +if [ $? -eq 0 ]; then + echo "Test data queried successfully from [Activities] table" +else + echo "Failed to query test data from [Activities] table" + exit 1 +fi + +if [[ $DEPLOY_APP -eq 0 ]]; then + echo "Skipping web app deployment as DEPLOY_APP flag is set to 0." + exit 0 +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" . -x "bin/*" "obj/*" "publish/*" "*.zip" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi diff --git a/samples/web-app-sql-database/dotnet/bicep/main.bicep b/samples/web-app-sql-database/dotnet/bicep/main.bicep new file mode 100644 index 0000000..e5bec57 --- /dev/null +++ b/samples/web-app-sql-database/dotnet/bicep/main.bicep @@ -0,0 +1,504 @@ +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param appServicePlanZoneRedundant bool = false + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'dotnetcore' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.0' + '1.1' + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = '' + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +@description('Specifies the administrator username of the SQL logical server.') +param administratorLogin string = 'sqladmin' + +@description('Specifies the administrator password of the SQL logical server.') +@secure() +param administratorLoginPassword string = 'P@ssw0rd1234!' + +@description('Conditional. The Azure Active Directory (AAD) administrator authentication. Required if no `administratorLogin` & `administratorLoginPassword` is provided.') +param administrators object? + +@description('Specifies the conditional Developmentresource ID of a user-assigned identityDevelopment to be used by default. This is required if `userAssignedIdentities` is not empty.') +param primaryUserAssignedIdentityResourceId string? + +@allowed([ + '1.0' + '1.1' + '1.2' + '1.3' +]) +@description('Specifies the optional Developmentminimal TLS versionDevelopment allowed for connections.') +param minimalTlsVersion string = '1.2' + +@allowed([ + 'Disabled' + 'Enabled' +]) +@description('Specifies whether or not to optionally enable IPv6 support for this server.') +param isIPv6Enabled string = 'Disabled' + +@description('Specifies the version of the SQL server to deploy.') +param version string = '12.0' + +@description('Specifies whether to optionally restrict outbound network access for this server.') +@allowed([ + 'Enabled' + 'Disabled' +]) +param restrictOutboundNetworkAccess string? + +@description('Specifies the name of the SQL Database.') +param sqlDatabaseName string = 'PlannerDB' + +@description('Specifies the optional SKU for the database.') +param sku object = { + name: 'Standard' + tier: 'Standard' + capacity: 10 +} + +@description('Specifies the optional time in minutes after which the database automatically pauses. A value of -1 disables automatic pausing.') +param autoPauseDelay int = -1 + +@description('Specifies the required Developmentavailability zoneDevelopment. A value of 1, 2, or 3 hardcodes the zone; -1 defines no zone. Note that these are logical availability zones within your Azure subscription. Refer to the Azure documentation for the mapping between physical and logical zones.') +@allowed([ + -1 + 1 + 2 + 3 +]) +param availabilityZone int = -1 + +@description('Specifies the optional collation for the metadata catalog.') +param catalogCollation string = 'DATABASE_DEFAULT' + +@description('Specifies the optional collation for the database.') +param collation string = 'SQL_Latin1_General_CP1_CI_AS' + +@description('Specifies the optional mode used for database creation.') +param createMode + | 'Default' + | 'Copy' + | 'OnlineSecondary' + | 'PointInTimeRestore' + | 'Recovery' + | 'Restore' + | 'RestoreExternalBackup' + | 'RestoreExternalBackupSecondary' + | 'RestoreLongTermRetentionBackup' + | 'Secondary' = 'Default' + +@description('Specifies the optional resource ID of the elastic pool containing this database.') +param elasticPoolResourceId string? + +@description('Specifies the optional Client ID for cross-tenant per-database Customer-Managed Key (CMK) scenarios.') +@minLength(36) +@maxLength(36) +param federatedClientId string? + +@description('Specifies the optional behavior when monthly free limits are exhausted for a free database.') +param freeLimitExhaustionBehavior 'AutoPause' | 'BillOverUsage'? + +@description('Specifies the optional number of read-only secondary replicas associated with the database.') +param highAvailabilityReplicaCount int = 0 + +@description('Specifies whether or not this database is a Developmentledger databaseDevelopment. All tables will be ledger tables. Note: this value cannot be changed after database creation.') +param isLedgerOn bool = false + +@description('Specifies the optional license type to apply for this database.') +param licenseType 'BasePrice' | 'LicenseIncluded'? + +@description('Specifies the optional resource identifier of the long-term retention backup used for the create operation.') +param longTermRetentionBackupResourceId string? + +@description('Specifies the optional Maintenance Configuration ID assigned to the database, which defines the period for maintenance updates.') +param maintenanceConfigurationId string? + +@description('Specifies whether optional customer-controlled manual cutover is required during an Update Database operation to the Hyperscale tier.') +param manualCutover bool? + +@description('Specifies the optional minimal capacity (vCores) that the database will always have allocated.') +param minCapacity string = '0' + +@description('Specifies the optional trigger for a customer-controlled manual cutover during a wait state while a scaling operation is in progress.') +param performCutover bool? + +@description('Specifies the optional type of enclave requested for the database, either Default or VBS enclaves.') +param preferredEnclaveType 'Default' | 'VBS'? + +@description('Specifies the optional state of read-only routing.') +param readScale 'Enabled' | 'Disabled' = 'Disabled' + +@description('Specifies the optional resource identifier of the recoverable database associated with the create operation.') +param recoverableDatabaseResourceId string? + +@description('Specifies the optional resource identifier of the recovery point associated with the create operation.') +param recoveryServicesRecoveryPointResourceId string? + +@description('Specifies the optional storage account type to be used for storing database backups.') +param requestedBackupStorageRedundancy 'Geo' | 'GeoZone' | 'Local' | 'Zone' = 'Local' + +@description('Specifies the optional resource identifier of the restorable dropped database associated with the create operation.') +param restorableDroppedDatabaseResourceId string? + +@description('Specifies the optional point in time (ISO8601 format) of the source database to restore when `createMode` is set to `Restore` or `PointInTimeRestore`.') +param restorePointInTime string? + +@description('Specifies the optional name of the sample schema to apply when creating this database.') +param sampleName string = '' + +@description('Specifies the optional secondary type of the database, if it is a secondary.') +param secondaryType 'Geo' | 'Named' | 'Standby'? + +@description('Specifies the optional time the database was deleted when restoring a deleted database.') +param sourceDatabaseDeletionDate string? + +@description('Specifies the optional resource identifier of the source database associated with the create operation.') +param sourceDatabaseResourceId string? + +@description('Specifies the optional resource identifier of the source associated with the create operation of this database.') +param sourceResourceId string? + +@description('Specifies whether or not the database uses free monthly limits. This is allowed for only one database per subscription.') +param useFreeLimit bool? + +@description('Specifies whether or not this database is Developmentzone redundantDevelopment.') +param sqlDatabaseZoneRedundant bool = false + +@description('Specifies the username for the SQL Database.') +param sqlDatabaseUsername string = 'testuser' + +@description('Specifies the password for the SQL Database.') +@secure() +param sqlDatabasePassword string = 'TestP@ssw0rd123' + +@description('Specifies the required name of the Server Firewall Rule.') +param sqlFirewallRuleName string = 'AllowAllIPs' + +@description('Specifies the optional end IP address of the firewall rule. Must be in IPv4 format and greater than or equal to `startIpAddress`. Use \'0.0.0.0\' to allow all Azure-internal IP addresses.') +param endIpAddress string = '255.255.255.255' + +@description('Specifies the optional start IP address of the firewall rule. Must be in IPv4 format. Use \'0.0.0.0\' to allow all Azure-internal IP addresses.') +param startIpAddress string = '0.0.0.0' + +@description('Specifies the username for the application.') +param username string = 'paolo' + +var sqlServerName = '${prefix}-sqlserver-${suffix}' +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var keyVaultName = '${prefix}-kv-${suffix}' +var sqlConnectionStringSecretName = '${prefix}-secret-${suffix}' +var identity = { + type: 'SystemAssigned' + } + +resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = { + name: sqlServerName + location: location + tags: tags + identity: identity + properties: { + administratorLogin: administratorLogin + administratorLoginPassword: administratorLoginPassword + administrators: union({ administratorType: 'ActiveDirectory' }, administrators ?? {}) + federatedClientId: federatedClientId + isIPv6Enabled: isIPv6Enabled + version: version + minimalTlsVersion: minimalTlsVersion + primaryUserAssignedIdentityId: primaryUserAssignedIdentityResourceId + publicNetworkAccess: publicNetworkAccess + restrictOutboundNetworkAccess: restrictOutboundNetworkAccess + } +} + +resource firewallRule 'Microsoft.Sql/servers/firewallRules@2024-11-01-preview' = { + name: sqlFirewallRuleName + parent: sqlServer + properties: { + endIpAddress: endIpAddress + startIpAddress: startIpAddress + } +} + +resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-11-01-preview' = { + parent: sqlServer + name: sqlDatabaseName + location: location + tags: tags + sku: sku + properties: { + autoPauseDelay: autoPauseDelay + availabilityZone: availabilityZone != -1 ? string(availabilityZone) : 'NoPreference' + catalogCollation: catalogCollation + collation: collation + createMode: createMode + elasticPoolId: elasticPoolResourceId + federatedClientId: federatedClientId + freeLimitExhaustionBehavior: freeLimitExhaustionBehavior + highAvailabilityReplicaCount: highAvailabilityReplicaCount + isLedgerOn: isLedgerOn + licenseType: licenseType + longTermRetentionBackupResourceId: longTermRetentionBackupResourceId + maintenanceConfigurationId: maintenanceConfigurationId + manualCutover: manualCutover + minCapacity: !empty(minCapacity) ? json(minCapacity) : 0 + performCutover: performCutover + preferredEnclaveType: preferredEnclaveType + readScale: readScale + recoverableDatabaseId: recoverableDatabaseResourceId + recoveryServicesRecoveryPointId: recoveryServicesRecoveryPointResourceId + requestedBackupStorageRedundancy: requestedBackupStorageRedundancy + restorableDroppedDatabaseId: restorableDroppedDatabaseResourceId + restorePointInTime: restorePointInTime + sampleName: sampleName + secondaryType: secondaryType + sourceDatabaseDeletionDate: sourceDatabaseDeletionDate + sourceDatabaseId: sourceDatabaseResourceId + sourceResourceId: sourceResourceId + useFreeLimit: useFreeLimit + zoneRedundant: sqlDatabaseZoneRedundant + } +} + +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: appServicePlanName + location: location + tags: tags + kind: appServicePlanKind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: appServicePlanZoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource webApp 'Microsoft.Web/sites@2024-11-01' = { + name: webAppName + location: location + tags: tags + kind: webAppKind + properties: { + httpsOnly: httpsOnly + serverFarmId: appServicePlan.id + siteConfig: { + linuxFxVersion: toUpper('${runtimeName}|${runtimeVersion}') + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: 'SystemAssigned' + } +} + +resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' = { + name: keyVaultName + location: location + tags: tags + properties: { + tenantId: subscription().tenantId + sku: { + family: 'A' + name: 'standard' + } + accessPolicies: [ + { + tenantId: subscription().tenantId + objectId: webApp.identity.principalId + permissions: { + secrets: [ + 'get' + 'list' + ] + } + } + ] + enableRbacAuthorization: false + enableSoftDelete: true + softDeleteRetentionInDays: 7 + } +} + +resource sqlConnectionStringSecret 'Microsoft.KeyVault/vaults/secrets@2024-11-01' = { + parent: keyVault + name: sqlConnectionStringSecretName + properties: { + value: 'Server=tcp:${sqlServer.properties.fullyQualifiedDomainName},1433;Database=${sqlDatabaseName};User ID=${sqlDatabaseUsername};Password=${sqlDatabasePassword};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;' + } +} + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + //Pass Key Vault name and secret name as app settings. + //The .NET SDK will retrieve the actual connection string value from Key Vault + KEY_VAULT_NAME: keyVaultName + SECRET_NAME: sqlConnectionStringSecretName + LOGIN_NAME: username + KEYVAULT_URI: keyVault.properties.vaultUri + } +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +output appServicePlanName string = appServicePlan.name +output webAppName string = webApp.name +output webAppUrl string = webApp.properties.defaultHostName +output sqlServerName string = sqlServer.name +output sqlServerFqdn string = sqlServer.properties.fullyQualifiedDomainName +output sqlDatabaseName string = sqlDatabase.name +output keyVaultName string = keyVault.name +output keyVaultUrl string = keyVault.properties.vaultUri +output sqlConnectionStringSecretUri string = sqlConnectionStringSecret.properties.secretUri diff --git a/samples/web-app-sql-database/dotnet/bicep/main.bicepparam b/samples/web-app-sql-database/dotnet/bicep/main.bicepparam new file mode 100644 index 0000000..a804b7a --- /dev/null +++ b/samples/web-app-sql-database/dotnet/bicep/main.bicepparam @@ -0,0 +1,7 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'dotnetcore' +param runtimeVersion = '10.0' +param username = 'paolo' diff --git a/samples/web-app-sql-database/dotnet/images/architecture.png b/samples/web-app-sql-database/dotnet/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..728fa260c45efb20d6899505e3d9fcb91253e260 GIT binary patch literal 88157 zcmcfoWl&t*6F!O#5duL239f-aaCdhI7Tn$4Aq*PaHMm1?cbDMqHfV5%;0|X4@A>`D z$8&Gpx*sTZP0g&mx>xtpvib@9E+vBS9_u{_1VRuK6_f>m-u?iAUPHsY0zT=9blC&` zQQ8YB+Y8tl=-8WBSrW*bSQvmLfd@Kf0$~GP0(x3{W&%1Ub~*nNP@evv#uwf1fDhjo@k#Q5K;_|ZcRFuD zP)b!|f_(Bn=JprgxvEcP9Nlth4DD7>qO0^aJ7Lqt>*~qLiXz6ZCi^76LHy!;kh)Gn zc)5^__1E2Y$?fPh@y}?~6BKi=6;QprURyV`-dd1NBxRpMtigFn{w>u|RP4n^h488` zLr1qC*0@|Q_ElU)^o^!H6w9|8N}zzudjD@3RVty{SbWGAMHh-HQxfbd5N2)Mw!wu4xP94OeM*V z6{oMSkKUfPu`Gb-SysK+<)hO4d=q2ifPG}0+IdtIlw`h4^3R8=jqw_$p!;kv=d~;M z6n;T-v&I6#yzHGc2Ne|+1;v12WrBujh}+8|a*~pg78VxDoqw%a*R7K7nqWh8sQ8A4 zhIB&XixkZa4Gk3)VcD?~Iw=eyateyQy}c=o+=+ykn3%*wQ^$Hx$j8voP$niOyl|0XF=^?M zp&_P5bqurT(-!7R8&Q&x$#5^Mf|#qQs9<7Z8pgr3i2^%Sl9OAzyxmv?lnjeXGJD`y zIpF(ZN80vgW@d$XdEW(E3;;2Wj2MKzcxnciYCAYMSXdM{?OC&)oSdMbq7G4`cf&l{ znWs!qd3kweCjTO!A4zFxmd5WOVgH+(oBsZ94lFb@;lqjnu+Lu{E6B;oX=qTTo!^c?HiJ6DvK2W+LU zQ6Hhs_W78y!pnOEO-)TTHB%v9UePuLiU-w|^%~rK|NCBLh#Jrt2wFJo;cJ{2CaBYg zPMwz78U+3G$;P!ABNbx;^zU-r2^o-J-mBHp+t)ej=5 z=~NI>SF0-di9JY-C`|Dpa#lq}MRv9jwRAk~&oO+c&e*zw0JC6qOA8AoDR7q=t(E8 zuG8rtOkGHUH0tppD6fEkfQw6`av8)NFeO9ucWoG?B@C;kL};BcBI+Jb8+-P7Pnq;5 z{puSSs8FI+2EW!0L7l<0sg4}jy?K3x`usLg;OvRE671Mhp6mhr9j`jF61L6Im{;X) zP+