[Juju Adventure] Live testing
September 26, 2012 1 Comment
If you thought I had concluded my blog series on demonstrating how Ubuntu is the best environment to write up “connected” or “cloud backend” Android Apps, think again!
So far this is what we covered:
- Proof that you can access a Juju local environment from the Android Emulator done!
- Using a few charms from the charm store plus a custom one, set up a MySQL database that can be exposed through a web service with simple commands/steps - done!
- Develop a TODO list android app and connect it to the web service, so they talk to each other. – done!
The next step is “How to test that it all works on a production environment”. If you have tested to death both your Android application and your web service locally, it is time to check if they will still work in real life. How do we do this? With few simple commands, we are going to deploy the same web service into the Amazon Cloud, and the application in a mobile phone. All managed from the comfort of my Ubuntu Desktop.
Deploying to Amazon Web Services (AWS)
The only pre-requisite here is that you do have an AWS account. Once you are logged into the AWS website, you can find the credentials that you will need to set up your juju environment. You can find a tutorial on how to set up your Elastic Compute Cloud (ec2) environment –> here.
The required information for Juju is stored in the environment.yaml file in the ~/.juju folder. In the following sample file you can see that two environments have been defined:
- “local” is the environment that I have been using in my PC to test my web service using LXC containers.
- “aws” gives Juju the information required to deploy services using my Amazon account.
- “local” is set as default. This means that if I just run “juju bootstrap” this command applies to the local environment. To bootstrap the AWS environment, I would do “juju bootstrap -e aws”.
default: local environments: aws: type: ec2 access-key: YOUR-ACCESS-KEY-GOES-HERE secret-key: YOUR-SECRET-KEY-GOES-HERE control-bucket: juju-faefb490d69a41f0a3616a4808e0766b admin-secret: 81a1e7429e6847c4941fda7591246594 default-series: precise juju-origin: ppa ssl-hostname-verification: true local: type: local control-bucket: juju-a14dfae3830142d9ac23c499395c2785999 admin-secret: 6608267bbd6b447b8c90934167b2a294999 default-series: precise juju-origin: distro data-dir: /home/victorp/myjuju_data
With my environments now configured, it’s time to deploy my services. This first step is to bootstrap my environment:
juju bootstrap -e aws
With the command completed successfully, I can check the status and I will see that the juju control instance is now up and running in Amazon:
juju status -e aws
2012-09-19 11:43:34,248 INFO Connected to environment.
machines:
0:
agent-state: running
dns-name: ec2-75-101-189-208.compute-1.amazonaws.com
instance-id: i-0e4f7174
instance-state: running
services: {}
2012-09-19 11:43:35,322 INFO 'status' command finished successfully
Lets continue deploying the services. As I am only doing testing, I want to pay the minimum for it, it will ask juju to set a constrain to only use micro instances. Then I will deploy a mysql and a lamp service:
juju set-constraints instance-type=t1.micro -e aws juju deploy mysql -e aws juju deploy --repository ~/mycharm local:lamp -e aws juju set lamp website-database="android_todo" -e aws juju set lamp website-bzr="lp:~vtuson/+junk/mytodo_web" -e aws juju expose lamp -e aws juju add-relation lamp mysql -e aws
With all my services now running I can go to the Amazon EC2 instance console and see how they have been deployed as micro instances. I can now also enter the public address for my lamp service and see the ToDo list table as expected.
Testing the Android App on a real phone
Running Juju status, I can retrieve the public url for the lamp service and I replace the uri vairable in the TodoSourceData class with “ec2-107-22-151-171.compute-1.amazonaws.com/database.php”. The next step is to plug a HTC Desire set up on debug mode into my laptop’s usb port. The rest is taken care by the Android Eclipse plug-ins. When I click the run project button, I am presented with a choice of targets:
I just need to press “OK” and my ToDo app is launched in the handset. Opening the menu options and pressing “Sync” fetches the ToDo data from the Amazon services, as expected:
That is all for today! Let me know if you have any suggestions on what else I should cover on this blog series.



Pingback: 3 ways to shape up your development environment - Droidcon London 2012