@@ -239,12 +239,22 @@ def run_lambda(func, event, context, func_arn, suppress_output=False):
239239 handler_args = '"%s"' % handler
240240 entrypoint = ''
241241
242+ # prepare event body
243+ if not event :
244+ LOG .warning ('Empty event body specified for invocation of Lambda "%s"' % func_arn )
245+ event = {}
246+ event_body = json .dumps (event )
247+
242248 # if running a Java Lambda, set up classpath arguments
243249 if runtime == LAMBDA_RUNTIME_JAVA8 :
250+ # copy executor jar into temp directory
251+ cp_r (LAMBDA_EXECUTOR_JAR , lambda_cwd )
244252 # TODO cleanup once we have custom Java Docker image
245- event_file = 'event_file.json' # TODO
246- handler_args = ("java -cp .:`ls *.jar | tr '\\ n' ':'` '%s' '%s' '%s'" %
247- (LAMBDA_EXECUTOR_CLASS , handler , event_file ))
253+ taskdir = '/var/task'
254+ event_file = 'event_file.json'
255+ save_file (os .path .join (lambda_cwd , event_file ), event_body )
256+ handler_args = ("bash -c 'cd %s; java -cp .:`ls *.jar | tr \" \\ n\" \" :\" ` \" %s\" \" %s\" \" %s\" '" %
257+ (taskdir , LAMBDA_EXECUTOR_CLASS , handler , event_file ))
248258 entrypoint = ' --entrypoint ""'
249259
250260 if config .LAMBDA_REMOTE_DOCKER :
@@ -268,16 +278,11 @@ def run_lambda(func, event, context, func_arn, suppress_output=False):
268278 ) % (entrypoint , lambda_cwd_on_host , runtime , handler_args )
269279
270280 print (cmd )
271- # prepare event body
272- if event is None or str (event ).strip () == '' :
273- LOG .warning ('Empty event body specified for invocation of Lambda "%s"' % func_arn )
274- event_body = '{}'
275- else :
276- event_body = json .dumps (event ).replace ("'" , "\\ '" )
281+ event_body_escaped = event_body .replace ("'" , "\\ '" )
277282 # lambci writes the Lambda result to stdout and logs to stderr, fetch it from there!
278283 env_vars = {
279- 'AWS_LAMBDA_EVENT_BODY' : event_body ,
280- 'HOSTNAME' : DOCKER_BRIDGE_IP ,
284+ 'AWS_LAMBDA_EVENT_BODY' : event_body_escaped ,
285+ 'HOSTNAME' : DOCKER_BRIDGE_IP
281286 }
282287 result , log_output = run_lambda_executor (cmd , env_vars )
283288 LOG .debug ('Lambda log output:\n %s' % log_output )
@@ -367,7 +372,7 @@ def set_function_code(code, lambda_name):
367372
368373 def generic_handler (event , context ):
369374 raise Exception (('Unable to find executor for Lambda function "%s". ' +
370- 'Note that non-Python Lambdas require LAMBDA_EXECUTOR=docker' ) % lambda_name )
375+ 'Note that Node.js Lambdas currently require LAMBDA_EXECUTOR=docker' ) % lambda_name )
371376
372377 lambda_handler = generic_handler
373378 lambda_cwd = None
0 commit comments