# === STEP 1: Confirm primary region is down ===
# Verify from multiple sources before declaring a regional failure
aws health describe-events --region us-east-1
curl -s -o /dev/null -w "%{http_code}" https://api.kaireon.com/api/health
# === STEP 2: Activate DR database ===
# Restore from the latest cross-region snapshot
LATEST_DR_SNAPSHOT=$(aws rds describe-db-snapshots \
--region us-west-2 \
--query 'DBSnapshots | sort_by(@, &SnapshotCreateTime) | [-1].DBSnapshotIdentifier' \
--output text)
aws rds restore-db-instance-from-db-snapshot \
--region us-west-2 \
--db-instance-identifier kaireon-dr \
--db-snapshot-identifier "$LATEST_DR_SNAPSHOT" \
--db-instance-class db.r6g.xlarge \
--multi-az \
--vpc-security-group-ids sg-dr-xxxxxxxx
aws rds wait db-instance-available \
--region us-west-2 \
--db-instance-identifier kaireon-dr
# === STEP 3: Activate DR Redis ===
LATEST_REDIS_SNAPSHOT=$(aws elasticache describe-snapshots \
--region us-west-2 \
--query 'Snapshots | sort_by(@, &NodeSnapshots[0].SnapshotCreateTime) | [-1].SnapshotName' \
--output text)
aws elasticache create-replication-group \
--region us-west-2 \
--replication-group-id kaireon-redis-dr \
--replication-group-description "KaireonAI Redis DR" \
--snapshot-name "$LATEST_REDIS_SNAPSHOT" \
--cache-node-type cache.r6g.large \
--automatic-failover-enabled \
--multi-az-enabled
# === STEP 4: Update application configuration ===
kubectl --context kaireon-dr config use-context kaireon-dr
kubectl set env deploy/kaireon-api -n kaireon \
DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@kaireon-dr.xxxxxxxx.us-west-2.rds.amazonaws.com:5432/kaireon" \
REDIS_URL="redis://kaireon-redis-dr.xxxxxxxx.usw2.cache.amazonaws.com:6379"
kubectl set env deploy/kaireon-worker -n kaireon \
DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@kaireon-dr.xxxxxxxx.us-west-2.rds.amazonaws.com:5432/kaireon" \
REDIS_URL="redis://kaireon-redis-dr.xxxxxxxx.usw2.cache.amazonaws.com:6379"
# === STEP 5: Scale up DR workloads ===
kubectl --context kaireon-dr scale deploy/kaireon-api -n kaireon --replicas=5
kubectl --context kaireon-dr scale deploy/kaireon-worker -n kaireon --replicas=3
# === STEP 6: Switch DNS ===
aws route53 change-resource-record-sets \
--hosted-zone-id ZXXXXXXXXXXXXX \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "api.kaireon.com",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z1H1FL5HABSF5",
"DNSName": "kaireon-dr-alb.us-west-2.elb.amazonaws.com",
"EvaluateTargetHealth": true
}
}
}]
}'
# === STEP 7: Verify ===
curl -s https://api.kaireon.com/api/health
echo "DR failover complete at $(date -u)"