lambchop 0.0.13 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd5da57f0b09c3e6e39a68d3b664481e2d9bc5b3
4
- data.tar.gz: bd10121b385df746d1d0ea585e2826fc0a134ce5
3
+ metadata.gz: 767cf7d18e8ec7aaa5aae1d17b9b0746b3915404
4
+ data.tar.gz: f11c95fb9f7cac65425c15ab9753bc45141ff120
5
5
  SHA512:
6
- metadata.gz: 8ca61c4caf048beb364c3a266d6ef1198f68a92e0250d6eef9af7d61001e718fb67701c3b9c059442fa44cdc16c6a04380a7b2f6c0b46b95c11670ad64f29083
7
- data.tar.gz: 099a37fa085f58629d5a08064d0a76be3dcf56c6dcc18386335e3899b1642e2830c9d231e63662662ba5234285d72bd9bfec29523a2f6206a7923202a27330bd
6
+ metadata.gz: f0852b44385802c6f1ffd2ec6277568dc9e43b53b9c4e983bbb83dd54c4ddcdce884d1544f6d7022e54e340702e0556a2bce7e18f638b76b3d871c624d669ec7
7
+ data.tar.gz: d585b6dc88ea810b56936f9aa9ad641d5dd747a5aed3706054f5040c12d73b1166b0e62c39194549035f3936d8c939ffd7c108f1f3446c0944bdfec8db802b66
data/README.md CHANGED
@@ -33,7 +33,6 @@ $ cat test.js
33
33
  /*
34
34
  function_name: test # default: file name without ext
35
35
  runtime: nodejs # default: nodejs
36
- mode: event # default: event
37
36
  description: '' # default: (empty)
38
37
  timeout: 3 # default: 3
39
38
  memory_size: 128 # default: 128
@@ -48,7 +47,7 @@ exports.handler = function(event, context) {
48
47
  console.log('value1 = ' + event.key1);
49
48
  console.log('value2 = ' + event.key2);
50
49
  console.log('value3 = ' + event.key3);
51
- context.done(null, 'Hello World'); // SUCCESS with message
50
+ context.success('Hello World');
52
51
  };
53
52
 
54
53
  $ ./test.js
@@ -64,8 +63,11 @@ $ export AWS_REGION=us-east-1
64
63
  $ lambchop-cat
65
64
  usage: lambchop-cat <function-name>
66
65
 
67
- $ lambchop-cat
68
66
  $ echo '{"key1":100, "key2":200, "key3":300}' | lambchop-cat test
67
+ ---
68
+ status_code: 200
69
+ function_error:
70
+ payload: '"Hello World"'
69
71
  ```
70
72
 
71
73
  **Terminal 1**:
@@ -80,6 +82,44 @@ END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
80
82
  REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Duration: 117.54 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 9 MB
81
83
  ```
82
84
 
85
+ ### Invoke async
86
+
87
+ ```sh
88
+ $ echo '{"key1":100, "key2":200, "key3":300}' | lambchop-cat test -t event
89
+ ---
90
+ status_code: 202
91
+ function_error:
92
+ payload: ''
93
+ ```
94
+
95
+ ### Invoke with tail
96
+
97
+ ```sh
98
+ $ echo '{"key1":100, "key2":200, "key3":300}' | lambchop-cat test -l tail
99
+ status_code: 200
100
+ function_error:
101
+ payload: '"Hello world!"'
102
+ log_result: |-
103
+ 2014-11-23T08:06:53.212Z xxxxxxxxxxxxxxxx Loading event
104
+ START RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
105
+ 2014-11-23T08:06:53.330Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx value1 = 100
106
+ 2014-11-23T08:06:53.330Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx value3 = 300
107
+ 2014-11-23T08:06:53.330Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx value2 = 200
108
+ END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
109
+ REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Duration: 117.54 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 9 MB
110
+ ```
111
+
112
+
113
+ ### DryRun
114
+
115
+ ```sh
116
+ $ echo '{"key1":100, "key2":200, "key3":300}' | lambchop-cat test -t dry_run
117
+ ---
118
+ status_code: 204
119
+ function_error:
120
+ payload: ''
121
+ ```
122
+
83
123
  ## Dump function
84
124
 
85
125
  ```sh
@@ -93,7 +133,6 @@ function_name: test
93
133
  runtime: nodejs
94
134
  role: arn:aws:iam::NNNNNNNNNNNN:role/lambda_exec_role
95
135
  handler: test.handler
96
- mode: event
97
136
  description: ''
98
137
  timeout: 3
99
138
  memory_size: 128
@@ -104,7 +143,7 @@ exports.handler = function(event, context) {
104
143
  console.log('value1 = ' + event.key1);
105
144
  console.log('value2 = ' + event.key2);
106
145
  console.log('value3 = ' + event.key3);
107
- context.done(null, 'Hello World'); // SUCCESS with message
146
+ context.success('Hello World');
108
147
  };
109
148
  ```
110
149
 
@@ -22,7 +22,6 @@ Please run the lambda script that has the following header:
22
22
  /*
23
23
  function_name: any_name # default: file name without ext
24
24
  runtime: nodejs # default: nodejs
25
- mode: event # default: event
26
25
  description: any_desc # default: (empty)
27
26
  timeout: 3 # default: 3
28
27
  memory_size: 128 # default: 128
@@ -2,12 +2,21 @@
2
2
  $: << File.expand_path("#{File.dirname __FILE__}/../lib")
3
3
  require 'rubygems'
4
4
  require 'lambchop'
5
+ require 'optparse'
5
6
 
6
- if ARGV.length != 1
7
- puts 'usage: lambchop-cat <function-name>'
8
- exit 1
7
+ Version = Lambchop::VERSION
8
+
9
+ options = {
10
+ :invocation_type => :request_response,
11
+ :log_type => :none
12
+ }
13
+
14
+ ARGV.options do |opt|
15
+ opt.on('-t', '--invocation-type=TYPE', [:request_response, :event, :dry_run]) {|v| options[:invocation_type] = v }
16
+ opt.on('-l', '--log-type=TYPE', [:none, :tail]) {|v| options[:log_type] = v }
17
+ opt.parse!
9
18
  end
10
19
 
11
20
  Lambchop::Utils.with_error_logging do
12
- Lambchop::Cat.cat(ARGV[0], $stdin)
21
+ Lambchop::Cat.cat(ARGV[0], $stdin, options)
13
22
  end
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
 
22
- spec.add_dependency 'aws-sdk-core', '~> 2.0.9'
22
+ spec.add_dependency 'aws-sdk-core', '~> 2.1'
23
23
  spec.add_dependency 'rubyzip', '>= 1.0.0'
24
24
  spec.add_dependency 'diffy'
25
25
  spec.add_development_dependency 'bundler'
@@ -1,3 +1,4 @@
1
+ require 'base64'
1
2
  require 'erb'
2
3
  require 'json'
3
4
  require 'open-uri'
@@ -7,6 +7,7 @@ class Lambchop::Cat
7
7
  @function_name = function_name
8
8
  @invoke_args = invoke_args
9
9
  @client = options[:client] || Aws::Lambda::Client.new
10
+ @out = options[:out] || $stdout
10
11
  @options = options
11
12
  end
12
13
 
@@ -17,9 +18,33 @@ class Lambchop::Cat
17
18
  invoke_args = invoke_args.read
18
19
  end
19
20
 
20
- @client.invoke_async(
21
+ resp = @client.invoke(
21
22
  :function_name => @function_name,
22
- :invoke_args => invoke_args
23
+ :payload => invoke_args,
24
+ :invocation_type => Lambchop::Utils.camelize(@options[:invocation_type] || :request_response),
25
+ :log_type => Lambchop::Utils.camelize(@options[:log_type] || :none)
23
26
  )
27
+
28
+ out = {
29
+ 'status_code' => resp[:status_code],
30
+ 'function_error' => resp[:function_error],
31
+ 'payload' => nil
32
+ }
33
+
34
+ log_result = resp[:log_result]
35
+ payload = resp[:payload]
36
+
37
+ if log_result
38
+ log_result = Base64.strict_decode64(log_result)
39
+ log_result.gsub!("\t", ' ').strip!
40
+ def log_result.yaml_style() Psych::Nodes::Scalar::LITERAL end
41
+ out['log_result'] = log_result
42
+ end
43
+
44
+ if payload
45
+ out['payload'] = payload.string
46
+ end
47
+
48
+ @out.puts YAML.dump(out)
24
49
  end
25
50
  end
@@ -23,10 +23,9 @@ class Lambchop::Client
23
23
  config['function_name'] ||= File.basename(@path, '.js')
24
24
  function_name = config['function_name']
25
25
 
26
- config['mode'] ||= 'event'
27
26
  config['runtime'] ||= 'nodejs'
28
27
 
29
- upload_function(config, src)
28
+ create_or_update_function(config, src)
30
29
 
31
30
  exit if @options[:detach]
32
31
 
@@ -38,23 +37,35 @@ class Lambchop::Client
38
37
 
39
38
  private
40
39
 
41
- def upload_function(config, src)
40
+ def create_or_update_function(config, src)
42
41
  params = {}
43
42
  config.each {|k, v| params[k.to_sym] = v }
44
43
  buf, node_modules = zip_source(src)
45
- params[:function_zip] = buf.string
46
44
 
47
- resp = @client.upload_function(params)
45
+ begin
46
+ params[:code] = {:zip_file => buf.string}
47
+ resp = @client.create_function(params)
48
+ rescue Aws::Lambda::Errors::ResourceConflictException => e
49
+ if e.message =~ /\AFunction already exist:/
50
+ params = {
51
+ :function_name => config['function_name'],
52
+ :zip_file => buf.string
53
+ }
54
+
55
+ resp = @client.update_function_code(params)
56
+ else
57
+ raise e
58
+ end
59
+ end
48
60
  resp_h = {}
49
61
 
50
62
  [
51
63
  :function_name,
52
64
  :function_arn,
53
- :configuration_id,
54
65
  :runtime,
55
66
  :role,
56
67
  :handler,
57
- :mode,
68
+ :code_size,
58
69
  :description,
59
70
  :timeout,
60
71
  :memory_size,
@@ -21,7 +21,7 @@ class Lambchop::Diff
21
21
  file = Lambchop::Utils.remove_shebang(file)
22
22
  config, file = Lambchop::Utils.parse_magic_comment(file)
23
23
 
24
- page = @client.get_function(:function_name => @function_name).first
24
+ page = @client.get_function(:function_name => @function_name)
25
25
 
26
26
  Lambchop::Utils.open_source(page.code.location) do |name, func|
27
27
  diff = Diffy::Diff.new(func, file, :include_diff_info => true).to_s
@@ -11,7 +11,7 @@ class Lambchop::Dump
11
11
  end
12
12
 
13
13
  def dump
14
- page = @client.get_function(:function_name => @function_name).first
14
+ page = @client.get_function(:function_name => @function_name)
15
15
  puts_shebang
16
16
  puts_magic_comment(page.configuration)
17
17
  puts_source(page.code.location)
@@ -29,7 +29,6 @@ class Lambchop::Dump
29
29
  runtime
30
30
  role
31
31
  handler
32
- mode
33
32
  description
34
33
  timeout
35
34
  memory_size
@@ -43,6 +43,10 @@ class Lambchop::Utils
43
43
  end
44
44
  end
45
45
 
46
+ def camelize(obj)
47
+ obj.to_s.gsub(/(?:\A|_)([a-z])/) { $1.upcase }
48
+ end
49
+
46
50
  def debug?
47
51
  ENV['DEBUG'] == '1'
48
52
  end
@@ -1,3 +1,3 @@
1
1
  module Lambchop
2
- VERSION = '0.0.13'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lambchop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-16 00:00:00.000000000 Z
11
+ date: 2015-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.9
19
+ version: '2.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.9
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubyzip
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: diffy
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: It is a tool that invoke AWS Lambda function from the local machine as
@@ -93,7 +93,7 @@ executables:
93
93
  extensions: []
94
94
  extra_rdoc_files: []
95
95
  files:
96
- - ".gitignore"
96
+ - .gitignore
97
97
  - Gemfile
98
98
  - LICENSE.txt
99
99
  - README.md
@@ -123,17 +123,17 @@ require_paths:
123
123
  - lib
124
124
  required_ruby_version: !ruby/object:Gem::Requirement
125
125
  requirements:
126
- - - ">="
126
+ - - '>='
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - ">="
131
+ - - '>='
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project:
136
- rubygems_version: 2.2.2
136
+ rubygems_version: 2.0.14
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: It is a tool that invoke AWS Lambda function from the local machine as a