Skip to main content

⭐ AWS CloudFormation deployment for human, Enable terraform plan, terraform apply styled deployment.

Project description

Documentation Status https://github.com/MacHu-GWU/aws_cloudformation-project/workflows/CI/badge.svg https://codecov.io/gh/MacHu-GWU/aws_cloudformation-project/branch/main/graph/badge.svg https://img.shields.io/pypi/v/aws_cloudformation.svg https://img.shields.io/pypi/l/aws_cloudformation.svg https://img.shields.io/pypi/pyversions/aws_cloudformation.svg https://img.shields.io/badge/Release_History!--None.svg?style=social https://img.shields.io/badge/STAR_Me_on_GitHub!--None.svg?style=social
https://img.shields.io/badge/Link-Document-blue.svg https://img.shields.io/badge/Link-API-blue.svg https://img.shields.io/badge/Link-Source_Code-blue.svg https://img.shields.io/badge/Link-Install-blue.svg https://img.shields.io/badge/Link-GitHub-blue.svg https://img.shields.io/badge/Link-Submit_Issue-blue.svg https://img.shields.io/badge/Link-Request_Feature-blue.svg https://img.shields.io/badge/Link-Download-blue.svg

Welcome to aws_cloudformation Documentation

AWS CloudFormation deployment for human, Enable terraform plan, terraform apply styled deployment.

Features:

  1. Preview the change set details before deployment.

  2. Automatically upload big template to S3 before deployment, even for nested template.

  3. Support SYNC call for deployment and deletion, wait until it success or fail (the original API is ASYNC call).

  4. Allow prompt for user to enter “YES” to proceed.

  5. Provide hyperlink for one-click to jump to the Console to preview.

Talk is cheap, show me the code

Console Output:

============== Deploy stack: 'cottonformation-deploy-stack-test' ===============
  preview stack in AWS CloudFormation console: https://console.aws.amazon.com/cloudformation/home?#/stacks?filteringStatus=active&filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false
  preview **change set details** at: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/changesets/changes?stackId=arn:aws:cloudformation:us-east-1:111122223333:stack/cottonformation-deploy-stack-test/0c5596c0-76b4-11ed-92b1-0a0bcad48579&changeSetId=arn:aws:cloudformation:us-east-1:111122223333:changeSet/cottonformation-deploy-stack-test-2022-12-08-04-51-58-892/8c88d0c1-d5c7-495b-820e-29e5752a04d4
  wait for change set creation to finish ...
    on 1 th attempt, elapsed 5 seconds, remain 55 seconds ...
    reached status CREATE_COMPLETE
+---------------------------- Change Set Statistics -----------------------------
| 🟢 Add        1 Resource
|
+--------------------------------------------------------------------------------
+----------------------------------- Changes ------------------------------------
| 🟢 📦 Add Resource:        Secret1    AWS::SecretsManager::Secret
|
+--------------------------------------------------------------------------------
    need to execute the change set to apply those changes.
  preview **create stack progress** at: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/stackinfo?filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false&stackId=arn:aws:cloudformation:us-east-1:111122223333:stack/cottonformation-deploy-stack-test/0c5596c0-76b4-11ed-92b1-0a0bcad48579&filteringStatus=active
  wait for deploy to finish ...
    on 2 th attempt, elapsed 10 seconds, remain 50 seconds ...
    reached status 🟢 'CREATE_COMPLETE'
  done


============== Deploy stack: 'cottonformation-deploy-stack-test' ===============
  preview stack in AWS CloudFormation console: https://console.aws.amazon.com/cloudformation/home?#/stacks?filteringStatus=active&filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false
  preview **change set details** at: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/changesets/changes?stackId=arn:aws:cloudformation:us-east-1:111122223333:stack/cottonformation-deploy-stack-test/0c5596c0-76b4-11ed-92b1-0a0bcad48579&changeSetId=arn:aws:cloudformation:us-east-1:111122223333:changeSet/cottonformation-deploy-stack-test-2022-12-08-04-52-39-134/8e1fd139-7a37-43dd-9378-40a328970036
  wait for change set creation to finish ...
    on 1 th attempt, elapsed 5 seconds, remain 55 seconds ...
    reached status CREATE_COMPLETE
+---------------------------- Change Set Statistics -----------------------------
| 🟢 Add        1 Resource
| 🔵 Modify     1 Resource
|
+--------------------------------------------------------------------------------
+----------------------------------- Changes ------------------------------------
| 🟢 📦 Add Resource:        Secret222    AWS::SecretsManager::Secret
| 🔵 📦 Modify Resource:     Secret1      AWS::SecretsManager::Secret
|     🔵 💡 Properties:      Secret1      AWS::SecretsManager::Secret.Description
|     🔵 💡 Tags:            Secret1      AWS::SecretsManager::Secret
|
+--------------------------------------------------------------------------------
    need to execute the change set to apply those changes.
  preview **update stack progress** at: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/stackinfo?filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false&stackId=arn:aws:cloudformation:us-east-1:111122223333:stack/cottonformation-deploy-stack-test/0c5596c0-76b4-11ed-92b1-0a0bcad48579&filteringStatus=active
  wait for deploy to finish ...
    on 3 th attempt, elapsed 15 seconds, remain 45 seconds ...
    reached status 🟢 'UPDATE_COMPLETE'
  done


============== Deploy stack: 'cottonformation-deploy-stack-test' ===============
  preview stack in AWS CloudFormation console: https://console.aws.amazon.com/cloudformation/home?#/stacks?filteringStatus=active&filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false
  preview **change set details** at: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/changesets/changes?stackId=arn:aws:cloudformation:us-east-1:111122223333:stack/cottonformation-deploy-stack-test/0c5596c0-76b4-11ed-92b1-0a0bcad48579&changeSetId=arn:aws:cloudformation:us-east-1:111122223333:changeSet/cottonformation-deploy-stack-test-2022-12-08-04-53-07-499/6edbcdf2-8e27-463f-bc5f-35587463fceb
  wait for change set creation to finish ...
    on 2 th attempt, elapsed 10 seconds, remain 50 seconds ...
    reached status CREATE_COMPLETE
+---------------------------- Change Set Statistics -----------------------------
| 🟢 Add        1 Resource
| 🔵 Modify     1 Resource
| 🔴 Remove     1 Resource
|
+--------------------------------------------------------------------------------
+----------------------------------- Changes ------------------------------------
| 🟢 📦 Add Resource:        Secret33333    AWS::SecretsManager::Secret
| 🔵 📦 Modify Resource:     Secret222      AWS::SecretsManager::Secret
|     🔵 💡 Properties:      Secret222      AWS::SecretsManager::Secret.Description
|     🔵 💡 Metadata:        Secret222      AWS::SecretsManager::Secret
|     🔵 💡 CreationPolicy:  Secret222      AWS::SecretsManager::Secret
|     🔵 💡 UpdatePolicy:    Secret222      AWS::SecretsManager::Secret
|     🔵 💡 Tags:            Secret222      AWS::SecretsManager::Secret
| 🔴 📦 Remove Resource:     Secret1        AWS::SecretsManager::Secret
|
+--------------------------------------------------------------------------------
    need to execute the change set to apply those changes.
  preview **update stack progress** at: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/stackinfo?filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false&stackId=arn:aws:cloudformation:us-east-1:111122223333:stack/cottonformation-deploy-stack-test/0c5596c0-76b4-11ed-92b1-0a0bcad48579&filteringStatus=active
  wait for deploy to finish ...
    on 3 th attempt, elapsed 15 seconds, remain 45 seconds ...
    reached status 🟢 'UPDATE_COMPLETE'
  done


=============== Remove stack 'cottonformation-deploy-stack-test' ===============
  preview stack in AWS CloudFormation console: https://console.aws.amazon.com/cloudformation/home?#/stacks?filteringStatus=active&filteringText=cottonformation-deploy-stack-test&viewNested=true&hideStacks=false
  wait for delete to finish ...
    on 1 th attempt, elapsed 5 seconds, remain 55 seconds ...
    already deleted.
  done

CloudFormation declaration, see cottonformation:

# -*- coding: utf-8 -*-

import cottonformation as cf
from cottonformation.res import secretsmanager


def make_tpl_1() -> cf.Template:
    """
    Create Secret1
    """
    tpl = cf.Template()

    secret1 = secretsmanager.Secret(
        "Secret1",
        p_Name="aws_cft_secret1",
        p_Description="This is Secret 1",
        p_Tags=[
            cf.Tag(p_Key="Creator", p_Value="Alice"),
            cf.Tag(p_Key="Description", p_Value="Hello"),
        ]
    )
    tpl.add(secret1)

    return tpl


def make_tpl_2() -> cf.Template:
    """
    Modify Secret1
    Create Secret222
    """
    tpl = make_tpl_1()

    secret1: secretsmanager.Secret = tpl.Resources["Secret1"]
    secret1.p_Description = "This must be Secret 1"
    secret1.p_Tags = [
        cf.Tag(p_Key="Creator", p_Value="Bob"),
        cf.Tag(p_Key="Env", p_Value="Dev"),
    ]

    secret2 = secretsmanager.Secret(
        "Secret222",
        p_Name="aws_cft_secret2",
        p_Description="This is Secret 2",
    )
    tpl.add(secret2)

    output_secret2_arn = cf.Output(
        "Secret222Arn",
        Value=secret2.ref(),
    )
    tpl.add(output_secret2_arn)

    return tpl


def make_tpl_3() -> cf.Template:
    """
    Delete Secret1
    Modify Secret222
    Create Secret33333
    """
    tpl = make_tpl_2()

    tpl.remove(tpl.Resources["Secret1"])

    secret2: secretsmanager.Secret = tpl.Resources["Secret222"]
    secret2.p_Description = "This definitely be Secret 2"
    secret2.p_Tags = [
        cf.Tag(p_Key="Creator", p_Value="Cathy"),
        cf.Tag(p_Key="Env", p_Value="QA"),
    ]
    secret2.ra_Metadata = {"email": "cathy@email.com"}

    secret3 = secretsmanager.Secret(
        "Secret33333",
        p_Name="aws_cft_secret3",
        p_Description="This is Secret 3",
    )
    tpl.add(secret3)

    return tpl

Deployment Script:

# -*- coding: utf-8 -*-

from aws_cloudformation.api import deploy_stack, remove_stack
from aws_cloudformation.tests import bsm
from aws_cloudformation.tests.stacks.secretmanager_stack import (
    make_tpl_1,
    make_tpl_2,
    make_tpl_3,
)

stack_name = "cottonformation-deploy-stack-test"

deploy_stack(
    bsm,
    stack_name=stack_name,
    template=make_tpl_1().to_json(),
    skip_prompt=True, # by default, it prompt user input for YES / NO to proceed
    # skip_plan=False, # by default, it does plan first
    # wait=True, # by default, it waits the update to finish
)

deploy_stack(
    bsm,
    stack_name=stack_name,
    template=make_tpl_2().to_json(),
    skip_prompt=True,
)

deploy_stack(
    bsm,
    stack_name=stack_name,
    template=make_tpl_3().to_json(),
    skip_prompt=True,
)

remove_stack(
    bsm,
    stack_name=stack_name,
    skip_prompt=True,
)

Install

aws_cloudformation is released on PyPI, so all you need is:

$ pip install aws_cloudformation

To upgrade to latest version:

$ pip install --upgrade aws_cloudformation

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

aws_cloudformation-1.5.1.tar.gz (43.1 kB view details)

Uploaded Source

Built Distribution

aws_cloudformation-1.5.1-py2.py3-none-any.whl (44.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file aws_cloudformation-1.5.1.tar.gz.

File metadata

  • Download URL: aws_cloudformation-1.5.1.tar.gz
  • Upload date:
  • Size: 43.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.11

File hashes

Hashes for aws_cloudformation-1.5.1.tar.gz
Algorithm Hash digest
SHA256 2541f48089c45a83e85ee063d3cfe6b18fdab8c67b57268341cc3017a2015b0a
MD5 66e099e5145892c1ea2a63434c08b056
BLAKE2b-256 22aa876699f849ad80acf332aa9fd753d1e98a909136f853ecad5ca4bd3946d3

See more details on using hashes here.

File details

Details for the file aws_cloudformation-1.5.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for aws_cloudformation-1.5.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b363bb6528e5affee17937dfb3c2e757de6f63e6c49926756f7b40c2e32a94b3
MD5 c13fa0835f2f23caa390063e67ac4cc0
BLAKE2b-256 9bb56eb4a9c5a11bb56fd6ee1862f2bf4cb63f02e855e9057df0305a36a879f0

See more details on using hashes here.

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