GithubHelp home page GithubHelp logo

garyd203 / ssmash Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 129 KB

ssmash - Simple application configuration management for AWS SSM Parameter Store

Home Page: https://ssmash.readthedocs.io

License: GNU Affero General Public License v3.0

Python 96.65% Makefile 3.35%
ssm-parameter-store aws infrastructure-as-code application-configuration hacktoberfest

ssmash's Issues

Support older Python versions

Versions required:

  • Python 2.7
  • Python 3 up to v3.5

Work (I think):

  • Setup test runs with those versions
  • Use six where necessary

Note that this is likely to be bigger than it looks, because flying-circus is also Python v3.6+ (for the same reasons as us, mainly because f strings and type annotations are appealing)

Provide CLI options to upload to AWS

There is a non-trivial amount of shell scripting fuss involved in calling ssmash to create a cloud formation template, then uploading that template to cloudformation (with the right parameters), then potentially restarting your ECS service or whatever else.

Add some CLI options to make this process built-in to ssmash. It's within the scope of what we want to do ("make it easy to manage application configuration in SSM Parameter Store"), and would deliver reasonable value.

We don't really want to re-implement the create-or-update semantics of the AWS CLI deploy command, but perhaps see https://github.com/aws/aws-cli/blob/develop/awscli/customizations/cloudformation/deploy.py for a minimal amount of skeleton code we could copy

As a user I can specify AWS tags for SSM parameters

Support AWS tags specified at any node in the input configuration, which get applied to that node and lower. Specify them using a custom YAML tag? or perhaps just a well-defined and unusual field name.

Also support tags specified at the command line, to be applied to the entire tree

Invalidation occurs too early, before old parameters are deleted

When an ECS Service (or other dependency, like a Lambda Function) is invalidated after changing the parameters, we implement this in CloudFormation by "updating" a custom resource. In terms of the CloudFormation lifecycle, this means that we create + update SSM parameters, then restart the dependent service, and then delete SSM Parameters that have been removed. Obviously, this means that the service is restarted too early, and will detect the old parameters that should be removed :-(

We can solve this by hooking into the CloudFormation "Delete" signal, and using that to perform a second restart if necessary.

Specifically, we can:

  • Ensure the resource delete is not unnecessarily invoked by having a resource ID that reflects the dependent parameters (eg. a hash of all their names)
  • Have the resource delete only restart after dependent parameters have been deleted (only restart when required) by getting it to introspect it's own stack and wait for any SSM Parameter Resources that are being deleted.

h/t @v-do for finding the bug

Installation fails due to conflicting pyyaml version

Hi, users are unable to run ssmash due to dependency conflict with pyyaml package. As shown in the following full dependency graph of ssmash, ssmash requires pyyaml >=5.1,<6,while flying-circus requires <5.2.0,>=5.1.1.

According to pip’s “first found wins” installation strategy, pyyaml 5.2 is the actually installed version. However, pyyaml 5.2 does not satisfy PyYAML<5.2.0,>=5.1.1.

Dependency tree-----------

ssmash - 2.0.1
| +- click(install version:7.0 version range:>=7.0,<8)
| +- flying-circus(install version:0.7.2 version range:>=0.7,<0.8)
| | +- attrs(install version:19.3.0 version range:>=18.2.0)
| | +- inflection(install version:0.3.1 version range:<0.4,>=0.3.1)
| | +- pyyaml(install version:3.13 version range:<5.2.0,>=5.1.1)
| +- inflection(install version:0.3.1 version range:==0.3.1)
| +- pyyaml(install version:5.2 version range:>=5.1,<6)

Thanks for your help.
Best,
Neolith

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.