Class: AddyLambda::AWS

Inherits:
Object
  • Object
show all
Defined in:
lib/addy_lambda/aws.rb

Overview

Common functionality for AWS related activities

Class Method Summary collapse

Class Method Details

.copy_file_from_bucket_to_bucket(s3_client, src_bucket, src_key, dest_bucket, dest_key) ⇒ Object

s3_client = Aws::S3::Client.new



56
57
58
# File 'lib/addy_lambda/aws.rb', line 56

def self.copy_file_from_bucket_to_bucket(s3_client, src_bucket, src_key, dest_bucket, dest_key)
  s3_client.copy_object(bucket: dest_bucket, copy_source: "/#{src_bucket}/#{src_key}", key: dest_key)
end

.copy_file_from_s3(s3_client, bucket, key, destination) ⇒ Object

s3_client = Aws::S3::Client.new



72
73
74
# File 'lib/addy_lambda/aws.rb', line 72

def self.copy_file_from_s3(s3_client, bucket, key, destination)
  s3_client.get_object({ bucket: bucket, key: key }, target: destination)
end

.generate_jwt(lambda_client, issuer, audience, expire, payload) ⇒ Object

NOTE: issuer AddyLambda::JwtIssuers::…, Audience AddyLambda::JwtAudiences::…



101
102
103
104
105
106
107
108
109
110
# File 'lib/addy_lambda/aws.rb', line 101

def self.generate_jwt(lambda_client, issuer, audience, expire, payload)
  lambda_payload = {
    'issuer' => JWT_ISSUERS[issuer],
    'audience' => JWT_AUDIENCES[audience],
    'expire' => expire,
    'payload' => payload
  }
  jwt_response = AddyLambda::AWS.invoke_lambda(lambda_client, 'jwt-generate', lambda_payload)
  jwt_response.key?('jwt') ? jwt_response['jwt'] : jwt_response
end

.get_ssm_value(ssm_client, path) ⇒ Object

ssm_client = Aws::SSM::Client.new



21
22
23
24
25
26
27
28
# File 'lib/addy_lambda/aws.rb', line 21

def self.get_ssm_value(ssm_client, path)
  request = {
    name: path,
    with_decryption: true
  }
  response = ssm_client.get_parameter(request)
  response.parameter.value
end

.invoke_lambda(lambda_client, function_name, payload, syncronous: true) ⇒ Object

lambda_client = Aws::Lambda::Client.new



31
32
33
34
35
36
37
38
# File 'lib/addy_lambda/aws.rb', line 31

def self.invoke_lambda(lambda_client, function_name, payload, syncronous: true)
  resp = lambda_client.invoke({
                                function_name: function_name,
                                invocation_type: syncronous ? 'RequestResponse' : 'Event',
                                payload: payload.to_json
                              })
  AddyLambda::Common.valid_json?(resp.payload.string) ? JSON.parse(resp.payload.string) : resp.payload.string
end

.list_s3_files(s3_client, bucket, prefix, suffix) ⇒ Object

s3_client = Aws::S3::Client.new



61
62
63
64
65
66
67
68
69
# File 'lib/addy_lambda/aws.rb', line 61

def self.list_s3_files(s3_client, bucket, prefix, suffix)
  files = []
  objects = s3_client.list_objects_v2({ bucket: bucket, prefix: prefix }).contents
  objects.each do |o|
    key = o[:key]
    files << key if key.start_with?(prefix) && key.end_with?(suffix)
  end
  files
end

.post_slack_message(lambda_client, post_as_name, channel, message, emoji = ':tada', unfurl_links: false) ⇒ Object

lambda_client = Aws::Lambda::Client.new



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

def self.post_slack_message(lambda_client, post_as_name, channel, message, emoji = ':tada', unfurl_links: false)
  input_params = {
    'user' => post_as_name,
    'channel' => channel,
    'message' => message,
    'emoji' => emoji,
    'unfurl_links' => unfurl_links
  }
  response_body = AddyLambda::AWS.invoke_lambda(lambda_client, 'slack-client', input_params)
  return response_body unless response_body.key?('error')

  logger.error(response_body['error'])
end

.save_file_to_s3(s3_client, file_location, bucket, key) ⇒ Object

s3_client = Aws::S3::Client.new



77
78
79
80
81
82
# File 'lib/addy_lambda/aws.rb', line 77

def self.save_file_to_s3(s3_client, file_location, bucket, key)
  # Upload
  File.open(file_location, 'rb') do |file|
    s3_client.put_object(bucket: bucket, key: key, body: file)
  end
end

.send_email(lambda_client, recipient_emails, from_name, from_email, subject, content_html) ⇒ Object

lambda_client = Aws::Lambda::Client.new



85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/addy_lambda/aws.rb', line 85

def self.send_email(lambda_client, recipient_emails, from_name, from_email, subject, content_html)
  input_params = {
    'recipient_list' => recipient_emails,
    'from_name' => from_name,
    'from_email' => from_email,
    'subject' => subject,
    'content_html' => content_html
  }

  response_body = AddyLambda::AWS.invoke_lambda(lambda_client, 'mailgun-client', input_params)
  return response_body unless response_body.key?('error')

  logger.error(response_body['error'])
end

.validate_jwt(lambda_client, jwt) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/addy_lambda/aws.rb', line 112

def self.validate_jwt(lambda_client, jwt)
  lambda_payload = {
    'jwt' => jwt
  }
  response = AddyLambda::AWS.invoke_lambda(lambda_client, 'jwt-validate', lambda_payload)
  response['statusCode'] == 200 ? JSON.parse(response['body']) : response
end