-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.ros
60 lines (51 loc) · 1.99 KB
/
template.ros
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 "$@"
|#
(setf *features* (delete :ipv6 *features*)) ;; ccl
;;; ここに本来のrosファイルが挿入される
;;; shebangだけ削除しておく
{{body|safe}}
(progn ;;init forms
(declaim (optimize (speed 0) (space 0) (debug 3) (safety 3)))
(ros:ensure-asdf)
(setf *features* (delete :ipv6 *features*)) ;; ccl
#+quicklisp (ql:quickload '(:dexador :uiop :cl-ppcre :jsown) :silent nil)
)
(defpackage :ros.script.bootstrap.3758360166
(:use :cl))
(in-package :ros.script.bootstrap.3758360166)
(defvar *handler*)
(defvar *lambda-task-root*)
(defvar *aws-lambda-runtime-api*)
(defun load-envvar ()
"Loads environment variables to work lambda script correctly."
(setf *handler*
(uiop:getenv "_HANDLER"))
(setf *lambda-task-root*
(uiop:getenv "LAMBDA_TASK_ROOT"))
(setf *aws-lambda-runtime-api*
(uiop:getenv "AWS_LAMBDA_RUNTIME_API")))
(defun set-json-settings ()
(setf jsown::*parsed-true-value* t)
(setf jsown::*parsed-false-value* :f)
(setf jsown::*parsed-null-value* :null)
(setf jsown::*parsed-empty-list-value* nil))
(defun main-loop (handler)
"Main loop processes lambda requests. Specify function designator with HANDLER."
(declare (ignorable handler))
(let ((next-endpoint
(format nil "http://~A/2018-06-01/runtime/invocation/next" *aws-lambda-runtime-api*)))
(loop for (body status headers . nil) = (multiple-value-list (dex:get next-endpoint))
as request-id = (gethash "lambda-runtime-aws-request-id" headers)
as response = (funcall (find-symbol "MAIN" "{{ros-package}}") handler (jsown:parse body))
as response-endpoint = (format nil "http://~A/2018-06-01/runtime/invocation/~A/response" *aws-lambda-runtime-api* request-id)
do (dex:post response-endpoint :content (jsown:to-json response)))))
;; lambda entrypoint
(defun main ()
(load-envvar)
(set-json-settings)
(uiop:chdir *lambda-task-root*)
(main-loop *handler*))
;;; vim: set ft=lisp lisp: