Erlang SNS amazon erlcloud发布失败并出现超时错误

时间:2017-11-20 04:31:36

标签: amazon-web-services erlang amazon-sns

我正在尝试使用erlcloud根据从客户端收到的endpointArn向移动设备发送推送通知。我能够使用Java应用程序成功推送通知。但是如果我尝试使用erlang,它会发出超时错误。以下是代码示例。

Config = erlcloud_sns:new(<<"Access Key">>,<<"secret Key">>,<<"sns.us-west-2.amazonaws.com">>).
erlcloud_sns:publish(target,<<"arn:aws:sns:us-west-2:2315XXXXXX:endpoint/GCM/testapp/XXXXXXX-fe9a-304e-aa52-XXXXXXXX">>,<<"ok">>,undefined,[],Config).

最后一条陈述显示如下错误。

** exception error: {sns_error,{socket_error,timeout}}
 in function  erlcloud_sns:sns_xml_request/3 (src/erlcloud_sns.erl, line 670)
 in call from erlcloud_sns:publish/6 (src/erlcloud_sns.erl, line 471)

access_key,secret_key,Host和endpointArn的相同值来自Java程序。

1 个答案:

答案 0 :(得分:1)

简短回答

将参数更改为字符串,它将起作用。即:

Config = erlcloud_sns:new("Access Key","secret Key","sns.us-west-2.amazonaws.com"). erlcloud_sns:publish(target,"arn:aws:sns:us-west-2:2315XXXXXX:endpoint/GCM/testapp/XXXXXXX-fe9a-304e-aa52-XXXXXXXX","ok",undefined,[],Config).

答案很长

erlcloud期望所有参数的字符串。不幸的是,它不是在存储它们之前验证配置值,而是存储您提供的任何内容,然后尝试使用它时失败。在这种情况下,它无法识别凭证here(因为保护功能is_list返回false)。最后,它回退到从ECS(here)获取凭据,在那里达到超时并导致您看到的错误。