swift-lambda-app, Amazon的快速和 Docker 应用

分享于 

9分钟阅读

GitHub

  繁體 雙語
Amazon Lambda app with Swift and Docker
  • 源代码名称:swift-lambda-app
  • 源代码网址:http://www.github.com/choefele/swift-lambda-app
  • swift-lambda-app源代码文档
  • swift-lambda-app源代码下载
  • Git URL:
    git://www.github.com/choefele/swift-lambda-app.git
    Git Clone代码到本地:
    git clone http://www.github.com/choefele/swift-lambda-app
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/choefele/swift-lambda-app
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Swift + Amazon Lambda

    Swift 应用

    快速构建 Amazon Lambda应用的模板

    Build Status

    概述

    这个 repo 包含了代码和脚本,用于快速开始为 of,亚马逊计算平台服务器编写 Swift 应用程序。 它包含:

    swift-lambda-app受到 SwiftOnLambda的启发,它提供了在Lambda上执行 Swift 程序的初始工作代码。

    有关在Lambda上运行 Swift的详细介绍,请参见文章无服务器服务器。

    使用这里 repo-作为模板

    工具:无服务器插件( 可选)

    简单地 fork 这个 repo 开始在 Swift 中开发你自己的Lambda函数。 你也可以使用无服务器的方式为你创建这里 repo的副本,方法是使用 serverless install --url https://github.com/choefele/swift-lambda-app

    插件开发

    工具:Xcodengrok ( 可选)

    本文中的示例应用程序使用标准的Swift 包管理器目录布局和软件包文件,因此 swift buildswift testswift package generate-xcodeproj 工作如预期。 查看 SPM文档了解更多信息。

    有三个目标:

    • AlexaSkill: 这是一个带有实现自定义Alexa技能的代码库。 它是一个独立库,所以它可以被其他两个目标使用。 另外,库默认启用 ENABLE_TESTABILITY,这允许你在单元测试中使用 @testable import
    • :部署到Lambda的可执行文件。 这个程序使用 stdinstdout 来处理数据。
    • 服务器 ( 仅 macOS ): 为了简化定制的Alexa技巧,服务器目标为AlexaSkill库提供了一个HTTP接口。 这个HTTP服务器可以通过ngrok公开公开并在Alexa控制台中配置,它使你能够使用开发服务器上运行的代码开发和调试一个Alexa技巧。 这个目标只是 macOS,因为不可以能干净地分离目标依赖关系,并且我不想将服务器开发链接到 Lambda。

    对于开发,我推荐针对库目标的 TDD面向对象方法,因为这在代码更改的快速转变中。 上传到Lambda以快速验证更改并不是一个真正的选择,因为更新。 但是,像下面描述的那样通过HTTPS公开功能使你能够以稍微不同的方式测试和调试功能。

    若要运行本地HTTPS服务器,请执行下列操作:

    • 确保通过运行 swift build 来生成示例
    • 使用 swift package generate-xcodeproj 生成一个Xcode项目
    • 打开生成的Xcode项目,选择服务器方案并运行产品( r )。 这将在端口 8090处启动一个服务器
    • 通过安装 ngrok brew cask install ngrok 这里工具允许你将本地HTTP服务器公开到 internet
    • 运行 ngrok http 8090 并复制ngrok生成的HTTPS URL ( 它看起来类似于 https://258ba658.ngrok.io )
    • 创建Alexa技能
    • 转到 Alexa控制台,创建一个新技能
    • 技能类型:自定义交互模型
    • 意图: {"intents": [{"intent":"TestIntent"}]}
    • 示例说明:testIntent测试 swift"
    • SSL证书:选择"的开发端点是一个域的子域,该域具有来自证书颁发机构的通配符证书"
    • 服务端点类型:( 使用来自ngrok的URL )

    现在你可以在Alexa控制台中使用语音"测试 swift"来测试技巧。 这将调用本地HTTP服务器,允许你使用Alexa服务修改和调试代码。

    插件集成

    工具:DockerTravis

    在上传到Lambda之前,需要在Linux环境中运行单元测试并运行模拟执行环境的集成测试。 这个 repo 提供了 run-unit-tests.sh 来执行前者和 run-integration-tests.sh 来完成后者。

    run-unit-tests.sh 基于Ubuntu构建和测试 Swift Docker 容器中的Lambda目标,因为目前没有针对 Amazon Linux ( 基于 RHEL )的Swift 编译器。 如果你提供运行程序所必需的所有依赖项,那么在不同的Linux发行版上构建的可以执行文件彼此兼容。 因此,脚本捕获使用 ldd 运行可执行文件所需的所有共享库。

    为了证明产生的软件包工作,run-integration-tests.sh 在 Docker 容器中运行 Swift 代码的发布版本,并接近Lambda环境( 然而,只提供了一些 Docker 映像,并不一定会对Lambda所使用的内容进行处理。)。

    通过使用一个小的 node.js 脚本插件来实现与Lambda的集成,该脚本使用 MODULE 运行 Swift 可执行文件。 脚本遵循amazon向运行AWS中任意可执行文件的建议。

    配置 之后,你还可以为每个提交运行相同的集成脚本。

    部署Lambda函数

    使用无服务器框架的扩展部署

    工具:无服务器无服务器服务器

    这里项目包含用于无服务器框架插件的serverless.yml 配置文件,它自动上载和配置Lambda函数:

    要验证Lambda函数是否正常运行,请运行 sls invoke -f alexaSkill -p session_start.json

    手动部署

    要手动将代码部署到 Lambda:

    • 运行 run-integration-tests.sh.build/lambda/lambda.zip 上生成一个zip文件,所有需要的文件都要上传到 Lambda
    • 在美国东部/n的控制台控制台中创建一个新的Lambda函数。 弗吉尼亚地区( 欧洲使用欧盟/爱尔兰)
    • 使用Alexa技能套件触发器
    • 运行时:NodeJS 4.3
    • 代码条目类型:ZIP文件( 从上一步上载 lambda.zip 文件)
    • 处理程序:index.handler
    • 角色:从模板创建或者使用现有角色

    要验证Lambda函数是否有效,请使用AWS控制台中的内容来测试测试事件。

    创建Alexa技能

    创建Lambda函数后,你现在可以创建一个Alexa技能:

    • 转到 Alexa控制台,创建一个新技能
    • 技能类型:自定义交互模型
    • 意图: {"intents": [{"intent":"TestIntent"}]}
    • 示例说明:testIntent测试 swift"
    • 服务端点类型:AWS ( 使用AWS控制台中的)

    现在你可以在Alexa控制台中使用语音"测试 swift"来测试技巧。 关于配置Alexa技巧的更多细节可以在亚马逊门户网站的开发者上找到。


    DOC  Docker  DOCK  Swift  亚马逊  Lambda  
    相关文章