Skip to content

Utility to interact with AWS SSM Parameter Store

License

Notifications You must be signed in to change notification settings

TheDataShed/param

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

param

Build Status

Introduction

param is a cli tool for talking to AWS Parameter Store. Copy parameters directly to your clipboard.

param uses Cobra, a library providing a simple interface to create powerful CLI interfaces similar to git & go tools.

param works with Linux and MacOS. It also supports bash and zsh completion.

Install

You can install param by downloading the latest binary from the Releases page or by compiling from source with go.

go get github.com/thedatashed/param

This should build a binary at $GOPATH/bin/param

Add $GOPATH/bin to your PATH, or move param to somewhere already on your PATH.

Curl

Run the below command to download the 1.7.2 binary and add it to /usr/local/bin.

Linux

curl -LO https://github.com/TheDataShed/param/releases/download/1.7.2/param-linux-amd64 && \
chmod +x param-linux-amd64 && \
sudo mv param-linux-amd64 /usr/local/bin/param

MacOS

curl -LO https://github.com/TheDataShed/param/releases/download/1.7.2/param-darwin-amd64 && \
chmod +x param-darwin-amd64 && \
sudo mv param-darwin-amd64 /usr/local/bin/param

Usage

Make sure your terminal session has the correct AWS credentials.

Below is a brief overview for each command. Full docs for each command can be found at /docs.

Copy

Copy a parameter to your clipboard:

$ param copy parameter_name

You can optionally show the parameter value in your console with the -v flag:

$ param copy parameter_name -v
password123

Auto-completion

With shell completion enabled, you can press tab to auto-complete the parameter names.

List

Get a sorted list of parameters in SSM with optional prefix(es):

$ param list
parameter.name.key
parameter2.name.password
...
$ param list -p prefix1,prefix2
prefix1.dev.password
prefix1.prod.password
prefix2.key

Set

Set a parameter with type SecureString:

$ param set parameter_name password123

If the parameter already exists, you must specify the -f flag to overwrite it:

$ param set parameter_name password456 -f

Auto-completion

With shell completion enabled, you can press tab to auto-complete the parameter names.

Show

If you'd like to print out the decrypted parameter without copying it the clipboard, you can use:

$ param show parameter_name
password123

Auto-completion

With shell completion enabled, you can press tab to auto-complete the parameter names.

Shell Completion

param completion (bash|zsh) outputs shell completion code for the specified shell (bash or zsh). The shell code must be evaluated to provide interactive completion of param commands. This can be done by sourcing it from ~/.bashrc or ~/.zshrc

Installation

bash

Source the bash completion script every time you start a shell by adding a line to your ~/.bashrc file:

source <(param completion bash)

You can also run this command to append it for you:

printf "
# param shell completion
source <(param completion bash)
" >> $HOME/.bashrc
source $HOME/.bashrc

Caching

Because the call to SSM can be quite slow, param copy caches the list of parameter names by exporting an array named PARAM_CACHE.

You can clear the cache by unsetting the cache array:

unset PARAM_CACHE

You can stop caching entirely by setting the PARAM_NO_CACHE variable to 1:

export PARAM_NO_CACHE=1

Docs

Docs for each command can be found at /docs.

They are generated by Cobra by running go run build/generate_docs.go.

CI

param uses Travis CI to test each commit. It also handles GitHub releases when a new tag is pushed to GitHub.

TODO

  • New Commands
    • Delete command - Command to delete parameters
      • Maybe with a --yes flag to confim.
  • Improvements
    • Add a flag to specify parameter type. Currently only works with SecureStrings.
    • Better logging and a verbose option to see what calls are made to AWS.
    • Copy timeout.
      • Configurable timeout for copying a parameter so it doesn't stay in the clipboard indefinitely.
    • Hidden input to param set so you don't have the value in your shell history.
  • Shell Completion
    • zsh completion doesn't seem to work.
    • Update or delete the bash completion cache after creating/deleting parameters
    • Add bash completion for other subcommands and flags.
    • Command to reset the cache.
  • Write Tests
  • Improve Documentation
    • More Examples
    • Write about how to set up AWS variables/profile. (And what capabilities are required)
  • Localstack
    • param list doesn't work without a -p argument.