Courtesy/Maintenance Page — eks-prod ALB ¶
Purpose ¶
During upgrades, show a maintenance page to all mnemonica.io visitors while allowing internal bypass via a secret header.
ALB Details ¶
- Listener ARN:
arn:aws:elasticloadbalancing:eu-west-1:828879644785:listener/app/eks-prod/cb27f6f4b6d18fb2/0c4338c0c9905001 - Target group ARN (eks-prod-frontend):
arn:aws:elasticloadbalancing:eu-west-1:828879644785:targetgroup/eks-prod-frontend/a24c60bab6eeecc7
Enable Maintenance Mode ¶
Rule #98 — Bypass (secret header grants access) ¶
aws elbv2 create-rule \
--listener-arn "arn:aws:elasticloadbalancing:eu-west-1:828879644785:listener/app/eks-prod/cb27f6f4b6d18fb2/0c4338c0c9905001" \
--priority 98 \
--conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["mnemonica.io"]}},{"Field":"http-header","HttpHeaderConfig":{"HttpHeaderName":"mne-release","Values":["93705e70-f421-4284-9bd2-73411f27ae1b"]}}]' \
--actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:eu-west-1:828879644785:targetgroup/eks-prod-frontend/a24c60bab6eeecc7"}]' \
--region eu-west-1
Rule #99 — Maintenance page (catch-all for mnemonica.io) ¶
aws elbv2 create-rule \
--listener-arn "arn:aws:elasticloadbalancing:eu-west-1:828879644785:listener/app/eks-prod/cb27f6f4b6d18fb2/0c4338c0c9905001" \
--priority 99 \
--conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["mnemonica.io"]}}]' \
--actions '[{"Type":"fixed-response","FixedResponseConfig":{"StatusCode":"200","ContentType":"text/html","MessageBody":"<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n\n <title>Mnemonica</title>\n <meta name=\"description\" content=\"we'\''re upgrading!\">\n <meta name=\"author\" content=\"mnemonica\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\">\n <link href=\"https://fonts.googleapis.com/css2?family=Mulish:wght@300;600&display=swap\" rel=\"stylesheet\">\n <link rel=\"stylesheet\" href=\"https://mnemonica.com/wp-content/uploads/2021/09/courtesy-style.css\">\n\n</head>\n<body>\n<section>\n <picture>\n <img src=\"https://mnemonica.com/wp-content/uploads/2025/09/mn-logo-25-landscape-brand-lighter.png\">\n </picture>\n <div>\n <p>Sorry for the inconvenience but we’re performing an upgrade at the moment.<br>We’ll be back shortly!</p>\n </div>\n</section>\n\n</body>\n</html>"}}]' \
--region eu-west-1
Disable Maintenance Mode ¶
List rules to find ARNs for priorities 98 and 99, then delete them:
# Find rule ARNs
aws elbv2 describe-rules \
--listener-arn "arn:aws:elasticloadbalancing:eu-west-1:828879644785:listener/app/eks-prod/cb27f6f4b6d18fb2/0c4338c0c9905001" \
--query "Rules[?Priority=='98' || Priority=='99'].[RuleArn,Priority]" \
--output table \
--region eu-west-1
# Delete them (replace ARNs)
aws elbv2 delete-rule --rule-arn <RULE_98_ARN> --region eu-west-1
aws elbv2 delete-rule --rule-arn <RULE_99_ARN> --region eu-west-1
Bypass Usage ¶
Use a browser extension like ModHeader to set:
- Header:
mne-release - Value:
93705e70-f421-4284-9bd2-73411f27ae1b
How It Works ¶
Rules are evaluated in priority order. With maintenance mode ON:
- Priority 98:
mnemonica.io+ secret header → forwards to app (bypass) - Priority 99:
mnemonica.io→ returns maintenance HTML (blocks everyone else) - Priority 100: never reached for
mnemonica.iotraffic (existing CloudFront rule)
When rules 98+99 are removed, priority 100 resumes normal service.
Comments
Please login to leave a comment.
No comments yet. Be the first to comment!