5. Autoscaling in practice
Dynamically added and removed!
Machine to Machine
Closed-loop control system
6. Scale apps is not simple
How to handle dev/testing/production? (dynamic env)
How to install/update softwares? (dynamic env)
How to handle user sessions? (more than one node)
How to handle/tail logs? (dynamic env)
How to monitor all instances (dynamic env)
And more... (all things are moving!)
8. How to deploy the app?
ElasticBeanstalk updates app using Git on push
ElasticBeanstalk updates app using a pre-packaged Zip file
ElasticBeankstalk offers also API
Git Push -> Jenkins Build ZIP package -> ElasticBeankstalk Deploy
9. Different app versions per environment
Easy distributed app deploy/rollback and testing/production application management
10. Different configuration per environment
Upgrade your environment and switch your production without downtime
18. Application variables
All environment variables are ported to your application in $_SERVER
You can pass everything like: Memcached and Mysql configurations etc.
20. We need more customizations!
Create a folder in your project root with name .ebextensions and
append your configuration files with extension .config
ElasticBeanstalk will use them during the application provisioning
21. Cronjobs runs on the leader instance only
.ebextensions/05_cron_jobs.config
container_commands:
01_magento_cron_job:
command: "cat .ebextensions/magento_cron_job.txt > /etc/cron.d/magento_cron_job && chmod 644 /etc/cron.d/magento_cron_leader_only: true
All configuration files are just simple YAML files
22. Monitor your environment
You can monitor many metrics with CloudWatch
UDP/IP CloudWatch agent on local machine: https://github.com/wdalmut/cloudwatch-agent
27. Use Composer for dependencies
ElasticBeanstalk uses Composer in order to prepare your application
So, we can use composer hooks in order to connect all env variables to
our Magento configuration
http://github.com/magento-hackathon/magento-composer-installer
29. <?php
namespace CorleyDeploy;
use ComposerScriptEvent;
class Magento
{
public static function localConf(Event $event)
{
// Generate a local.xml based on environment variables
}
}
35. Why not?
work out-of-the-box (and is dead simple to configure)
read access to db only once for each instance...
...may be reduced to only one using a CDN (CloudFront)
36. Cache and sessions
All cache backend and session handlers except "File" are fine
Best options are Redis and Memcached (both available via Amazon
ElastiCache)
37. TO BE DONE
sitemap.xml
Exchange data for third-party integration (ERP, CRM etc.)
Integration with services (eg. bank gateway) that require IPs whitelist
Use a proxy
IP reservation
Store media on Amazon S3
Use DynamoDB session handler