![lambda表达式](https://i-blog.csdnimg.cn/blog_migrate/06327dde117b18135a270b4ac67853de.png)
lambda表达式
如果你还没有注意到了,我最近被唠叨试图开始使用时,我遭遇了陷阱AWSλ-S3正式例子。 虽然大多数这些愚蠢的错误的指责是对我自己的懒惰,过度自尊和缺乏对细节的关注,我个人觉得,在开始与一家领先的无服务器供应商不应该是那么难。
我在SLAppForge的团队也是如此。 他们建立了Sigma来实现它。
(警告:猫从书包里拿出来了!)
让我们看看Sigma可以做什么, 使您的无服务器生活变得轻松。
Sigma已经提供了S3缩略图样本的现成版本。 根据自述文件,如果您敢的话,部署它只需几分钟。
在此讨论中,让我们采用一种更为动手的方法:从原始缩略图示例中获取代码,将其粘贴到Sigma中,然后将其部署到AWS中-上一次我尝试在该块中运行的过程完全相同。 。
如您所知,Sigma代表您管理有关应用程序的许多“幕后”工作,包括功能权限,触发器配置和相关资源。 这取决于代码中遵循的某些语法准则,幸运的是,这些准则非常简单和普通。 因此,我们要做的就是获取原始源代码,将其粘贴到Sigma中,然后进行一些调整和拖放配置,而Sigma将理解并处理其余的内容。
如果您还没有这样做,现在是注册Sigma的绝佳时机,这样我们就可以开始以无服务器的出色表现激发您的灵感。 (不计其数,您确实需要一个Sigma帐户才能访问IDE 。)请参阅此小型指南。
进入后,只需从AWS文档中复制S3缩略图示例代码,然后将其推入Sigma的喉咙即可。
编辑本来会很平淡无聊,但现在开始显示一些有趣的东西。 特别是在编辑区域的左边界。
顶部的闪电符号(与带有突出显示的event
变量的函数标题相对)指示触发器; lambda函数的调用(入口)点。 尽管这不是功能本身的一部分,但仍应使用必要的源(S3存储桶),目标(拉姆达函数)和权限来正确配置它。
好消息是,使用Sigma,您只需要指示源(S3存储桶)配置即可; Sigma将负责其余的工作。
此时,闪电符号为红色,表示尚未配置触发器。 只需将S3条目从左窗格拖到上一行(函数标题),以向Sigma指示此lambda应该由S3事件触发。
一旦完成拖放操作,Sigma就会询问您拼图中缺少的部分:即S3存储桶(应作为lambda的触发点)以及应触发该操作的操作的性质; 在我们的例子中,这是图像文件的“对象创建”事件。
在指定源存储桶时,Sigma提供了两种选择:您可以选择
- 通过下拉列表(“现有存储桶”标签)选择一个现有存储桶,或
- 通过“ New Bucket”选项卡定义一个新的存储桶名称,以便Sigma在项目部署中重新创建它。
由于“图像文件”类别涉及多种文件类型,因此我们需要为lambda定义多个触发器,每个触发器对应于不同的文件类型。 (不幸的是,S3触发器尚不支持文件名前缀/后缀的模式;如果支持,则可以只使用一个触发器!)因此,让我们首先通过选择“创建对象”作为事件来定义JPG文件的触发器,然后输入“ .png”作为后缀,然后拖放并配置另一个触发器,以“ .jpg”作为后缀-您猜对了,就是JPG文件。
为第二个触发器选择存储桶时,需要记住一点:即使为第一个触发器输入了新的存储桶名称,也必须从“现有存储桶”选项卡中选择相同的,已经定义的存储桶。第二个触发器,而不是再次将存储桶名称作为“新”存储桶提供。 原因是Sigma跟踪每个新定义的资源(因为它必须在部署时创建存储桶),并且,如果两次定义一个新存储桶,Sigma将会感到“困惑”,并且部署可能无法按计划进行。 为了减轻歧义,当我们在现有存储桶列表下显示新定义的存储桶时,我们将其标记为“((新)”)(例如,新添加的my-new-bucket
my-new-bucket (New)
)–至少对于现在,直到我们找到更好的选择; 如果您有个不错的主意,请随时加入! 。
现在两个触发器都已准备就绪,我们可以继续进行操作了。
您可能已经在编辑器的左窗格中,在触发指示器的下方,在s3.getObject
和s3.putObject
调用的右边,注意到了两个S3图标。 这两个操作的参数块也将突出显示。 这表明Sigma已经确定了API调用,并且可以通过自动生成必要的提示使它们正常工作(例如执行权限)来帮助您。
单击第一个图标(与s3.getObject
)以打开操作编辑弹出窗口。 我们要做的就是为Bucket参数选择正确的存储桶名称(同样,请确保在“现有”标签上选择带“(新)”前缀的存储桶,而不是在输入框上重新输入存储桶名称。 “新”标签),然后点击更新。
同样,使用第二个图标( s3.putObject
),选择目标存储桶。 由于我们尚未添加或使用目标存储桶定义,因此您将在Sigma中添加新的存储桶定义; 因此,您可以选择现有的存储桶或为新的存储桶命名,就像第一个触发器一样。
仅需一步:添加依赖项。
尽管Sigma为您提供了将第三方依赖项添加到您的项目的强大功能,但是它确实需要在构建时知道依赖项的名称和版本。 由于我们将一个外来的代码块复制并粘贴到了编辑器中,因此我们应该分别告诉Sigma有关代码中使用的依赖项,以便将它们与我们的项目源捆绑在一起。 只需单击工具栏上的“添加依赖项”按钮,搜索依赖项,然后单击“添加”,所有添加的依赖项(以及两个默认值aws-sdk
和@slappforge/slappforge-sdk
)将显示在依赖项下拉列表中-在“添加依赖项”按钮下。
在本例中,必须遵循原始的AWS示例准则,我们必须添加async
(对于瀑布式执行流)和gm
(对于GraphicsMagick )依赖项。
做完了!
现在剩下的就是单击IDE工具栏上的Deploy按钮,使轮子运动!
首先,Sigma将把应用程序源保存(提交)到您的GitHub存储库中。 因此,请确保在Sigma要求您提供一个不错的提交消息时:)您也可以选择自己喜欢的仓库名称,如果不存在,Sigma会创建它。 (但是,在遇到“空”存储库(即没有主分支的仓库)时,Sigma有一个已知的故障,因此,如果您有全新的存储库,请确保对主分支进行至少一次提交;最简单的方法是创建自述文件,只需在创建回购文件时单击一下即可轻松完成。)
保存完成后,Sigma将自动构建您的项目,并打开一个部署摘要弹出窗口,其中显示与新的S3缩略图生成器有关的所有内容。 一些名称看起来有些乱七八糟,但它们通常会反映已部署资源的类型和名称(例如s3MyAwesomeBucket
可能代表一个名为my-awesome-bucket
的新S3存储my-awesome-bucket
)。
查看列表(如果您愿意),然后单击Deploy 。 部署机制将启动,并显示实时进度栏(以及日志视图,该视图显示项目的基础CloudFormation堆栈中发生的更改)。
部署完成后,您期待已久的缩略图生成器lambda就可以进行测试了! 只需将JPG或PNG文件上传到您选择的源存储桶中(通过S3控制台,或者如果您更像我,则通过aws s3 cp
),然后惊叹于将在目标存储桶中弹出的缩略图秒!
如果在目标存储桶中没有发现任何有趣的内容(稍等一会儿),则可以像检查其他lambda一样检查lambda的执行日志,以检查出了什么问题。 我们知道回到AWS控制台执行此操作很痛苦,并且我们希望很快也找到一种更酷的替代方法。
如果您想将生成的缩略图公开(就像我在前一篇文章中所说的那样,私有缩略图有什么用?),您不必四处阅读IAM文档,更新IAM角色并摆脱困境。 只需单击s3.putObject
调用上的S3操作编辑图标,从s3.putObject
列表中选择“ public-read
应用于对象的ACL”参数作为public-read
,然后单击“ Deploy”经历另一个保存-构建-部署周期。 (我们已经在努力加快这些“零钱”部署的速度,所以现在就让我们忍受吧:))新部署完成后,要查看任何新生成的缩略图,您只需输入URL http://<bucketname>.s3.amazonaws.com/resized-<original image name>
放入您喜欢的Web浏览器,然后按Enter!
哦,如果您遇到任何异常情况-提交/构建/部署失败,异常错误或Sigma本身的错误-别忘了通过Slack对我们进行ping操作或将问题发布到我们的公共问题跟踪器上; 您可以使用“帮助”→“报告问题”菜单项直接在IDE中进行操作。 对于您以后希望在Sigma中看到的任何改进或出色功能,也是如此:更快的构建和部署,下载构建/部署工件的能力,崭新的主题集等等。 请告知我们,我们会将其添加到待办事项中,并在不远的将来尝试一下!
好的,伙计们,该回去开始和Sigma一起玩了,而我写我的下一篇博客文章! 请继续关注SLAppForge的更多信息!
lambda表达式