AWS SNS:如何在禁用ARN时阻止AWS抛出内部服务器错误?

时间:2018-02-21 16:37:37

标签: amazon-web-services aws-lambda aws-sdk amazon-sns

我正在使用AWS编写推送通知服务。用户可以注册多个设备来接收通知。

我将每个ARN(亚马逊资源名称)存储在DynamoDB中。当向用户发送通知时,我获取所有ARN并向每个ARN发布通知。

但是,在某些时候,ARN可能会禁用。这当然意味着无法将通知发送到此特定设备。

如何在尝试发送通知之前使用aws-sdk来确定是否启用/禁用了端点?

现在,我得到HTTP 502 Internal Server Error回复。

CloudWatch日志:

018-02-21T16:31:03.742Z 9bc412f6-1724-11e8-aa7b-596b69243ced    { 
EndpointDisabled: Endpoint is disabled .
...
message: 'Endpoint is disabled',
code: 'EndpointDisabled',
time: 2018-02-21T16:31:03.742Z,
requestId: '6217ac24-89f4-5be5-b6da-ff2328f3cdf4',
statusCode: 400,
retryable: false,
retryDelay: 24.93677139755519 }

我的服务堆栈:

  • API网关
  • AWS Lambda
  • DynamoDB
  • AWS SNS

如前所述,我使用aws-sdk

1 个答案:

答案 0 :(得分:0)

您可以使用AWS.SNS.getEndpointAttributes():

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#getEndpointAttributes-property

var params = {
  EndpointArn: 'STRING_VALUE' /* required */
};
sns.getEndpointAttributes(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

这会返回几个属性,包括Enabled标志:

Enabled -- flag that enables/disables delivery to the endpoint. Amazon SNS
will set this to false when a notification service indicates to Amazon SNS
that the endpoint is invalid. Users can set it back to true, typically after
updating Token.