Complete build and deploy web api documents ai to UAT and PROD
Background
Currently, the build-deploy.yml workflow deploys to:
- SBX (Sandbox)
- DEV (Development)
- QA (Quality Assurance)
We need to extend this to support UAT (User Acceptance Testing) and PROD (Production) environments with appropriate approval gates, terraform infrastructure validation, and production-grade configurations.
Acceptance Criteria
1. Terraform Infrastructure Verification (DevOps)
- AC 1.1: Verify terraform state exists for UAT environment resources:
- AKS cluster: uat-eus2-adc-aks-001
- Resource group: uat-eus2-adc-app-rg-001
- SQL Database: uat-eus2-adc-sql-002.database.windows.net
- Storage accounts: uateus2adcinst001, uateus2adcdocst001
- User Assigned Managed Identity for workload identity
- Azure OpenAI endpoint (if environment-specific)
- Azure Form Recognizer endpoint (if environment-specific)
- AC 1.2: Verify terraform state exists for PROD environment resources (DevOps)
- AKS cluster: prod-eus2-adc-aks-001
- Resource group: prod-eus2-adc-app-rg-001
- SQL Database: prod-eus2-adc-sql-002.database.windows.net
- Storage accounts: prodeus2adcinst001, prodeus2adcdocst001
- User Assigned Managed Identity for workload identity
- Azure OpenAI endpoint (production instance)
- Azure Form Recognizer endpoint (production instance)
-
AC 1.3: Document required terraform modules/resources in a
terraform/README.mdfile -
AC 1.4: Ensure all infrastructure resources have appropriate tags (environment, application, cost-center, etc.)
2. Helm Chart Configuration Files (DevOps)
- AC 2.1: Create
helm/values-uat.yamlwith UAT-specific configurations:
- Environment set to ‘uat’
- Appropriate replica count (2+ for high availability)
- UAT-specific resource limits and requests
- UAT SQL database connection string
- UAT storage account endpoints
- UAT Azure AD client ID
- UAT workload identity client ID
- Istio host: documents-ai-api.uat.clait.com (or appropriate domain)
- Autoscaling configuration (min: 2, max: 15)
- AC 2.2: Create
helm/values-prod.yamlwith PROD-specific configurations:
- Environment set to ‘prod’
- Higher replica count (3+ for high availability)
- Production resource limits and requests (higher than UAT)
- PROD SQL database connection string
- PROD storage account endpoints
- PROD Azure AD client ID
- PROD workload identity client ID
- Istio host: documents-ai-api.clait.com (or appropriate production domain)
- Autoscaling configuration (min: 3, max: 20)
- Production-grade monitoring and alerting enabled
- AC 2.3: Remove hardcoded API keys and secrets from values files
- Integrate with Azure Key Vault for secrets management
- Use Key Vault references for:
- AZURE_OPENAI_API_KEY
- AZURE_FR_KEY
- Document Key Vault setup requirements
- AC 2.4: Enable production monitoring in helm values:
- monitoring.serviceMonitor.enabled: true
- Configure appropriate Prometheus scraping intervals
- Set up Grafana dashboards (if applicable)
3. GitHub Actions Workflow Updates (DevOps)
- AC 3.1: Add UAT deployment job to
.github/workflows/build-deploy.yml:
- Job name: package-deploy-uat
- Runs after successful package-deploy-qa job
- Requires manual approval via GitHub environment protection rules
- Environment: uat
- Uses correct AKS cluster and resource group naming
- Deploys to doc-ai namespace
- AC 3.2: Add PROD deployment job to
.github/workflows/build-deploy.yml:
- Job name: package-deploy-prod
- Runs after successful package-deploy-uat job
- Requires manual approval via GitHub environment protection rules
- Environment: prod
- Uses correct AKS cluster and resource group naming
- Deploys to doc-ai namespace (or production-specific namespace)
- Includes smoke tests before marking deployment as complete
- AC 3.3: Configure deployment conditions:
- UAT deployment only triggered from main branch
- PROD deployment only triggered from main branch
- Both require explicit approval from authorized personnel
- AC 3.4: Add deployment verification steps:
- Health check validation after deployment
- Readiness probe verification
- API endpoint smoke test
- Rollback procedure documented in case of failure
4. GitHub Environment Configuration (DevOps)
- AC 4.1: Create GitHub environment
uatwith:
- Required reviewers (minimum 1 DevOps/Lead Engineer)
- Environment secrets:
- AZURE_CLIENT_ID
- AZURE_TENANT_ID
- AZURE_SUBSCRIPTION_ID
- ACR_SUBSCRIPTION_ID
- Environment variables:
- ACR_NAME
- AZURE_CLIENT_ID
- AZURE_TENANT_ID
- ACR_SUBSCRIPTION_ID
- Protection rules: Require manual approval
- AC 4.2: Create GitHub environment
prodwith:
- Required reviewers (minimum 2 approvers: 1 DevOps + 1 Lead/Manager)
- Environment secrets (same as UAT but PROD-specific values)
- Environment variables (same as UAT but PROD-specific values)
- Protection rules:
- Require manual approval
- Wait timer: 5 minutes (optional, for review period)
- Restrict to main branch only
5. Service Principal & RBAC Configuration (DevOps)
- AC 5.1: Ensure service principal has required permissions in UAT subscription:
- AKS Cluster User role on AKS cluster
- ACR Pull role on container registry
- Contributor role on resource group (or specific resource-level permissions)
- AC 5.2: Ensure service principal has required permissions in PROD subscription:
- AKS Cluster User role on AKS cluster
- ACR Pull role on container registry
- Contributor role on resource group (or specific resource-level permissions)
- Document separate PROD service principal if required by security policy
- AC 5.3: Configure workload identity federation:
- UAT managed identity federated credentials for GitHub Actions
- PROD managed identity federated credentials for GitHub Actions
- Validate identity token exchange works correctly
6. Documentation & Runbooks
- AC 6.1: Create deployment runbook documentation:
- Pre-deployment checklist
- Approval process workflow
- Rollback procedures
- Monitoring and alerting setup
- Incident response contacts
- AC 6.2: Update main
README.mdwith:
- Deployment pipeline overview diagram
- Environment promotion flow (DEV → QA → UAT → PROD)
- Required approvers for each environment
- Links to deployment runbooks
- AC 6.3: Create
DEPLOYMENT.mdfile documenting:
- How to trigger deployments
- How to approve deployments
- How to monitor deployment status
- How to verify deployment health
- How to perform rollbacks
- Emergency procedures
- AC 6.4: Document terraform infrastructure requirements:
- All required resources per environment
- Naming conventions
- Required terraform variables
- Backend configuration
7. Testing & Validation
- AC 7.1: Validate UAT deployment:
- Deploy successfully to UAT environment
- Verify pods are running and healthy
- Test API endpoints respond correctly
- Verify database connectivity
- Verify Azure OpenAI integration works
- Verify Form Recognizer integration works
- Verify blob storage access works
- Check logs for errors
- AC 7.2: Validate PROD deployment:
- Deploy successfully to PROD environment (with approval)
- Verify pods are running and healthy
- Test API endpoints respond correctly
- Verify database connectivity
- Verify Azure OpenAI integration works
- Verify Form Recognizer integration works
- Verify blob storage access works
- Check logs for errors
- Monitor for 24 hours post-deployment
- AC 7.3: Validate rollback procedure:
- Document and test rollback to previous version
- Verify rollback can be completed within RTO (Recovery Time Objective)
- Validate data consistency after rollback
8. Security & Compliance
- AC 8.1: Security scanning enabled for production:
- Enable Veracode scanning (currently commented out)
- Container vulnerability scanning
- Dependencies security audit
- Secrets scanning validation
- AC 8.2: Network policies configured:
- Appropriate Istio authorization policies for UAT/PROD
- Network policies for namespace isolation
- Ingress/egress rules documented
- AC 8.3: Compliance validation:
- All production secrets stored in Key Vault (not in helm values)
- Audit logging enabled
- Compliance with organizational security policies
9. Monitoring & Observability
- AC 9.1: Configure application monitoring for UAT/PROD:
- Application Insights or equivalent APM
- Custom metrics for API endpoints
- Performance monitoring
- Error rate tracking
- AC 9.2: Configure infrastructure monitoring:
- AKS cluster metrics
- Pod resource utilization
- Node health monitoring
- Database connection pool monitoring
- AC 9.3: Set up alerting:
- High error rate alerts
- Performance degradation alerts
- Resource exhaustion alerts
- Deployment failure notifications
10. Disaster Recovery
- AC 10.1: Document backup strategy:
- Database backup schedule
- Blob storage backup/replication
- Helm chart versioning strategy
- Container image retention policy
- AC 10.2: Define and document:
- Recovery Time Objective (RTO)
- Recovery Point Objective (RPO)
- Disaster recovery procedures
- Multi-region failover (if applicable)
Technical Notes
Current Pipeline Flow
Target Pipeline Flow
Environment Naming Convention
-
AKS Cluster:
{env}-{region}-adc-aks-001 -
Resource Group:
{env}-{region}-adc-app-rg-001 -
SQL Server:
{env}-{region}-adc-sql-002.database.windows.net -
Storage:
{env}{region}adc{type}st001
Where:
-
env= sbx, dev, qa, uat, prod -
region= eus2 (East US 2) -
type= inst (instance), doc (documents)
Dependencies
-
Infrastructure Team: Provision UAT and PROD Azure resources via Terraform
-
Security Team: Approve service principal permissions and Key Vault setup
-
Database Team: Set up UAT and PROD database instances with proper schemas
-
Networking Team: Configure DNS entries for UAT/PROD domains
-
Platform Team: Create GitHub environments and configure protection rules
Definition of Done
-
All acceptance criteria are met
-
Code changes peer-reviewed and approved
-
Documentation is complete and reviewed
-
UAT deployment successful with manual validation
-
PROD deployment successful with manual validation
-
Rollback procedure tested and documented
-
Monitoring and alerting configured and validated
-
Runbooks created and reviewed by operations team
-
Security review completed
-
Sign-off from Lead Engineer and Product Owner
Estimated Effort
-
Infrastructure Setup: 8-16 hours (depends on terraform state and existing resources)
-
Pipeline Development: 4-8 hours
-
Testing & Validation: 8-12 hours
-
Documentation: 4-6 hours
-
Security Review: 2-4 hours
Total Estimate: 26-46 hours (3-6 sprints depending on team capacity and dependencies)
Risks & Mitigations
| Risk | Impact | Probability | Mitigation |
|------|--------|-------------|------------|
| Terraform state drift | High | Medium | Audit existing infrastructure, reconcile state before deployment |
| Missing infrastructure resources | High | Medium | Complete infrastructure audit before starting development |
| Service principal permission issues | Medium | High | Test permissions in lower environments first |
| Secrets not in Key Vault | High | Low | Prioritize Key Vault integration before PROD deployment |
| Insufficient approval process | Medium | Medium | Define clear approval workflow with stakeholders upfront |
| Production data exposure | High | Low | Use production-specific secrets, never reuse lower environment credentials |
Success Metrics
-
Successful deployment to UAT on first attempt
-
Successful deployment to PROD with zero downtime
-
Rollback procedure tested and documented
-
All security scans pass
-
Zero production incidents in first 30 days post-deployment