Utility to manage CloudFormation stacks using YAML configuration file
Project description
Stack-Manager
Utility to manage CloudFormation stacks based upon a Template (either local or in S3) and a YAML configuration file.
Uses ChangeSets to create or update CloudFormation stacks, allowing the ChangeSets to either be automatically applied or applied later (e.g. during a later phase of a build pipeline after review of the ChangeSet).
Configuration
The configuration file can either be a single YAML document containing the configuration for a stack for a specific environment and region, or can contain multiple documents for different deployments of that stack to different environments and regions.
Single Environment
The configuration combines together the different values that are typically passed to the CloudFormation command line when creating or updating a CloudFormation stack.
Environment: dev
StackName: "{{ Environment }}-StackManager-Integration"
Region: us-east-1
Parameters:
Environment: "{{ Environment }}"
Tags:
Application: StackManager
Environment: "{{ Environment }}"
Template: integration/template.yaml
Capabilities:
- CAPABILITY_NAMED_IAM
The configuration file makes use of Jinja2 templating to perform
replacements into the StackName
, Parameters
and Tags
values using the Environment
and Region
values.
It's also possible to make use of Jinja2 filters, for example to lowercase the Environment to pass into a parameter that is going to be used where it's required to be lowercase (e.g. in forming a bucket name):
Parameters: LowerEnvironment: "{{ Environment|lower() }}"
There is not currently support for defining and substituting arbitrary values.
Multiple Environments
---
Environment: all
StackName: "{{ Environment }}-StackManager-Integration-{{ Region }}"
Parameters:
Environment: "{{ Environment }}"
Tags:
Application: StackManager
Environment: "{{ Environment }}"
Template: integration/template.yaml
---
Environment: dev
Region: us-east-1
---
Environment: dev
Region: us-east-2
---
Environment: prod
Region: us-east-1
Tags:
CostCenter: 200
---
Environment: prod
Region: us-east-2
Tags:
CostCenter: 300
A multi-environment configuration can be used to combine all the configurations for different versions of a stack
across environments and regions, using inheritance from a specially named all
Environment to avoid the need
to repeat values.
Because of the special handling of the
all
Environment, it's not possible to deploy an environment namedall
.
Supported Configuration Values
Name | Required | Templated | Notes |
---|---|---|---|
Environment | Yes | No | Name of environment to be deployed |
Region | Yes | No | AWS region (e.g. us-east-1) - not required for the 'all' environment |
Parameters | No | Yes | Each parameter value is templated, and parameters are inherited from 'all' |
Tags | No | Yes | Each tag value is templated, and tags are inherited from 'all' |
Capabilities | No | No | List of capabilities (e.g. CAPABILITY_IAM) |
Template | No | No | Can be supplied on command line, so not required in configuration |
Usage
Stackmanager has the following commands:
deploy
- Create or update a CloudFormation stack for a specific environment/region using a ChangeSet. By default exits after creating the changeset, but can--auto-apply
.apply
- Apply a previously created ChangeSetdelete
- Delete an existing CloudFormation stackupload
- Uploads a local file to S3. Utility method to prevent the need to use the AWS CLI or other tools.
deploy
Usage: stackmanager deploy [OPTIONS]
Create or update a CloudFormation stack using ChangeSets.
Options:
-p, --profile TEXT AWS Profile, will use default or environment
variables if not specified
-c, --config TEXT YAML Configuration file [required]
-e, --environment TEXT Environment to deploy [required]
-r, --region TEXT AWS Region to deploy [required]
-t, --template TEXT Override template
--parameter TEXT... Override a parameter, can be specified multiple
times
--change-set-name TEXT Custom ChangeSet name
--auto-apply Automatically apply created ChangeSet
--help Show this message and exit.
apply
Usage: stackmanager apply [OPTIONS]
Apply a CloudFormation ChangeSet to create or update a CloudFormation
stack.
Options:
-p, --profile TEXT AWS Profile, will use default or environment
variables if not specified
-c, --config TEXT YAML Configuration file [required]
-e, --environment TEXT Environment to deploy [required]
-r, --region TEXT AWS Region to deploy [required]
--change-set-name TEXT ChangeSet to apply [required]
--help Show this message and exit.
delete
Usage: stackmanager delete [OPTIONS]
Delete a CloudFormation stack.
Options:
-p, --profile TEXT AWS Profile, will use default or environment
variables if not specified
-c, --config TEXT YAML Configuration file [required]
-e, --environment TEXT Environment to deploy [required]
-r, --region TEXT AWS Region to deploy [required]
--retain-resources TEXT Logical Ids of resources to retain
--help Show this message and exit.
Upload
Usage: stackmanager upload [OPTIONS]
Uploads a File to S3. This might be a large CloudFormation template, or a
Lambda zip file
Options:
-p, --profile TEXT AWS Profile, will use default or environment variables
if not specified
-r, --region TEXT AWS Region to upload to [required]
-f, --filename TEXT File to upload [required]
-b, --bucket TEXT Bucket to upload to [required]
-k, --key TEXT Key to upload to [required]
--help Show this message and exit.
CI/CD Pipeline support
Azure DevOps
Stackmanager will automatically detect when it is running in an Azure DevOps pipeline by looking for the
SYSTEM_TEAMPROJECTID
environment variable.
It will print ##vso
strings under the following circumstances:
deploy
has created a ChangeSet and it has not been auto-applied:
This sets a variable namedchange_set_name
containing thechange_set_name
that can be used with theapply
command in a later step/job/stage.
The name of the variable can be overridden by setting theCHANGE_SET_VARIABLE
environment variable.deploy
has created a ChangeSet but it contains no changes:
This logs a warning (##vso[task.logissue]
) and sets the status toSucceededWithIssues
(##vso[task.complete]
) allowing following steps/jobs/stages to be skipped by checking for theSucceededStatus
in a condition.deploy
orapply
fails when applying a ChangeSet:
This logs an error (##vso[task.logissue]
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file stackmanager-0.5.tar.gz
.
File metadata
- Download URL: stackmanager-0.5.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3766e91b01c520de271bd860db12cd10062cb1364146c8fa4a612cc39f49bd4 |
|
MD5 | 8737a1351bfc160276e7ad25c8ceeb64 |
|
BLAKE2b-256 | 98b13c33ff95ad1ff549a2de75f45e4d13fa5fdd4a9638f3248b438a1ea50b27 |
File details
Details for the file stackmanager-0.5-py3-none-any.whl
.
File metadata
- Download URL: stackmanager-0.5-py3-none-any.whl
- Upload date:
- Size: 14.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba27255d8b59ef7d80c60019cf84f083afab96d49bdabf60cbd5a3edefb4efe8 |
|
MD5 | dfa77754b53c9c9b8c855c6cf2dd8b56 |
|
BLAKE2b-256 | a2344f373bbfbc5ca0b97445e153fe84cb62dc9ddf2dc277f195c534bb00f8ac |