module EnvParameterStore

Constants

DEFAULT_ENV_FILENAME
VERSION

Public Class Methods

inject(filename = DEFAULT_ENV_FILENAME) click to toggle source

Inject secrets from AWS Systems Manager Parameter Store to `ENV`. secrets list is listed on `.secret`. EnvParameterStore will be overwrite if corresponding value exists @param [String] filename @return [Hash] env

# File lib/env_parameter_store.rb, line 43
def inject(filename = DEFAULT_ENV_FILENAME)
  filename = File.expand_path(filename.to_s)
  config = load_config(filename)
  secrets = fetch_secrets(config)
  ENV.update(secrets)
end

Private Class Methods

fetch_secrets(config) click to toggle source
# File lib/env_parameter_store.rb, line 61
def fetch_secrets(config)
  client = Aws::SSM::Client.new
  resp = client.get_parameters(
    names: config.parameter_names,
    with_decryption: true,
  )
  unless resp.invalid_parameters.empty?
    raise InvalidParameterError.new(resp.invalid_parameters)
  end
  resp.parameters.each_with_object({}) do |parameter, secrets|
    key = config.to_name(parameter.name)
    secrets[key] = parameter.value
  end
end
load_config(filename) click to toggle source
# File lib/env_parameter_store.rb, line 52
def load_config(filename)
  config_json = JSON.parse(File.read(filename))
  EnvParameterStore::Config.new(config_json)
rescue Errno::ENOENT
  raise NoSuchFileError.new(filename)
rescue JSON::ParserError
  raise InvalidJSONError.new(filename)
end