Amazon web services Erlang SNS云发布失败,出现超时错误

Amazon web services Erlang SNS云发布失败,出现超时错误,amazon-web-services,erlang,amazon-sns,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:publis

我正在尝试使用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).
访问密钥、密钥、主机和endpointArn的值在Java程序中相同。

简短回答 将参数更改为字符串,它就会工作。i、 e:

Config=erlcloud\u sns:new(“访问密钥”、“秘密密钥”、“sns.us-west-2.amazonaws.com”)。
erlcloud\u sns:publish(目标,“arn:aws:sns:us-west-2:2315XXXXXX:endpoint/GCM/testapp/XXXXXXX-fe9a-304e-aa52-XXXXXXX”,“ok”,未定义,[],配置)。

长话短说 erlcloud要求所有参数都使用字符串。不幸的是,它不是在存储配置值之前验证配置值,而是存储您提供的任何内容,然后在尝试使用它时失败。在这种情况下,它无法识别凭据(因为guard函数为_list,返回false)。最后,它返回到从ECS()获取凭据,在那里遇到超时,并导致您看到的错误

** 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)