Skip to main content

High level tools to manage an AWS infrastructure

Project description

=====================================
AWSTOOLS - high level tools for AWS
=====================================

AWSTOOLS is a Python package that provide modules and commands to manage an
infrastructure on `Amazon Web Services <http://aws.amazon.com>`_.

Awstools is driven by a set of conventions and choices to makes system
operations simple to the most. Awstools is mainly focused on managing multiple
isolated social/web/mobile architectures.


Main conventions and choices:

- Using one of the Amazon Web Service is better than a custom solution
- Operation system: Ubuntu LTS or newer
- Configuration system: `Puppet <http://puppetlabs.com>`_


At the moment awstools supports:

- `CloudFormation <http://aws.amazon.com/cloudformation>`_

- **ApplicationSettings** (awstools.applications)
Describe your application by declaring a set of *Pool* per *Environment*

- **cfn**: List, Create, Update, Delete, Inspect
Manage your AWS resources based on ApplicationSettings and cloudformation
templates

- `EC2 <http://aws.amazon.com/ec2>`_

- **ec2ssh**:
Connect to one or multiple instances in a handy way

- **awstools.fabric.populate_roledefs**:
Populate Fabric roles with EC2 instances using the tags.
fab -R App-Role cmd_run_on_all_app-role-*_instances



Installation
============

Python requirements:
- argh
- boto
- PyYaml


Configuration
=============

::

You must have a valid boto credentials provider to use the awstools.
See the `Boto tutorial <http://docs.pythonboto.org/en/latest/boto_config_tut.html>`_.

- A **configuration file** is searched in this order:

1. <specified by --config>
2. ./awstools.cfg
3. ~/.awstools.cfg
4. /etc/awstools.cfg

- An application settings file is searched in this order:

1. specified by --settings
2. specified by awstools configuration file


Testing
=======

Run the test with nose

::

pip install -r requirements-test.txt
nosetests


Examples
========

Command ec2ssh
--------------

::

$ ec2ssh MyInstanceByTagName
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-virtual x86_64)

ubuntu@tb-java-stage:~$


$ ec2ssh MyInstanceByTagName uptime
19:14:03 up 182 days, 4:49, 0 users, load average: 0.08, 0.06, 0.05


$ ec2ssh App-Role-* uptime
----- Command: uptime
----- Instances(2): App-Role-development,App-Role-production
Confirm? (Y/n)
----- i-a0b24444: ec2-12-12-12-12.compute-1.amazonaws.com 10.101.101.101
19:21:32 up 52 days, 3:51, 0 users, load average: 0.00, 0.01, 0.05
----- i-ce786666: ec2-23-23-23-23.compute-1.amazonaws.com 10.201.201.201
19:21:32 up 182 days, 4:56, 0 users, load average: 0.08, 0.04, 0.05
----- DONE


$ ec2ssh i-a0b24444 uptime
19:24:28 up 52 days, 3:54, 0 users, load average: 0.00, 0.01, 0.05


$ ec2ssh 10.101.101.101 uptime
19:25:18 up 52 days, 3:55, 0 users, load average: 0.00, 0.01, 0.05


$ ec2ssh App1-*,App2-*,App3-Role-test uptime


Configuration
-------------

::

[cfn]
settings = ~/cloudformation/applications.yaml
templatedir = ~/cloudformation


Applications Settings
---------------------

::

Application: gmail
ShortName: gm
KeyName: google-secretkey
live: True
environments:
production:
storage:
template: storage.js
AvailabilityZones: us-east-1a,us-east-1b,us-east-1c
WebServerCapacity: 6
InstanceType: m1.xlarge
frontweb:
template: frontweb.js
AvailabilityZones: us-east-1a,us-east-1b
WebServerCapacity: 4
InstanceType: m1.medium
stage:
storage:
template: storage.js
AvailabilityZones: us-east-1a,us-east-1b
WebServerCapacity: 2
InstanceType: m1.small
frontweb:
template: frontweb.js
AvailabilityZones: us-east-1a,us-east-1b
WebServerCapacity: 2
InstanceType: m1.small
test:
frontweb:
template: frontweb.js
AvailabilityZones: us-east-1a,us-east-1b
WebServerCapacity: 2

The application *gmail* has a production, a staging and a test environment.
An environment is defined by two pools: *storage* and *frontweb*.
However in test you mock the storage and don't need a *storage* pool.
All those settings will be available for the CloudFormation templates.



Contribute
==========

Want to contribute, report a but of request a feature ? The development goes on
at Ludia's BitBucket account:

- **Report bugs**: https://bitbucket.org/pior/awstools/issues
- **Fork the code**: https://bitbucket.org/pior/awstools
- **Download**: http://pypi.python.org/pypi/awstools


Credits
=======

* `Pior Bastida <pior@pbastida.net>`_ is the originator and main author.


Changelog for Awstools
======================


0.3.7 (2013-12-17)
------------------

- Fix wrong priority order when reading multiple configuration files


0.3.6 (2013-10-11)
------------------

- update author email
- cfnas: add subcommand metrics to control the ASG metrics collection


0.3.5 (2013-10-10)
------------------

- ec2ssh: add instance private hostname matching
- Move autoscale subcommands to a new cfnas command
- ec2ssh: add bash completion helpers
- Pylint


0.3.4 (2013-07-04)
------------------

- cfn batch-update: continue after a failure if user wants to


0.3.3 (2013-07-04)
------------------

- Add --force option to `cfn update` command
- Add a `cfn batch-update` command


0.3.2 (2013-06-11)
------------------

- Complete hgignore
- ec2ssh: enhance fallback when denying connection to multiple instances
- Fix wrong current_capacity displayed in autoscale update utility


0.3.1 (2013-03-13)
------------------

- fix *cfn setcapacity* setting 0 instead of the desired value


0.3 (2013-03-11)
----------------

- start using zest.releaser for versioning


0.2.3 (2013-02-01)
------------------

- display template description in cfn subcommands
- create subcommand "cfn activities"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

awstools-0.3.7.zip (38.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page