class Jets::Dotenv::Ssm
def fetch_ssm_value(key, value)
def fetch_ssm_value(key, value) name = value.start_with?("/") ? value : "/#{Jets.config.project_name}/#{Jets.env}/#{value}" response = ssm.get_parameter(name: name, with_decryption: true) response.parameter.value rescue Aws::SSM::Errors::ParameterNotFound @missing << [key, value, name] '' end
def initialize(variables={})
def initialize(variables={}) @variables = variables @missing = [] end
def interpolate!
def interpolate! interpolated_variables = @variables.map do |key, value| if value[SSM_VARIABLE_REGEXP] value = fetch_ssm_value(key, $1) end [key, value] end interpolated_variables.each do |key, value| ENV[key] = value end if @missing.empty? interpolated_variables.to_h # success else message = "Error loading .env variables. No matching SSM parameters found for:\n".color(:red) message += @missing.map { |k,v,n| " #{k}=ssm:#{v} # ssm name: #{n}"}.join("\n") abort message end end
def ssm
def ssm @ssm ||= Aws::SSM::Client.new end