This is a very simple exploration of AWS Elastic Beanstalk from the EB CLI. To get started first install the [AWS CLI] (http://docs.aws.amazon.com/cli/latest/userguide/installing.html), then use
aws configure to configure it for your account and region. Then install the EB CLI.
There are numerous commands with in the EB CLI, and this walkthrough isn’t going to cover all of them. Here are the commands, we won’t be covering:
eb abort- cancel env configuration changes
eb appversion- manage the application versions lifecycle
eb clone- clone the env
eb codesource- enable/disable integration with AWS CodeCommit
eb labs- support for future functionality testing from CLI
eb platform- manages platforms and environments
eb restore- fire up terminated environment
eb scale- adjust scaling for an environment
eb printenv- prints environment vars
eb swap- does a swap URL for a blue/green sort of dealie
eb upgrade- upgrade the environment
Now we have the less-than-super-smart options… seriously, who uses a CLI and needs these commands?
eb console- open browser to eb console..
eb ssh- ssh into a running instance…
During this scenario we are going to create a Docker hosted application using a preconfigured container and deploy it in us-west-2. You will need to install Docker and have the daemon running.
Create a super simple app by creating a directory then an app file, a requirements file then a docker file
$ mkdir flask-app $ cd flask-app $ touch application.py $ touch requirements.txt $ touch Dockerfile
Add this text to the application.py file:
# application.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'yo, docker! yo, docker!' if __name__ == '__main__': app.run()
then this single line to the requirements.txt file:
then this line to the Dockerfile
then build the container and run it…
$ docker build -t my-app-image . $ docker run -it --rm -p 3000:8080 my-app-image
In your favorite browser access the running application at
http://localhost:3000/ and confirm it is running. Assuming it is let’s package the application for use with Elastic Beanstalk using the eb CLI tool.
$ mv Dockerfile Dockerfile.local $ zip ../myapp.zip -r * .[^.]*
eb Command Line Tool
To setup an Elastic Bean Stalk environment from the command line, initialize the eb CLI tool, picking us-west2 as the region, create a new application, answer yes you are using python and select the “Python 3.4 (Preconfigured - Docker)”, no SSH.
$ cd flask-app $ eb init
Annoyingly, there is no way to confirm application creation worked from the CLI… assume it did. Or look in the Console.
Now to create the environment. By default, the
eb create <my-environment-name> command makes a load balanced with t2.micro instances. That is close to what we want… but let’s customize it with a single instance and confirm we are using a t2.micro to avoid charges as much as possible:
eb create flask-app-env -r us-west-2 --single --instance_type t2.micro
eb create process, press ctrl-c and then use the
eb events command to tail the events stream then
eb health to confirm the good health of the environment. I really like using
eb status for a high level overview of an application so try that out as well. To complete the fun, do
eb open to open the live application in browser window.
Now, let’s update the application by changing the application.py file text like:
# application.py ---snip--- def hello_world(): return 'yo, baby, yo baby, yo. Docker, yeah!' ---snip---
then testing it by starting the application local:
eb run local
and accessing the locally running application by typing
localhost:3000 into your browser…
Super chill, that works. Let’s deploy the application again by doing:
Done with this part of the scenario, let’s terminate the environment.
eb terminate flask-app-env
then delete the application… wait, there is NO way to delete an app using the eb CLI. Instead use the AWS CLI:
aws elasticbeanstalk delete-application --application-name flask-app