Welcome to Atomic Cloud

All documentation versions can be found here.

Atomic Cloud is a library to assist in building out cloud infrastructure. The intention was to simplify the existing APIs and ensure that every action against the environment was an atomic action, either each function call succeeded completely or failed completely.

Why Atomic Cloud

This project was born out of the desire to move beyond JSON/YAML configuration files and use code to fully automate the creation and management of cloud environments.

Design Approach

Our primary objective is to make automating deployments on Kubernetes as simple and easy as possible. We are taking both a minimalist and opinionated approach to achieve this:

  1. Create the smallest API that can provide the most functionality. That means cutting out functions that are redundant or infrequently used - focusing on the 20% that gets 80% or more of what you need done.

  2. Reduce the complexity and number of parameters that need to be passed in to perform a given function.

  3. Provide complete documentation with examples.

For AWS, the CloudFormation templates have been convenient for creating and groups of resources or “stacks”. Since every CloudFormation template results in a stack, which can later be removed as a complete unit, we don’t have the danger of orphaned resources that continue to generate a monthly charge. In addition, we provide a function that writes a teardown script of stacks created using our CloudFormation functions.

For this reason, the approach of this library is to have stacks created and deleted using CloudFormation templates, and the main enhancement this library provides is a rich query API to retrieve information about the environment.

Advanced Templating

While standard CloudFormation templates are usable by Atomic Cloud, we also allow you to include advanced templating via Jinja 2. Traditionally, CloudFormation templates include a ‘Parameters’ section for user input. Since this is an automated process, we aren’t concerned with that human element and instead support parameterization through a dict given to our create_stack() function. For template formatting information, visit the Jinja 2 documentation site. Alternatively, browse our test folder to see how we use templating in our sample stack yamls. Most importantly, this templating allows you to include more complicated control structures in your configuration; Jinja makes loops, comparators, and accessible by removing the traditional confines of the yaml format.