elasticgraph-lambda_support 0.18.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a1164c6db4dc8da39c3040750fb7be0001762d123fe8f230e83d1947faa46ed2
4
+ data.tar.gz: b71fcfe9119a84a692ba9fc71195a3dec33c5a154fb5efb1048c1a078464ea04
5
+ SHA512:
6
+ metadata.gz: 875e927d312b89019252b074f08ce749cbdc5a401ae4f439adc240c23ab33d9825c34a3bf959943367f3cd71a11f49f2100564a8d41397574b725a64a7018aeb
7
+ data.tar.gz: 2c74f0d9b95b5189899ce91b6d72017fe9571c9d9fae70f0b31917bd718b89c4b8ceb8e20c97e8433ba71ffc4446aee2b7659195b419ffe82ee6d615dc4cce98
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2024 Block, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,6 @@
1
+ # ElasticGraph::LambdaSupport
2
+
3
+ This gem contains common lambda support logic that is used by all ElasticGraph
4
+ lambdas, such as lambda logging and OpenSearch connection support.
5
+
6
+ It is not meant to be used directly by end users of ElasticGraph.
@@ -0,0 +1,33 @@
1
+ # Copyright 2024 Block, Inc.
2
+ #
3
+ # Use of this source code is governed by an MIT-style
4
+ # license that can be found in the LICENSE file or at
5
+ # https://opensource.org/licenses/MIT.
6
+ #
7
+ # frozen_string_literal: true
8
+
9
+ require_relative "../gemspec_helper"
10
+
11
+ ElasticGraphGemspecHelper.define_elasticgraph_gem(gemspec_file: __FILE__, category: :lambda) do |spec, eg_version|
12
+ spec.summary = "ElasticGraph gem that supports running ElasticGraph using AWS Lambda."
13
+
14
+ spec.add_dependency "elasticgraph-opensearch", eg_version
15
+ spec.add_dependency "faraday_middleware-aws-sigv4", "~> 1.0"
16
+
17
+ # Logger 1.6.0 is currently incompatible with AWS lambda due to how the lambda Ruby runtime monkey patches the Logger class:
18
+ #
19
+ # https://github.com/aws/aws-lambda-ruby-runtime-interface-client/issues/33
20
+ # https://github.com/ruby/logger/issues/99
21
+ #
22
+ # We don't actually need the logger gem but faraday 2.10 pulls it in as a dependency, and to avoid getting boot-time errors
23
+ # we need to prevent logger >= 1.6.0 from getting pulled in.
24
+ #
25
+ # Once the AWS lambda runtime issue is resolved, we can remove this dependency.
26
+ spec.add_dependency "logger", "< 1.6.0"
27
+
28
+ spec.add_development_dependency "elasticgraph-admin", eg_version
29
+ spec.add_development_dependency "elasticgraph-graphql", eg_version
30
+ spec.add_development_dependency "elasticgraph-indexer", eg_version
31
+ spec.add_development_dependency "elasticgraph-indexer_autoscaler_lambda", eg_version
32
+ spec.add_development_dependency "httpx", ">= 1.2.6", "< 2.0"
33
+ end
@@ -0,0 +1,51 @@
1
+ # Copyright 2024 Block, Inc.
2
+ #
3
+ # Use of this source code is governed by an MIT-style
4
+ # license that can be found in the LICENSE file or at
5
+ # https://opensource.org/licenses/MIT.
6
+ #
7
+ # frozen_string_literal: true
8
+
9
+ require "json"
10
+ require "logger"
11
+
12
+ module ElasticGraph
13
+ module LambdaSupport
14
+ # A log formatter that supports JSON logging, without requiring _all_ logs to be emitted as JSON.
15
+ #
16
+ # If the `message` is a hash of JSON data, it will produce a JSON-formatted log message combining the
17
+ # standard bits of metadata the AWS Lambda logger already includes in every log message with the passed data.
18
+ #
19
+ # If it is not a hash of JSON data, it will just delegate to the default formatter used by AWS Lambda.
20
+ #
21
+ # This is particularly useful to support cloudwatch metric filtering:
22
+ # https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html#metric-filters-extract-json
23
+ class JSONAwareLambdaLogFormatter < ::Logger::Formatter
24
+ # Copied from:
25
+ # https://github.com/aws/aws-lambda-ruby-runtime-interface-client/blob/2.0.0/lib/aws_lambda_ric/lambda_log_formatter.rb#L8
26
+ FORMAT = "%<sev>s, [%<datetime>s #%<process>d] %<severity>5s %<request_id>s -- %<progname>s: %<msg>s"
27
+
28
+ def call(severity, time, progname, msg)
29
+ metadata = {
30
+ # These bits of metadata come from the standard AWS Lambda log formatter:
31
+ # https://github.com/aws/aws-lambda-ruby-runtime-interface-client/blob/2.0.0/lib/aws_lambda_ric/lambda_log_formatter.rb#L11-L12
32
+ sev: severity[0..0],
33
+ datetime: format_datetime(time),
34
+ process: $$,
35
+ severity: severity,
36
+ # standard:disable Style/GlobalVars -- don't have a choice here; this is what the AWS Lambda runtime sets.
37
+ request_id: $_global_aws_request_id,
38
+ # standard:enable Style/GlobalVars
39
+ progname: progname
40
+ }
41
+
42
+ if msg.is_a?(::Hash)
43
+ ::JSON.generate(msg.merge(metadata), space: " ")
44
+ else
45
+ # See https://github.com/aws/aws-lambda-ruby-runtime-interface-client/blob/2.0.0/lib/aws_lambda_ric/lambda_log_formatter.rb
46
+ (FORMAT % metadata.merge({msg: msg2str(msg)})).encode!("UTF-8")
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,69 @@
1
+ # Copyright 2024 Block, Inc.
2
+ #
3
+ # Use of this source code is governed by an MIT-style
4
+ # license that can be found in the LICENSE file or at
5
+ # https://opensource.org/licenses/MIT.
6
+ #
7
+ # frozen_string_literal: true
8
+
9
+ require "elastic_graph/support/monotonic_clock"
10
+
11
+ module ElasticGraph
12
+ module LambdaSupport
13
+ # Mixin that can be used to define a lambda function, with common cross-cutting concerns
14
+ # handled automatically for you:
15
+ #
16
+ # - The amount of time it takes to boot the lambda is logged.
17
+ # - An error handling hook is provided which applies both to boot-time logic and request handling.
18
+ #
19
+ # It is designed to be prepending onto a class, like so:
20
+ #
21
+ # class DoSomething
22
+ # prepend LambdaFunction
23
+ #
24
+ # def initialize
25
+ # require 'my_application'
26
+ # @application = MyApplication.new(ENV[...])
27
+ # end
28
+ #
29
+ # def handle_request(event:, context:)
30
+ # @application.handle_request(event: event, context: context)
31
+ # end
32
+ # end
33
+ #
34
+ # Using `prepend` is necessary so that it can wrap `initialize` and `handle_request` with error handling.
35
+ # It is recommended that `require`s be put in `initialize` instead of at the top of the lambda function
36
+ # file so that the error handler can handle any errors that happen while loading dependencies.
37
+ #
38
+ # `handle_exceptions` can also be overridden in order to provide error handling.
39
+ module LambdaFunction
40
+ def initialize(output: $stdout, monotonic_clock: Support::MonotonicClock.new)
41
+ handle_exceptions do
42
+ log_duration(output, monotonic_clock, "Booting the lambda function") do
43
+ super()
44
+ end
45
+ end
46
+ end
47
+
48
+ def handle_request(event:, context:)
49
+ handle_exceptions { super }
50
+ end
51
+
52
+ private
53
+
54
+ # By default we just allow exceptions to bubble up. This is provided so that there is an exception handling hook that can be overridden.
55
+ def handle_exceptions
56
+ yield
57
+ end
58
+
59
+ def log_duration(output, monotonic_clock, description)
60
+ start_ms = monotonic_clock.now_in_ms
61
+ yield
62
+ stop_ms = monotonic_clock.now_in_ms
63
+ duration_ms = stop_ms - start_ms
64
+
65
+ output.puts "#{description} took #{duration_ms} milliseconds."
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,74 @@
1
+ # Copyright 2024 Block, Inc.
2
+ #
3
+ # Use of this source code is governed by an MIT-style
4
+ # license that can be found in the LICENSE file or at
5
+ # https://opensource.org/licenses/MIT.
6
+ #
7
+ # frozen_string_literal: true
8
+
9
+ require "elastic_graph/lambda_support/json_aware_lambda_log_formatter"
10
+ require "faraday_middleware/aws_sigv4"
11
+ require "json"
12
+
13
+ module ElasticGraph
14
+ module LambdaSupport
15
+ # Helper method for building ElasticGraph components from our lambda ENV vars.
16
+ # `klass` is expected to be `ElasticGraph::Admin`, `ElasticGraph::GraphQL`, or `ElasticGraph::Indexer`.
17
+ #
18
+ # This is meant to only deal with ENV vars and config that are common across all ElasticGraph
19
+ # components (e.g. logging and OpenSearch clients). ENV vars that are specific to one component
20
+ # should be handled elsewhere. This accepts a block which can further customize configuration as
21
+ # needed.
22
+ def self.build_from_env(klass)
23
+ klass.from_yaml_file(
24
+ ENV.fetch("ELASTICGRAPH_YAML_CONFIG"),
25
+ datastore_client_customization_block: ->(faraday) { configure_datastore_client(faraday) }
26
+ ) do |settings|
27
+ settings = settings.merge(
28
+ "logger" => override_logger_config(settings.fetch("logger")),
29
+ "datastore" => override_datastore_config(settings.fetch("datastore"))
30
+ )
31
+
32
+ settings = yield(settings) if block_given?
33
+ settings
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def self.override_datastore_config(datastore_config)
40
+ env_urls_by_cluster = ::JSON.parse(ENV.fetch("OPENSEARCH_CLUSTER_URLS"))
41
+ file_settings_by_cluster = datastore_config.fetch("clusters").transform_values { |v| v["settings"] }
42
+
43
+ datastore_config.merge(
44
+ "clusters" => env_urls_by_cluster.to_h do |cluster_name, url|
45
+ cluster_def = {
46
+ "url" => url,
47
+ "backend" => "opensearch",
48
+ "settings" => file_settings_by_cluster[cluster_name] || {}
49
+ }
50
+
51
+ [cluster_name, cluster_def]
52
+ end
53
+ )
54
+ end
55
+
56
+ def self.override_logger_config(logger_config)
57
+ logger_config.merge({
58
+ "level" => ENV["ELASTICGRAPH_LOG_LEVEL"],
59
+ "formatter" => JSONAwareLambdaLogFormatter.name
60
+ }.compact)
61
+ end
62
+
63
+ def self.configure_datastore_client(faraday)
64
+ faraday.request :aws_sigv4,
65
+ service: "es",
66
+ region: ENV.fetch("AWS_REGION"), # assumes the lambda and OpenSearch cluster live in the same region.
67
+ access_key_id: ENV.fetch("AWS_ACCESS_KEY_ID"),
68
+ secret_access_key: ENV.fetch("AWS_SECRET_ACCESS_KEY"),
69
+ session_token: ENV["AWS_SESSION_TOKEN"] # optional
70
+ end
71
+
72
+ private_class_method :override_datastore_config, :override_logger_config, :configure_datastore_client
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,348 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: elasticgraph-lambda_support
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.18.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Myron Marston
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-08-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubocop-factory_bot
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.26'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.26'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop-rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop-rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: standard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.39.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.39.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: steep
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coderay
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: flatware-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 2.3.2
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 2.3.2
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.13'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.13'
131
+ - !ruby/object:Gem::Dependency
132
+ name: super_diff
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 0.12.1
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 0.12.1
145
+ - !ruby/object:Gem::Dependency
146
+ name: simplecov
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.22'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.22'
159
+ - !ruby/object:Gem::Dependency
160
+ name: simplecov-console
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 0.9.1
166
+ - - "<"
167
+ - !ruby/object:Gem::Version
168
+ version: '1.0'
169
+ type: :development
170
+ prerelease: false
171
+ version_requirements: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: 0.9.1
176
+ - - "<"
177
+ - !ruby/object:Gem::Version
178
+ version: '1.0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: aws_lambda_ric
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 2.0.0
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 2.0.0
193
+ - !ruby/object:Gem::Dependency
194
+ name: elasticgraph-opensearch
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - '='
198
+ - !ruby/object:Gem::Version
199
+ version: 0.18.0.0
200
+ type: :runtime
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - '='
205
+ - !ruby/object:Gem::Version
206
+ version: 0.18.0.0
207
+ - !ruby/object:Gem::Dependency
208
+ name: faraday_middleware-aws-sigv4
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - "~>"
212
+ - !ruby/object:Gem::Version
213
+ version: '1.0'
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - "~>"
219
+ - !ruby/object:Gem::Version
220
+ version: '1.0'
221
+ - !ruby/object:Gem::Dependency
222
+ name: logger
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - "<"
226
+ - !ruby/object:Gem::Version
227
+ version: 1.6.0
228
+ type: :runtime
229
+ prerelease: false
230
+ version_requirements: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - "<"
233
+ - !ruby/object:Gem::Version
234
+ version: 1.6.0
235
+ - !ruby/object:Gem::Dependency
236
+ name: elasticgraph-admin
237
+ requirement: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - '='
240
+ - !ruby/object:Gem::Version
241
+ version: 0.18.0.0
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - '='
247
+ - !ruby/object:Gem::Version
248
+ version: 0.18.0.0
249
+ - !ruby/object:Gem::Dependency
250
+ name: elasticgraph-graphql
251
+ requirement: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - '='
254
+ - !ruby/object:Gem::Version
255
+ version: 0.18.0.0
256
+ type: :development
257
+ prerelease: false
258
+ version_requirements: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - '='
261
+ - !ruby/object:Gem::Version
262
+ version: 0.18.0.0
263
+ - !ruby/object:Gem::Dependency
264
+ name: elasticgraph-indexer
265
+ requirement: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - '='
268
+ - !ruby/object:Gem::Version
269
+ version: 0.18.0.0
270
+ type: :development
271
+ prerelease: false
272
+ version_requirements: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - '='
275
+ - !ruby/object:Gem::Version
276
+ version: 0.18.0.0
277
+ - !ruby/object:Gem::Dependency
278
+ name: elasticgraph-indexer_autoscaler_lambda
279
+ requirement: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - '='
282
+ - !ruby/object:Gem::Version
283
+ version: 0.18.0.0
284
+ type: :development
285
+ prerelease: false
286
+ version_requirements: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - '='
289
+ - !ruby/object:Gem::Version
290
+ version: 0.18.0.0
291
+ - !ruby/object:Gem::Dependency
292
+ name: httpx
293
+ requirement: !ruby/object:Gem::Requirement
294
+ requirements:
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ version: 1.2.6
298
+ - - "<"
299
+ - !ruby/object:Gem::Version
300
+ version: '2.0'
301
+ type: :development
302
+ prerelease: false
303
+ version_requirements: !ruby/object:Gem::Requirement
304
+ requirements:
305
+ - - ">="
306
+ - !ruby/object:Gem::Version
307
+ version: 1.2.6
308
+ - - "<"
309
+ - !ruby/object:Gem::Version
310
+ version: '2.0'
311
+ description:
312
+ email:
313
+ - myron@squareup.com
314
+ executables: []
315
+ extensions: []
316
+ extra_rdoc_files: []
317
+ files:
318
+ - LICENSE.txt
319
+ - README.md
320
+ - elasticgraph-lambda_support.gemspec
321
+ - lib/elastic_graph/lambda_support.rb
322
+ - lib/elastic_graph/lambda_support/json_aware_lambda_log_formatter.rb
323
+ - lib/elastic_graph/lambda_support/lambda_function.rb
324
+ homepage:
325
+ licenses:
326
+ - MIT
327
+ metadata:
328
+ gem_category: lambda
329
+ post_install_message:
330
+ rdoc_options: []
331
+ require_paths:
332
+ - lib
333
+ required_ruby_version: !ruby/object:Gem::Requirement
334
+ requirements:
335
+ - - "~>"
336
+ - !ruby/object:Gem::Version
337
+ version: '3.2'
338
+ required_rubygems_version: !ruby/object:Gem::Requirement
339
+ requirements:
340
+ - - ">="
341
+ - !ruby/object:Gem::Version
342
+ version: '0'
343
+ requirements: []
344
+ rubygems_version: 3.5.9
345
+ signing_key:
346
+ specification_version: 4
347
+ summary: ElasticGraph gem that supports running ElasticGraph using AWS Lambda.
348
+ test_files: []