- Add Cloud for Sovereignty landing zone architecture and deployment - Implement complete legal document management system - Reorganize documentation with improved navigation - Add infrastructure improvements (Dockerfiles, K8s, monitoring) - Add operational improvements (graceful shutdown, rate limiting, caching) - Create comprehensive project structure documentation - Add Azure deployment automation scripts - Improve repository navigation and organization
109 lines
3.1 KiB
HCL
109 lines
3.1 KiB
HCL
# Azure CDN Infrastructure for Credential Seal Images
|
|
# Creates storage account, container, and CDN profile/endpoint
|
|
|
|
# Storage Account for CDN Images
|
|
resource "azurerm_storage_account" "cdn_images" {
|
|
name = local.sa_cdn_name
|
|
resource_group_name = azurerm_resource_group.main.name
|
|
location = var.azure_region
|
|
account_tier = "Standard"
|
|
account_replication_type = "LRS"
|
|
min_tls_version = "TLS1_2"
|
|
allow_blob_public_access = true
|
|
|
|
# Enable blob versioning for image protection
|
|
blob_properties {
|
|
versioning_enabled = true
|
|
delete_retention_policy {
|
|
days = var.environment == "prod" ? 90 : 30
|
|
}
|
|
cors_rule {
|
|
allowed_origins = ["*"]
|
|
allowed_methods = ["GET", "HEAD", "OPTIONS"]
|
|
allowed_headers = ["*"]
|
|
exposed_headers = ["*"]
|
|
max_age_in_seconds = 3600
|
|
}
|
|
}
|
|
|
|
tags = merge(var.tags, {
|
|
Purpose = "CDNImages"
|
|
})
|
|
}
|
|
|
|
# Storage Container for Images
|
|
resource "azurerm_storage_container" "cdn_images" {
|
|
name = "images"
|
|
storage_account_name = azurerm_storage_account.cdn_images.name
|
|
container_access_type = "blob"
|
|
}
|
|
|
|
# CDN Profile
|
|
resource "azurerm_cdn_profile" "cdn_images" {
|
|
name = var.cdn_profile_name != "" ? var.cdn_profile_name : "theorder-cdn-${var.environment}"
|
|
location = var.azure_region
|
|
resource_group_name = azurerm_resource_group.main.name
|
|
sku = "Standard_Microsoft"
|
|
|
|
tags = merge(var.tags, {
|
|
Purpose = "CDNProfile"
|
|
})
|
|
}
|
|
|
|
# CDN Endpoint
|
|
resource "azurerm_cdn_endpoint" "cdn_images" {
|
|
name = var.cdn_endpoint_name != "" ? var.cdn_endpoint_name : "theorder-cdn-endpoint-${var.environment}"
|
|
profile_name = azurerm_cdn_profile.cdn_images.name
|
|
location = var.azure_region
|
|
resource_group_name = azurerm_resource_group.main.name
|
|
|
|
origin {
|
|
name = "blob-origin"
|
|
host_name = azurerm_storage_account.cdn_images.primary_blob_host
|
|
}
|
|
|
|
# Enable compression
|
|
is_compression_enabled = true
|
|
compression_types = ["gzip", "deflate"]
|
|
|
|
# Global delivery rule for cache
|
|
global_delivery_rule {
|
|
cache_expiration_action {
|
|
behavior = "Override"
|
|
duration = "1.00:00:00" # 1 day
|
|
}
|
|
}
|
|
|
|
tags = merge(var.tags, {
|
|
Purpose = "CDNEndpoint"
|
|
})
|
|
}
|
|
|
|
# Outputs
|
|
output "cdn_storage_account_name" {
|
|
description = "CDN storage account name"
|
|
value = azurerm_storage_account.cdn_images.name
|
|
}
|
|
|
|
output "cdn_storage_account_key" {
|
|
description = "CDN storage account primary key"
|
|
value = azurerm_storage_account.cdn_images.primary_access_key
|
|
sensitive = true
|
|
}
|
|
|
|
output "cdn_container_name" {
|
|
description = "CDN container name"
|
|
value = azurerm_storage_container.cdn_images.name
|
|
}
|
|
|
|
output "cdn_blob_url" {
|
|
description = "CDN blob storage URL"
|
|
value = "https://${azurerm_storage_account.cdn_images.name}.blob.core.windows.net/${azurerm_storage_container.cdn_images.name}/"
|
|
}
|
|
|
|
output "cdn_endpoint_url" {
|
|
description = "CDN endpoint URL"
|
|
value = "https://${azurerm_cdn_endpoint.cdn_images.host_name}/${azurerm_storage_container.cdn_images.name}/"
|
|
}
|
|
|