Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "python-app-service-postgresql-redis-infra",
"name": "python-app-service-postgresql-managed-redis-infra",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ description: This is a Python web app using the Django framework and the Azure D

This is a Python web app using the Django framework and the Azure Database for PostgreSQL relational database service. The Django app is hosted in a fully managed Azure App Service. This app is designed to be be run locally and then deployed to Azure. You can either deploy this project by following the tutorial [*Deploy a Python (Django or Flask) web app with PostgreSQL in Azure*](https://docs.microsoft.com/azure/app-service/tutorial-python-postgresql-app) or by using the [Azure Developer CLI (azd)](https://learn.microsoft.com/azure/developer/azure-developer-cli/overview) according to the instructions below.

Additionally, the sample application demonstrates Azure Redis Cache access by caching the restaurant details page for 60 seconds. You can add the Azure Redis Cache integration in the [secure-by-default web app + database creation wizard](https://portal.azure.com/?feature.customportal=false#create/Microsoft.AppServiceWebAppDatabaseV3), and it's also included in the [AZD template](https://github.com/Azure-Samples/python-app-service-postgresql-infra).
Additionally, the sample application demonstrates Azure Managed Redis access by caching the restaurant details page for 60 seconds. You can add the Azure Managed Redis integration in the [AZD template](https://github.com/Azure-Samples/python-app-service-postgresql-infra).

## Requirements

Expand Down
4 changes: 2 additions & 2 deletions azure.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
# azure.yaml is an azd configuration file and isn't used by the sample application.

name: python-app-service-postgresql-redis-infra
name: python-app-service-postgresql-managed-redis-infra
metadata:
template: python-app-service-postgresql-redis-infra@0.0.1-beta
template: python-app-service-postgresql-managed-redis-infra@0.0.1-beta
services:
web:
project: .
Expand Down
38 changes: 24 additions & 14 deletions infra/resources.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ resource privateDnsZoneDB 'Microsoft.Network/privateDnsZones@2024-06-01' = {
}
}

// Resources needed to secure Redis Cache behind a private endpoint
// Resources needed to secure Azure Managed Redis behind a private endpoint
resource cachePrivateEndpoint 'Microsoft.Network/privateEndpoints@2024-03-01' = {
name: '${appName}-cache-privateEndpoint'
location: location
Expand All @@ -161,7 +161,7 @@ resource cachePrivateEndpoint 'Microsoft.Network/privateEndpoints@2024-03-01' =
name: '${appName}-cache-privateEndpoint'
properties: {
privateLinkServiceId: redisCache.id
groupIds: ['redisCache']
groupIds: ['redisEnterprise']
}
}
]
Expand All @@ -181,7 +181,7 @@ resource cachePrivateEndpoint 'Microsoft.Network/privateEndpoints@2024-03-01' =
}
}
resource privateDnsZoneCache 'Microsoft.Network/privateDnsZones@2024-06-01' = {
name: 'privatelink.redis.cache.windows.net'
name: 'privatelink.redisenterprise.cache.azure.net'
location: 'global'
dependsOn: [
virtualNetwork
Expand Down Expand Up @@ -274,23 +274,33 @@ resource dbserver 'Microsoft.DBforPostgreSQL/flexibleServers@2022-01-20-preview'
]
}

// The Redis cache is configured to the minimum pricing tier
resource redisCache 'Microsoft.Cache/redis@2024-11-01' = {
// The Azure Managed Redis cluster is configured to the minimum Balanced tier
resource redisCache 'Microsoft.Cache/redisEnterprise@2024-10-01' = {
name: '${appName}-cache'
location: location
sku: {
name: 'Balanced_B0'
capacity: 1
}
properties: {
sku: {
name: 'Basic'
family: 'C'
capacity: 0
}
redisConfiguration: {}
enableNonSslPort: false
redisVersion: '6'
minimumTlsVersion: '1.2'
publicNetworkAccess: 'Disabled'
}
}

// The Azure Managed Redis database
resource redisCacheDb 'Microsoft.Cache/redisEnterprise/databases@2024-10-01' = {
parent: redisCache
name: 'default'
properties: {
evictionPolicy: 'AllKeysLRU'
// EnterpriseCluster exposes a single endpoint so standard (non-cluster-aware)
// Redis clients like django-redis / redis-py work without modification.
clusteringPolicy: 'EnterpriseCluster'
port: 10000
}
}

// The App Service plan is configured to the B1 pricing tier
resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: '${appName}-plan'
Expand Down Expand Up @@ -430,7 +440,7 @@ resource cacheConnector 'Microsoft.ServiceLinker/linkers@2024-04-01' = {
clientType: 'python'
targetService: {
type: 'AzureResource'
id: resourceId('Microsoft.Cache/Redis/Databases', redisCache.name, '0')
id: redisCacheDb.id
}
authInfo: {
authType: 'accessKey'
Expand Down
Loading