Deploying Apps on Public Clouds¶
Juju allows deploying charm/bundles on different clouds, including public clouds like AWS, Azure, Google.
We explain here how to install Juju and then to use it for deploying applications on the Amazon Web Services cloud.
Install the software¶
We assume you have a VM running Ubuntu Xenial (16.04), where to install the Juju controller. Follow the steps in the Quick Start Guide on VM if you don’t have one.
For installing Juju on a different platform, see the Getting Started with Juju.
Login to your node and do the following.
Install Juju by doing this:
$ sudo add-apt-repository -u ppa:juju/stable $ sudo apt install juju
Select the public cloud¶
You can see which clouds are available by doing:
$ juju clouds
The output should look like this:
Cloud Regions Default Type Description aws 12 us-east-1 ec2 Amazon Web Services aws-china 1 cn-north-1 ec2 Amazon China aws-gov 1 us-gov-west-1 ec2 Amazon (USA Government) azure 18 centralus azure Microsoft Azure azure-china 2 chinaeast azure Microsoft Azure China cloudsigma 5 hnl cloudsigma CloudSigma Cloud google 4 us-east1 gce Google Cloud Platform joyent 6 eu-ams-1 joyent Joyent Cloud rackspace 6 dfw rackspace Rackspace Cloud localhost 1 localhost lxd LXD Container Hypervisor
Select the cloud and region where you want to operate:
$ juju set-default-region aws us-east-1
You need to have an account on AWS and obtain the credentials to use for that account. Login to your EC2 Management Console, then select, from your account name on the top menu bar, My Security Credentials, then click on Continue to Security Credentials. Then select Access Keys (Access Key ID and Secret Access Key) and Create New Access Key.
Note the two values Access Key ID and Secret Access key and use them when prompted to set your credentials by doing:
$ juju add-credential aws Enter credential name: $NAME Using auth-type "access-key". Enter access-key: Enter secret-key: Credentials added for cloud aws.
You can choose any name for $NAME.
Create a controller¶
Before you can start deploying applications, Juju needs to create a controller for the AWS cloud. The controller manages the models you create to host the applications. A model groups the VMs that support an application.
The juju bootstrap command is used to create the controller. The command expects a cloud name and region to use:
$ juju bootstrap aws/us-east-1
You can check that the controller has been created:
$ juju controllers
This will return a list of the controllers known to Juju, which at the moment is the one we just created:
Use --refresh flag with this command to see the latest information. Controller Model User Access Cloud/Region Models Machines HA Version aws-us-east-1* default admin superuser aws/us-east-1 2 1 none 2.0.2
The following command shows the currently active controller, model, and user:
$ juju whoami
In our example, the output should look like this:
Controller: aws-us-east-1 Model: default User: admin
Juju is now ready to deploy applications from among the hundreds included in the Juju charm store.
We will show as an example, how to deploy a MediaWiki site:
$ juju deploy cs:bundle/mediawiki-single
This will fetch a bundle from the Juju store. A bundle is a pre-packaged set of applications, in this case a ‘MediaWiki’ CMS, and a database to run with it. Juju will install both applications and add a relation between them - this is part of the magic of Juju: it isn’t just about deploying software, Juju also knows how to connect it all together.
Installing shouldn’t take long. You can check on how far Juju has got by running the command:
$ juju status
When the applications have been installed, the output of the above command will look something like this:
Model Controller Cloud/Region Version default aws-us-east-1 aws/us-east-1 2.0.2 App Version Status Scale Charm Store Rev OS Notes mediawiki unknown 1 mediawiki jujucharms 3 ubuntu mysql unknown 1 mysql jujucharms 29 ubuntu Unit Workload Agent Machine Public address Ports Message mediawiki/0* unknown idle 0 184.108.40.206 80/tcp mysql/0* unknown idle 1 220.127.116.11 Machine State DNS Inst id Series AZ 0 started 18.104.22.168 i-0f5dd439179e63af4 trusty us-east-1a 1 started 22.214.171.124 i-00f1ec62d532cea8d trusty us-east-1b Relation Provides Consumes Type db mediawiki mysql regular cluster mysql mysql peer
Expose the Service¶
In order to make your service publicly accessible, you will have to change the cloud provider firewall settings. You can do this from the CLI, with the command:
$ juju expose mediawiki
Alternatively, this can be done from the Juju GUI, by selecting the application to expose, click on the Expose option and select the check mark to turn it On.
For more details, see Exposing Applications.
Access the Service¶
From the juju status output, we can see that the IP address for the MediaWiki site we have created is 126.96.36.199. Open a browser and enter that address to see the site.
Note: To remove all the applications in the model you just created, it is often quickest to destroy the model with the command juju destroy-model default and then create a new model, by doing juju add-model default.