As a Rails developer, my guess is that you've been using Heroku a lot. At some point, you want to try AWS Elastic Beanstalk, a PaaS built on top of AWS. I did, but I was a bit lost in the documentation trying to reproduce the well-known Heroku commands. Here's what I've found (please add a comment if you have more tips to share!).
In order to use the
command in your terminal, you need to install the Heroku Toolbelt
, on OSX it would be as simple as running:
$ brew install heroku
AWS Elastic Beanstalk has its own command,
, which you can install on OSX with:
$ brew install aws-elasticbeanstalk
(There a Python dependency for this
command to work)
On Heroku, you can list, get and set
variables with these commands:
$ heroku config $ heroku config:set MY_VARIABLE=my_value
With Beanstalk, you need to run:
$ eb printenv $ eb setenv MY_VARIABLE=my_value
Deploying to Heroku is a joy. Just setup a git remote, and then you can run:
$ git push heroku master
The prompt will give you back the focus as soon as the deployment is done. That's great, you'll see all the steps (
, etc.) running and can quickly identify a problem if something goes wrong (usually, there's an issue with the assets). Also, once the command is done, you know
that your app is being restarted and the new version available. If you want zero-downtime deployment, you can try the preboot
feature on your app (in that case, you don't know exactly when the new version is available).
On AWS Elastic Beanstalk, it's a bit different. You have to run:
$ eb deploy
The thing is, you don't get nice messages, you don't see the progress, and you don't really know why something is failing. For instance, I have an issue with the
step, the machine on which it was running was too small (not enough RAM / no swap). How can you get a better understanding of how your deployment is going?
Here's what I do, I open a new tab, and run:
$ eb ssh ssh> tail -f /var/log/eb-activity.log
This way I can follow the deployment.
On Heroku, after a deploy, you need to run the database migrations.
$ heroku run rake db:migrate
With AWS Elastic Beanstalk, this command will be run automatically, so nothing to do after the
On Heroku, you can easily launch a rails console with:
$ heroku run rails c
On AWS Beanstalk, you need to first ssh to the server:
$ eb ssh ssh> cd /var/app/current && bin/rails c
On Heroku, you can tail all the application logs to see incoming requests and 500 with
$ heroku logs --tail
On AWS Beanstalk, you need to SSH first again:
$ eb ssh ssh> cd /var/app/current && tail -f log/*.log
AWS Beanstalk can auto-scale where Heroku won't (you have to manually run
commands), but overall, from my experience, I think that Heroku is till ahead of AWS Beanstalk when it comes to fully trusting a PaaS with my app.