小编mar*_*log的帖子

Lambda集成与Lambda代理:优点和缺点

您认为在AWS API Gateway中使用和不使用代理功能的Lambda集成的优点和缺点是什么(更具体地说,在使用无服务器框架时)?这是我现在的想法:

Lambda与代理集成

  • Pro:人们可以快速进行原型设计和编码,而无需担心所有必需的配置细节(并重新发明一些轮子,如通用模板映射等).
  • Pro:返回任何状态代码和自定义标题非常容易,同时还有一种通用的方法来读取请求的正文,标题和参数.
  • Con:一切都在代码中完成,因此自动生成文档有点困难.依赖关系(标题,模型,返回的状态代码)在代码中"隐藏".

没有代理的Lambda集成

  • Con:需要更多的工作来设置它,并且这种配置可能在不同的资源中重复.
  • Pro:它允许人们分离lambda接收和返回的内容,以及如何将其映射到不同的HTTP状态代码,标头和有效负载.
  • Pro:非常有用,因为它预先规定了它返回的内容,以及它在标题和有效负载方面的要求.
  • Pro:从长远来看,设置所有内容时的艰苦工作非常有用,因为可以将所有内容导出到Swagger,以便其他人可以使用它为它生成不同的SDK.

你的想法是什么?您通常使用Lambda Proxy还是普通的Lambda集成?你喜欢什么,为什么?

编辑:到目前为止,我倾向于总是选择不使用代理功能,因为提到的原因(解耦和说明依赖关系 - 标题,状态代码等 - 预先).

aws-lambda aws-api-gateway serverless-framework

32
推荐指数
2
解决办法
5982
查看次数

在?_assertEqual失败时显示完整的预期值和值信息

我正在编写一个单元测试,其中生成一个(相当冗长的)二进制文件,我想断言生成的二进制文件等于我期望生成的二进制文件.我通过" rebar eunit " 运行eunit .

事情是,当这个断言失败时,输出被" ...... "消除,我想看到完整的输出,所以我可以发现差异在哪里.

我现在使用" ?debugFmt() "作为临时解决方案,但我想知道是否有替代它(某个地方的配置选项或参数可以应用于" ?_assertEqual() "所以输出仅在断言失败时显示).

提前致谢!

编辑:由于legoscia的答案,我使用测试生成器包含一个测试样本,有多个断言:

can_do_something(SetupData) ->
    % ... some code ... 
    [?_assertEqual(Expected1, Actual1), ?_assertEqual(Expected2, Actual2)].
Run Code Online (Sandbox Code Playgroud)

erlang eunit

5
推荐指数
1
解决办法
975
查看次数

在不事先知道N的情况下,在主管中申报N个工人的最佳方式

我正在开发一个包含1名主管和几名工人的应用程序.这些工作人员中的每一个都只是打开一个tcp套接字,执行监听,然后接受连接,为每个客户端到达时生成一个进程(我不介意监督这些).

我想在应用程序配置中配置侦听地址,因此我可以根据需要使用尽可能多的地址进行侦听(至少需要1个地址,但可以指定任何数字).每个地址都是ip(或主机名)和端口地址.到目前为止,没什么新意

我的问题是关于如何申报,启动和监督未知数量的工人.我的解决方案是在管理程序代码中动态生成(在运行时)init/1函数的结果,如下所示:

-define(
   CHILD(Name, Args),
   {Name, {
       ?MODULE, start_listen, Args
       }, permanent, 5000, worker, [?MODULE]
   }
).

init([]) ->
   {ok, Addresses} = application:get_env(listen),
   Children = lists:map(
       fun(Address) ->
           {X1,X2,X3} = os:timestamp(),
           ChildName = string:join([
               "Listener-",
               integer_to_list(X1),
               integer_to_list(X2),
               integer_to_list(X3)
           ], ""),
           ?CHILD(ChildName, [Address])
       end,
       Addresses
   ),
   {ok, { {one_for_one, 5, 10}, Children }}.
Run Code Online (Sandbox Code Playgroud)

这允许我为每个worker动态生成一个名称,并生成worker定义.所以:

  1. 这个解决方案可以接受 在我看来,它并不那么优雅.对于这种用例,是否有任何标准解决方案(或最佳实践等)?

  2. 我知道"simple_one_for_one"策略,它允许动态地将工作人员添加到主管.但它是否也可以用来动态生成工人的名字?是否更好(以任何方式)使用"simple_one_for_one"而不是我自己使用"one_for_one"的解决方案?(再次,对于这种特殊情况).

在此先感谢,并为长篇帖子感到抱歉!:)

erlang erlang-otp

2
推荐指数
1
解决办法
1667
查看次数