fog-aws 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fog-aws.gemspec +1 -0
- data/lib/fog/aws.rb +18 -6
- data/lib/fog/aws/errors.rb +26 -5
- data/lib/fog/aws/lambda.rb +195 -0
- data/lib/fog/aws/parsers/lambda/base.rb +39 -0
- data/lib/fog/aws/requests/lambda/add_permission.rb +100 -0
- data/lib/fog/aws/requests/lambda/create_event_source_mapping.rb +94 -0
- data/lib/fog/aws/requests/lambda/create_function.rb +146 -0
- data/lib/fog/aws/requests/lambda/delete_event_source_mapping.rb +46 -0
- data/lib/fog/aws/requests/lambda/delete_function.rb +43 -0
- data/lib/fog/aws/requests/lambda/get_event_source_mapping.rb +54 -0
- data/lib/fog/aws/requests/lambda/get_function.rb +74 -0
- data/lib/fog/aws/requests/lambda/get_function_configuration.rb +44 -0
- data/lib/fog/aws/requests/lambda/get_policy.rb +52 -0
- data/lib/fog/aws/requests/lambda/invoke.rb +85 -0
- data/lib/fog/aws/requests/lambda/list_event_source_mappings.rb +69 -0
- data/lib/fog/aws/requests/lambda/list_functions.rb +39 -0
- data/lib/fog/aws/requests/lambda/remove_permission.rb +56 -0
- data/lib/fog/aws/requests/lambda/update_event_source_mapping.rb +86 -0
- data/lib/fog/aws/requests/lambda/update_function_code.rb +75 -0
- data/lib/fog/aws/requests/lambda/update_function_configuration.rb +84 -0
- data/lib/fog/aws/version.rb +1 -1
- data/tests/requests/lambda/function_sample_1.js +9 -0
- data/tests/requests/lambda/function_sample_2.js +9 -0
- data/tests/requests/lambda/function_tests.rb +460 -0
- data/tests/requests/lambda/helper.rb +81 -0
- metadata +38 -2
@@ -0,0 +1,44 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/lambda/base'
|
6
|
+
|
7
|
+
# Returns the configuration information of the Lambda function.
|
8
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_GetFunction.html
|
9
|
+
# ==== Parameters
|
10
|
+
# * FunctionName <~String> - Lambda function name.
|
11
|
+
# ==== Returns
|
12
|
+
# * response<~Excon::Response>:
|
13
|
+
# * body<~Hash>:
|
14
|
+
# * 'CodeSize' <~Integer> - size, in bytes, of the function .zip file you uploaded.
|
15
|
+
# * 'Description' <~String> - user-provided description.
|
16
|
+
# * 'FunctionArn' <~String> - Amazon Resource Name (ARN) assigned to the function.
|
17
|
+
# * 'FunctionName' <~String> - name of the function.
|
18
|
+
# * 'Handler' <~String> - function Lambda calls to begin executing your function.
|
19
|
+
# * 'LastModified' <~Time> - timestamp of the last time you updated the function.
|
20
|
+
# * 'Memorysize' <~String> - memory size, in MB, you configured for the function.
|
21
|
+
# * 'Role' <~String> - ARN of the IAM role that Lambda assumes when it executes your function to access any other AWS resources.
|
22
|
+
# * 'Runtime' <~String> - runtime environment for the Lambda function.
|
23
|
+
# * 'Timeout' <~Integer> - function execution time at which Lambda should terminate the function.
|
24
|
+
def get_function_configuration(params={})
|
25
|
+
function_name = params.delete('FunctionName')
|
26
|
+
request({
|
27
|
+
:method => 'GET',
|
28
|
+
:path => "/functions/#{function_name}/versions/HEAD/configuration",
|
29
|
+
:parser => Fog::AWS::Parsers::Lambda::Base.new
|
30
|
+
}.merge(params))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Mock
|
35
|
+
def get_function_configuration(params={})
|
36
|
+
response = self.get_function(params)
|
37
|
+
function_configuration = response.body['Configuration']
|
38
|
+
response.body = function_configuration
|
39
|
+
response
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/lambda/base'
|
6
|
+
|
7
|
+
# Returns the access policy, containing a list of permissions granted via the AddPermission API, associated with the specified bucket.
|
8
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_GetPolicy.html
|
9
|
+
# ==== Parameters
|
10
|
+
# * FunctionName <~String> - Function name whose access policy you want to retrieve.
|
11
|
+
# ==== Returns
|
12
|
+
# * response<~Excon::Response>:
|
13
|
+
# * body<~Hash>:
|
14
|
+
# * 'Policy' <~Hash> - The access policy associated with the specified function.
|
15
|
+
def get_policy(params={})
|
16
|
+
function_name = params.delete('FunctionName')
|
17
|
+
request({
|
18
|
+
:method => 'GET',
|
19
|
+
:path => "/functions/#{function_name}/versions/HEAD/policy",
|
20
|
+
:parser => Fog::AWS::Parsers::Lambda::Base.new
|
21
|
+
}.merge(params))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Mock
|
26
|
+
def get_policy(params={})
|
27
|
+
response = Excon::Response.new
|
28
|
+
|
29
|
+
function = self.get_function_configuration(params).body
|
30
|
+
function_arn = function['FunctionArn']
|
31
|
+
statements = self.data[:permissions][function_arn] || []
|
32
|
+
|
33
|
+
if statements.empty?
|
34
|
+
message = "ResourceNotFoundException => "
|
35
|
+
message << "The resource you requested does not exist."
|
36
|
+
raise Fog::AWS::Lambda::Error, message
|
37
|
+
end
|
38
|
+
|
39
|
+
policy = {
|
40
|
+
'Version' => '2012-10-17',
|
41
|
+
'Statement' => statements,
|
42
|
+
'Id' => 'default'
|
43
|
+
}
|
44
|
+
|
45
|
+
response.status = 200
|
46
|
+
response.body = { 'Policy' => policy }
|
47
|
+
response
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
|
6
|
+
# Invokes a specified Lambda function.
|
7
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html
|
8
|
+
# ==== Parameters
|
9
|
+
# * ClientContext <~Hash> - client-specific information to the Lambda function you are invoking.
|
10
|
+
# * FunctionName <~String> - Lambda function name.
|
11
|
+
# * InvocationType <~String> - function invocation type.
|
12
|
+
# * LogType <~String> - logs format for function calls of "RequestResponse" invocation type.
|
13
|
+
# * Payload <~Integer> - Lambda function input.
|
14
|
+
# ==== Returns
|
15
|
+
# * response<~Excon::Response>:
|
16
|
+
# * body<~Hash> - JSON representation of the object returned by the Lambda function.
|
17
|
+
def invoke(params={})
|
18
|
+
headers = {}
|
19
|
+
if client_context = params.delete('ClientContext')
|
20
|
+
headers['X-Amz-Client-Context'] =
|
21
|
+
Base64::encode64(Fog::Json.encode(client_context))
|
22
|
+
end
|
23
|
+
if client_type = params.delete('InvocationType')
|
24
|
+
headers['X-Amz-Client-Type'] = client_type
|
25
|
+
end
|
26
|
+
if log_type = params.delete('LogType')
|
27
|
+
headers['X-Amz-Log-Type'] = log_type
|
28
|
+
end
|
29
|
+
payload = Fog::JSON.encode(params.delete('Payload'))
|
30
|
+
function_name = params.delete('FunctionName')
|
31
|
+
|
32
|
+
request({
|
33
|
+
:method => 'POST',
|
34
|
+
:path => "/functions/#{function_name}/invocations",
|
35
|
+
:headers => headers,
|
36
|
+
:body => payload,
|
37
|
+
:expects => [200, 202, 204]
|
38
|
+
}.merge(params))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Mock
|
43
|
+
def invoke(params={})
|
44
|
+
response = Excon::Response.new
|
45
|
+
response.status = 200
|
46
|
+
response.body = ''
|
47
|
+
|
48
|
+
unless function_id = params.delete('FunctionName')
|
49
|
+
message = 'AccessDeniedException => '
|
50
|
+
message << 'Unable to determine service/operation name to be authorized'
|
51
|
+
raise Fog::AWS::Lambda::Error, message
|
52
|
+
end
|
53
|
+
|
54
|
+
client_context = params.delete('ClientContext')
|
55
|
+
client_type = params.delete('InvocationType')
|
56
|
+
log_type = params.delete('LogType')
|
57
|
+
payload = params.delete('Payload')
|
58
|
+
|
59
|
+
if (client_context || client_type || log_type)
|
60
|
+
message = "invoke parameters handling are not yet mocked [light_black](#{caller.first})[/]"
|
61
|
+
Fog::Logger.warning message
|
62
|
+
Fog::Mock.not_implemented
|
63
|
+
end
|
64
|
+
|
65
|
+
if payload
|
66
|
+
message = "payload parameter is ignored since we are not really "
|
67
|
+
message << "invoking a function [light_black](#{caller.first})[/]"
|
68
|
+
Fog::Logger.warning message
|
69
|
+
end
|
70
|
+
|
71
|
+
function = self.get_function_configuration('FunctionName' => function_id).body
|
72
|
+
|
73
|
+
if function.is_a?(Hash) && function.has_key?('FunctionArn')
|
74
|
+
response.body = "\"Imagine #{function['FunctionArn']} was invoked\""
|
75
|
+
else
|
76
|
+
message = "ResourceNotFoundException => Function not found: #{function_id}"
|
77
|
+
raise Fog::AWS::Lambda::Error, message
|
78
|
+
end
|
79
|
+
|
80
|
+
response
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
# Returns a list of event source mappings where you can identify a stream as an event source.
|
6
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_ListEventSourceMappings.html
|
7
|
+
# ==== Parameters
|
8
|
+
# * EventSourceArn <~String> - Amazon Resource Name (ARN) of the stream.
|
9
|
+
# * FunctionName <~String> - name of the Lambda function.
|
10
|
+
# * Marker <~String> - opaque pagination token returned from a previous ListEventSourceMappings operation.
|
11
|
+
# * MaxItems <~Integer> - maximum number of event sources to return in response.
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>:
|
15
|
+
# * 'EventSourceMappings' <~Array> - array of EventSourceMappingConfiguration objects.
|
16
|
+
# * 'NextMarker' <~String> - present if there are more event source mappings.
|
17
|
+
def list_event_source_mappings(params={})
|
18
|
+
event_source_arn = params.delete('EventSourceArn')
|
19
|
+
function_name = params.delete('FunctionName')
|
20
|
+
marker = params.delete('Marker')
|
21
|
+
max_items = params.delete('MaxItems')
|
22
|
+
|
23
|
+
query = {}
|
24
|
+
query.merge!('EventSourceArn' => event_source_arn) if event_source_arn
|
25
|
+
query.merge!('FunctionName' => function_name) if function_name
|
26
|
+
query.merge!('Marker' => marker) if marker
|
27
|
+
query.merge!('MaxItems' => max_items) if max_items
|
28
|
+
|
29
|
+
request({
|
30
|
+
:method => 'GET',
|
31
|
+
:path => '/event-source-mappings/',
|
32
|
+
:query => query
|
33
|
+
}.merge(params))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Mock
|
38
|
+
def list_event_source_mappings(params={})
|
39
|
+
response = Excon::Response.new
|
40
|
+
response.status = 200
|
41
|
+
|
42
|
+
function_name = params.delete('FunctionName')
|
43
|
+
|
44
|
+
begin
|
45
|
+
function = self.get_function_configuration('FunctionName' => function_name).body
|
46
|
+
function_arn = function['FunctionArn']
|
47
|
+
rescue Fog::AWS::Lambda::Error => e
|
48
|
+
# interestingly enough, if you try to do a list_event_source_mappings
|
49
|
+
# on a nonexisting function, Lambda API endpoint doesn't return
|
50
|
+
# error, just an empty array.
|
51
|
+
end
|
52
|
+
|
53
|
+
event_source_mappings = []
|
54
|
+
if function_arn
|
55
|
+
event_source_mappings = self.data[:event_source_mappings].values.select do |m|
|
56
|
+
m['FunctionArn'].eql?(function_arn)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
response.body = {
|
61
|
+
'EventSourceMappings' => event_source_mappings,
|
62
|
+
'NextMarker' => nil
|
63
|
+
}
|
64
|
+
response
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/lambda/base'
|
6
|
+
|
7
|
+
# Returns a list of your Lambda functions.
|
8
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_ListFunctions.html
|
9
|
+
# ==== Parameters
|
10
|
+
# * Marker <~String> - opaque pagination token returned from a previous ListFunctions operation. If present, indicates where to continue the listing.
|
11
|
+
# * MaxItems <~Integer> - Specifies the maximum number of AWS Lambda functions to return in response.
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>:
|
15
|
+
# * 'Functions' <~Array> - list of Lambda functions.
|
16
|
+
# * 'NextMarker' <~String> - present if there are more functions.
|
17
|
+
def list_functions(params={})
|
18
|
+
request({
|
19
|
+
:method => 'GET',
|
20
|
+
:path => '/functions/',
|
21
|
+
:parser => Fog::AWS::Parsers::Lambda::Base.new
|
22
|
+
}.merge(params))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Mock
|
27
|
+
def list_functions(params={})
|
28
|
+
response = Excon::Response.new
|
29
|
+
response.status = 200
|
30
|
+
response.body = {
|
31
|
+
'Functions' => self.data[:functions].values,
|
32
|
+
'NextMarker' => nil
|
33
|
+
}
|
34
|
+
response
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
|
6
|
+
# Remove individual permissions from an access policy associated with a Lambda function by providing a Statement ID.
|
7
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_RemovePermission.html
|
8
|
+
# ==== Parameters
|
9
|
+
# * FunctionName <~String> - Lambda function whose access policy you want to remove a permission from.
|
10
|
+
# * StatementId <~String> - Statement ID of the permission to remove.
|
11
|
+
# ==== Returns
|
12
|
+
# * response<~Excon::Response>:
|
13
|
+
# * body<~String>:
|
14
|
+
def remove_permission(params={})
|
15
|
+
function_name = params.delete('FunctionName')
|
16
|
+
statement_id = params.delete('StatementId')
|
17
|
+
request({
|
18
|
+
:method => 'DELETE',
|
19
|
+
:path => "/functions/#{function_name}/versions/HEAD/policy/#{statement_id}",
|
20
|
+
:expects => 204
|
21
|
+
}.merge(params))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Mock
|
26
|
+
def remove_permission(params={})
|
27
|
+
function_name = params.delete('FunctionName')
|
28
|
+
opts = { 'FunctionName' => function_name }
|
29
|
+
function = self.get_function_configuration(opts).body
|
30
|
+
function_arn = function['FunctionArn']
|
31
|
+
|
32
|
+
statement_id = params.delete('StatementId')
|
33
|
+
message = 'Statement ID cannot be blank'
|
34
|
+
raise Fog::AWS::Lambda::Error, message unless statement_id
|
35
|
+
|
36
|
+
permissions_qty = self.data[:permissions][function_arn].size
|
37
|
+
|
38
|
+
self.data[:permissions][function_arn].delete_if do |s|
|
39
|
+
s['Sid'].eql?(statement_id)
|
40
|
+
end
|
41
|
+
|
42
|
+
if self.data[:permissions][function_arn].size.eql?(permissions_qty)
|
43
|
+
message = "ResourceNotFoundException => "
|
44
|
+
message << "The resource you requested does not exist."
|
45
|
+
raise Fog::AWS::Lambda::Error, message
|
46
|
+
end
|
47
|
+
|
48
|
+
response = Excon::Response.new
|
49
|
+
response.status = 204
|
50
|
+
response.body = ''
|
51
|
+
response
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
# Change the parameters of the existing mapping without losing your position in the stream.
|
6
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html
|
7
|
+
# ==== Parameters
|
8
|
+
# * UUID <~String> - event source mapping identifier.
|
9
|
+
# * BatchSize <~Integer> - maximum number of stream records that can be sent to your Lambda function for a single invocation.
|
10
|
+
# * Enabled <~Boolean> - specifies whether AWS Lambda should actively poll the stream or not.
|
11
|
+
# * FunctionName <~String> - Lambda function to which you want the stream records sent.
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>:
|
15
|
+
# * 'BatchSize' <~Integer> - largest number of records that AWS Lambda will retrieve from your event source at the time of invoking your function.
|
16
|
+
# * 'EventSourceArn' <~String> - Amazon Resource Name (ARN) of the stream that is the source of events.
|
17
|
+
# * 'FunctionArn' <~String> - Lambda function to invoke when AWS Lambda detects an event on the stream.
|
18
|
+
# * 'LastModified' <~Time> - UTC time string indicating the last time the event mapping was updated.
|
19
|
+
# * 'LastProcessingResult' <~String> - result of the last AWS Lambda invocation of your Lambda function.
|
20
|
+
# * 'State' <~String> - state of the event source mapping.
|
21
|
+
# * 'StateTransitionReason' <~String> - reason the event source mapping is in its current state.
|
22
|
+
# * 'UUID' <~String> - AWS Lambda assigned opaque identifier for the mapping.
|
23
|
+
def update_event_source_mapping(params={})
|
24
|
+
function_name = params.delete('FunctionName')
|
25
|
+
mapping_id = params.delete('UUID')
|
26
|
+
|
27
|
+
batch_size = params.delete('BatchSize')
|
28
|
+
enabled = params.delete('Enabled')
|
29
|
+
|
30
|
+
update = {}
|
31
|
+
update.merge!('BatchSize' => batch_size) if batch_size
|
32
|
+
update.merge!('Enabled' => enabled) if !enabled.nil?
|
33
|
+
update.merge!('FunctionName' => function_name) if function_name
|
34
|
+
|
35
|
+
request({
|
36
|
+
:method => 'PUT',
|
37
|
+
:path => "/event-source-mappings/#{mapping_id}",
|
38
|
+
:expects => 202,
|
39
|
+
:body => Fog::JSON.encode(update)
|
40
|
+
}.merge(params))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class Mock
|
45
|
+
def update_event_source_mapping(params={})
|
46
|
+
mapping_id = params.delete('UUID')
|
47
|
+
mapping = self.data[:event_source_mappings][mapping_id]
|
48
|
+
|
49
|
+
unless mapping
|
50
|
+
message = 'ResourceNotFoundException => '
|
51
|
+
message << 'The resource you requested does not exist.'
|
52
|
+
raise Fog::AWS::Lambda::Error, message
|
53
|
+
end
|
54
|
+
|
55
|
+
function_name = params.delete('FunctionName')
|
56
|
+
function = {}
|
57
|
+
if function_name
|
58
|
+
function_opts = { 'FunctionName' => function_name }
|
59
|
+
function = self.get_function_configuration(function_opts).body
|
60
|
+
function_arn = function['FunctionArn']
|
61
|
+
end
|
62
|
+
|
63
|
+
batch_size = params.delete('BatchSize')
|
64
|
+
enabled = params.delete('Enabled')
|
65
|
+
|
66
|
+
update = {}
|
67
|
+
|
68
|
+
if function_name && !function.empty? && function_arn
|
69
|
+
update.merge!('FunctionArn' => function_arn)
|
70
|
+
end
|
71
|
+
update.merge!('BatchSize' => batch_size) if batch_size
|
72
|
+
update.merge!('Enabled' => enabled) if !enabled.nil?
|
73
|
+
|
74
|
+
mapping.merge!(update)
|
75
|
+
mapping['State'] = 'Disabling' if enabled.eql?(false)
|
76
|
+
mapping['State'] = 'Enabling' if enabled.eql?(true)
|
77
|
+
|
78
|
+
response = Excon::Response.new
|
79
|
+
response.status = 202
|
80
|
+
response.body = mapping
|
81
|
+
response
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Lambda
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/lambda/base'
|
6
|
+
|
7
|
+
# Updates the code for the specified Lambda function.
|
8
|
+
# http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html
|
9
|
+
# ==== Parameters
|
10
|
+
# * FunctionName <~String> - existing Lambda function name whose code you want to replace.
|
11
|
+
# * S3Bucket <~String> - Amazon S3 bucket name where the .zip file containing your deployment package is stored.
|
12
|
+
# * S3Key <~String> - Amazon S3 object (the deployment package) key name you want to upload.
|
13
|
+
# * S3ObjectVersion <~String> - Amazon S3 object (the deployment package) version you want to upload.
|
14
|
+
# * ZipFile <~String> - Based64-encoded .zip file containing your packaged source code.
|
15
|
+
# ==== Returns
|
16
|
+
# * response<~Excon::Response>:
|
17
|
+
# * body<~Hash>:
|
18
|
+
# * 'CodeSize' <~Integer> - size, in bytes, of the function .zip file you uploaded.
|
19
|
+
# * 'Description' <~String> - user-provided description.
|
20
|
+
# * 'FunctionArn' <~String> - Amazon Resource Name (ARN) assigned to the function.
|
21
|
+
# * 'FunctionName' <~String> - name of the function.
|
22
|
+
# * 'Handler' <~String> - function Lambda calls to begin executing your function.
|
23
|
+
# * 'LastModified' <~Time> - timestamp of the last time you updated the function.
|
24
|
+
# * 'Memorysize' <~String> - memory size, in MB, you configured for the function.
|
25
|
+
# * 'Role' <~String> - ARN of the IAM role that Lambda assumes when it executes your function to access any other AWS resources.
|
26
|
+
# * 'Runtime' <~String> - runtime environment for the Lambda function.
|
27
|
+
# * 'Timeout' <~Integer> - function execution time at which Lambda should terminate the function.
|
28
|
+
def update_function_code(params={})
|
29
|
+
function_name = params.delete('FunctionName')
|
30
|
+
|
31
|
+
s3_bucket = params.delete('S3Bucket')
|
32
|
+
s3_key = params.delete('S3Key')
|
33
|
+
s3_object_ver = params.delete('S3ObjectVersion')
|
34
|
+
zip_file = params.delete('ZipFile')
|
35
|
+
|
36
|
+
update = {}
|
37
|
+
update.merge!('S3Bucket' => s3_bucket) if s3_bucket
|
38
|
+
update.merge!('S3Key' => s3_key) if s3_key
|
39
|
+
update.merge!('S3ObjectVersion' => s3_object_ver) if s3_object_ver
|
40
|
+
update.merge!('ZipFile' => zip_file) if zip_file
|
41
|
+
|
42
|
+
request({
|
43
|
+
:method => 'PUT',
|
44
|
+
:path => "/functions/#{function_name}/versions/HEAD/code",
|
45
|
+
:body => Fog::JSON.encode(update),
|
46
|
+
:parser => Fog::AWS::Parsers::Lambda::Base.new
|
47
|
+
}.merge(params))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class Mock
|
52
|
+
def update_function_code(params={})
|
53
|
+
response = self.get_function_configuration(params)
|
54
|
+
|
55
|
+
request_data = []
|
56
|
+
%w(S3Bucket S3Key S3ObjectVersion ZipFile).each do |p|
|
57
|
+
request_data << params.delete(p) if params.has_key?(p)
|
58
|
+
end
|
59
|
+
|
60
|
+
message = 'Please provide a source for function code.'
|
61
|
+
raise Fog::AWS::Lambda::Error, message if request_data.empty?
|
62
|
+
# we ignore any parameters since we are not uploading any code
|
63
|
+
|
64
|
+
function_arn = response.body['FunctionArn']
|
65
|
+
|
66
|
+
response = Excon::Response.new
|
67
|
+
response.status = 200
|
68
|
+
response.body = self.data[:functions][function_arn]
|
69
|
+
|
70
|
+
response
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|