AWS migratie

AWS
Zelfschalend AWS cluster met Elastic Beanstalk
Van Heroku naar AWS...
Vanuit een klant was er de wens om een Laravel backend (admin + api) vanuit Heroku te migreren naar AWS. De 'dynos' bij Heroku werden erg duur, maar het geheel had vooral te maken met stabiliteitsproblemen.
In AWS hebben we een productie en een test omgeving opgezet voor deze app:
- Een zelfschalende Elastic Beanstalk app, met gescheiden onderdelen voor: API, admin, en 'worker'
- Een shared application load balancer om SSL af te handelen en het verkeer naar de goede targets te leiden
- Deployment pipelines voor continuous delivery/integration en immutable deployments zonder offline tijd
- Een redundant Elasticache/redis cluster
Met een simpele git push kan de deployment pipeline getriggered worden. De database draaide reeds bij AWS.
Load / Stress testing
Om het nieuwe cluster in te stellen, hebben we enkele stress tests uitgevoerd op de oude en nieuwe omgeving.
Een orienterende test hebben we gebruikt om de servers nauwkeurig in te stellen zodat deze geen geheugen problemen ondervinden onder load
Uit de tests bleek dat het nieuwe cluster 30% meer performant was dan de Heroku setup. Daarnaast heeft de Heroku setup kritische punten bereikt, terwijl AWS nog niet eens (automatisch) hoefde te schalen tijdens de test.
Kostenbesparing
Naast de hogere capaciteit en snelheid, wordt de kosten besparing ten opzichte van het laten draaien op Heroku ingeschat op 60%!
Voor nog hogere schaalbaarheid zetten we 'spot instances' in (naast een 'on demand' base) - dit is ongebruikte reserve capaciteit bij AWS die aangeboden wordt tegen een zeer lage prijs.
Kennis van de applicatie
Voor dit project hebben ik ook goed gekeken naar de applicatie. De aanwezige kennis van het gebruikte PHP framework heb ik goed kunnen gebruiken om de performance en het functioneren van de stack te kunnen evalueren en tunen.
Nog wat specs
- Application framework: PHP Laravel
- Nginx
- php-fpm tuned to the application and instance size
- Code Pipeline with CodeCommit (VCS), CodeBuild project and CodeDeploy
- Docker image (in ECR) for the build process
- Environment specific configuration strategy in the build process
- Daemonized workers using supervisord
Zie ook
AWS Certified Devops Engineer
Ik volg momenteel de AWS Certified DevOps Engineer-cursus om mijn kennis te vergroten op het gebied van het automatiseren van infrastructuur en CI/DI.
Load en Stress tests
Cloud infrastructuur testen met K6
Gobot RPI simulator
GPIO pin simulator voor RPI geschreven in Golang
Reactions Craft CMS plugin
Nieuwe Craft CMS plugin voor Facebook stijl reacties
Liveblog Beurs
Gedaan met stoffige beursartikelen. Hier een Facebook-stijl blog feed om het beursnieuws wat kleurrijker en actueler te maken.
Vertaal component
Een vertaal component in Symfony, voorzien van api en beheersmodule.