cljs-lambda, 将Clojurescript函数部署到 AWS Lambda的实用程序

分享于 

5分钟阅读

GitHub

  繁體 雙語
Utilities around deploying Clojurescript functions to AWS Lambda
  • 源代码名称:cljs-lambda
  • 源代码网址:http://www.github.com/nervous-systems/cljs-lambda
  • cljs-lambda源代码文档
  • cljs-lambda源代码下载
  • Git URL:
    git://www.github.com/nervous-systems/cljs-lambda.git
    Git Clone代码到本地:
    git clone http://www.github.com/nervous-systems/cljs-lambda
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/nervous-systems/cljs-lambda
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    cljs-lambda

    Build Status

    美国 AWS Lambda是一个允许命名函数被直接调用的服务,它被各种AWS事件触发,或者作为HTTP端点的( 通过API网关插件) 服务。

    本自述文件用于记录一个 Leiningen插件模板( cljs-lambda ) 和小库( cljs-lambda ),以方便编写,部署和调用 Clojurescript Lambda函数。

    插件可以自己部署函数,或者可以通过 serverless-cljs-plugin插件使用优秀的服务器端框架。

    收益

    如果使用高级编译,则将需要与 node 库一起使用高级编译。

    状态

    项目集合在生产中广泛使用,用于基础设施的重要部分。 尽管为了确保插件中的向后兼容性,但是 cljs-lambda API受到破坏的影响。

    最近的更改

    • io.nervous/lein-cljs-lambda 0.6.0默认将部署函数的运行时设置为 nodejs4.3,除非在on或者命令行中使用 :runtime 重写。 虽然你的函数将向后兼容,但是你的AWS CLI安装可能需要更新以支持这里更改。
    坐标

    插件

    Clojars Project

    Clojars Project

    开始
    $ lein new cljs-lambda my-lambda-project
    $ cd my-lambda-project
    $ lein cljs-lambda default-iam-role
    $ lein cljs-lambda deploy### 500ms delay via a promise (try also"delay-channel" and"delay-fail")$ lein cljs-lambda invoke work-magic 
     '{"spell":"delay-promise","msecs": 500,"magic-word":"my-lambda-project-token"}'... {:waited 500}### Get environment varibles$ lein cljs-lambda invoke work-magic 
     '{"spell":"echo-env","magic-word":"my-lambda-project-token"}'...
    $ lein cljs-lambda update-config work-magic :memory-size 256 :timeout 66

    无服务器

    若要生成最小项目,请执行下列操作:

    $ lein new serverless-cljs my-lambda-project
    文档

    其他

    函数示例

    ( 使用承诺)

    (deflambdaslowly-attack [{target :name} ctx]
     (p/delay1000 {:to target :data"This is an attack"}))

    eulalie集成。

    ( 使用 core.async )

    这里函数检索它的下调用的NAME,然后尝试调用自身以递归计算它的输入的乘法器:

    (deflambdafac [n {:keys [function-name] :as ctx}]
     (go (if (<= n 1)
     n
     (let [[tag result] (<! (lambda/request! (creds/env) function-name (dec n)))]
     (* n result)))))

    有关详细信息,请参阅 eulalie.lambda.util 文档。

    使用适当权限和AWS交互的函数需要在具有适当权限的角色下执行,并且不会在插件任务创建的placeholder IAM角色下执行。

    进一步示例

    本文中的Lambda函数中使用 SNS & SQS is这个工作示例,以及讨论它的博客帖子。

    调用

    $ lein cljs-lambda invoke my-lambda-fn '{"arg1":"value".. .}' [:region.. .]

    以编程方式使用

    如果你对从 clojure/clojurescript调用Lambda函数感兴趣,那么使用 eulalie 非常容易:

    (eulalie.lambda.util/request! {:access-key.. . :secret-key.. . [:token:region etc.]}
     "my-lambda-fn" {:arg1"value":arg2 ["value"]})
    许可证

    cljs lambda是免费且不受限制的public 域软件。 有关更多信息,请参见 http://unlicense.org/ 或者附带的UNLICENSE文件。


    DEP  FUNC  函数  UTIL  Clojure  Utilities  
    相关文章