Module: MovableInk::AWS::SSM

Included in:
MovableInk::AWS
Defined in:
lib/movable_ink/aws/ssm.rb

Instance Method Summary collapse

Instance Method Details

#extract_parameters(parameters, path) ⇒ Object



53
54
55
56
57
# File 'lib/movable_ink/aws/ssm.rb', line 53

def extract_parameters(parameters, path)
  parameters.map do |param|
    [ param.name.gsub("#{path}/", ''), param.value ]
  end.to_h
end

#get_role_secrets(environment: mi_env, role:, region: nil, failregion: nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/movable_ink/aws/ssm.rb', line 41

def get_role_secrets(environment: mi_env, role:, region: nil, failregion: nil)
  path = "/#{environment}/#{role}"
  run_with_backoff_and_client_fallback(region, failregion) do |ssm|
    ssm.get_parameters_by_path(
      path: path,
      with_decryption: true
    ).inject({}) do |secrets, resp|
      secrets.merge!(extract_parameters(resp.parameters, path))
    end
  end
end

#get_secret(environment: mi_env, role:, attribute:, region: nil, failregion: nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/movable_ink/aws/ssm.rb', line 27

def get_secret(environment: mi_env, role:, attribute:, region: nil, failregion: nil)
  run_with_backoff_and_client_fallback(region, failregion) do |ssm|
    begin
      resp = ssm.get_parameter(
                name: "/#{environment}/#{role}/#{attribute}",
                with_decryption: true
              )
      resp.parameter.value
    rescue Aws::SSM::Errors::ParameterNotFound => e
      nil
    end
  end
end

#run_with_backoff_and_client_fallback(region = nil, failregion = nil, &block) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/movable_ink/aws/ssm.rb', line 17

def run_with_backoff_and_client_fallback(region = nil, failregion = nil, &block)
  run_with_backoff do
    block.call(ssm_client(region))
  end
rescue MovableInk::AWS::Errors::FailedWithBackoff => e
  run_with_backoff(tries: 3) do
    block.call(ssm_client_failover(failregion))
  end
end

#ssm_client(region = nil) ⇒ Object



7
8
9
10
# File 'lib/movable_ink/aws/ssm.rb', line 7

def ssm_client(region = nil)
  @ssm_clients_map ||= {}
  @ssm_clients_map[region] ||= Aws::SSM::Client.new(region: (region.nil?) ? 'us-east-1' : region)
end

#ssm_client_failover(failregion = nil) ⇒ Object



12
13
14
15
# File 'lib/movable_ink/aws/ssm.rb', line 12

def ssm_client_failover(failregion = nil)
  @ssm_failover_clients_map ||= {}
  @ssm_failover_clients_map[failregion] ||= Aws::SSM::Client.new(region: (failregion.nil?) ? 'us-west-2' : failregion)
end