feat: Add ECS Fargate infrastructure and deployment configuration#362
Open
e9e4e5f0faef wants to merge 16 commits intostagefrom
Open
feat: Add ECS Fargate infrastructure and deployment configuration#362e9e4e5f0faef wants to merge 16 commits intostagefrom
e9e4e5f0faef wants to merge 16 commits intostagefrom
Conversation
Sancus
reviewed
Jan 24, 2026
60d4f86 to
2ee8f25
Compare
699facf to
c54436f
Compare
8dff9f9 to
65b3600
Compare
65b3600 to
34a5a24
Compare
added 15 commits
February 14, 2026 22:43
…ices with settings_local_stage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR adds infrastructure, CI/CD, testing, and operational tooling to deploy addons-server on AWS ECS Fargate. The full lifecycle has been validated: deploy, smoke test (8/8), read-only Django healthcheck (5/5), teardown -- repeatable across multiple cycles.
Files changed (18):
Dockerfile.ecsdocker/docker-entrypoint.sh--need-appfast-fail.github/workflows/build-and-push.yml.github/workflows/validate.ymlinfra/pulumi/__main__.pyinfra/pulumi/config.stage.yamlinfra/pulumi/Pulumi.yamlinfra/pulumi/Pulumi.stage.yamlinfra/pulumi/README.mdinfra/pulumi/requirements.txtinfra/scripts/guardduty-cleanup.shpulumi destroy-- tag-gated, dry-run, retry backoffinfra/tests/smoke_test.pyinfra/tests/.env.exampleinfra/tests/Dockerfilesrc/olympia/amo/management/commands/ro_healthcheck.pysettings_local_stage.py.gitignoreContext
ECS Fargate migration for ATN from EC2/Ansible, as discussed with @Sancus.
Networking:
10.100.0.0/16with public/private subnets across 3 AZs (approved by Andrei)tb:network:DefaultVpcIngressRulesin configSecurity:
source_security_group_idwiring (accounts-repo pattern)Resource: *wildcard)managed_by,owner,repository,service,lifecycleon all resourcesECS services + autoscaling:
task_role_arn) for runtime boto3desired_countomitted so autoscaling owns the countIAM and secrets:
atn/stage/*policy on execution roles, task roles, and cron rolescelery_result_backend,elasticsearch_host)AWS_ROLE_ARNrepo variable setSettings fixes (settings_local_stage.py):
DJANGO_SETTINGS_MODULE=settings_local_stage(wassettingswhich loaded localhost defaults)CACHE_PREFIX->CACHE_KEY_PREFIX(NameError fix)cors_endpoint_overridesremoved (function doesn't exist in Thunderbird fork)amo-tbdomain)Post-deploy validation
Infrastructure smoke test (8/8): TCP connectivity to all backends from ECS private subnets.
RO Django healthcheck (5/5): Real app image booted in ECS Fargate, Django loaded
settings_local_stage, all backends connected:settings_local_stage)transaction_read_only)Stack cleanly destroyed after validation (157 resources, zero errors). Full lifecycle proven across multiple deploy/test/destroy cycles.
Remaining follow-ups (separate from this PR):
Testing
Checklist