【问题标题】:AWS SNS: How to prevent AWS from throwing an Internal Server Error when an ARN is disabled?AWS SNS:如何防止 AWS 在禁用 ARN 时引发内部服务器错误?
【发布时间】:2023-03-10 10:56:02
【问题描述】:

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

我将每个 ARN(Amazon 资源名称)存储在 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

【问题讨论】:

  • 发生这种情况时,您似乎正在执行callback(error, ...。你是吗?

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


【解决方案1】:

您可以使用 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2019-12-21
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多