You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何完成Amazon SNS HTTPS订阅确认及定位请求发送位置

解决Amazon SNS HTTPS订阅确认及请求排查问题

一、完成HTTPS URL的订阅确认

当你添加HTTPS订阅后,SNS会自动向你的HTTPS端点发送订阅确认POST请求,确认流程如下:

  • 你的HTTPS服务(比如Lambda+API Gateway)需要接收这个POST请求,从请求体中提取SubscribeURL字段
  • 向该SubscribeURL发送一个GET请求,完成订阅确认
  • 端点必须返回200状态码,否则SNS会重复发送确认请求,多次失败后订阅会被标记为失效

以下是JavaScript Lambda的示例处理代码:

exports.handler = async (event) => {
  const requestBody = JSON.parse(event.body);

  // 处理订阅确认请求
  if (requestBody.Type === 'SubscriptionConfirmation') {
    const subscribeUrl = requestBody.SubscribeURL;
    // 发送GET请求完成确认
    await fetch(subscribeUrl);
    return { statusCode: 200, body: 'Subscription confirmed' };
  }

  // 处理后续的通知消息
  if (requestBody.Type === 'Notification') {
    // 这里写你的业务处理逻辑
    return { statusCode: 200, body: 'Notification processed' };
  }

  return { statusCode: 400, body: 'Invalid request type' };
};

二、排查订阅确认POST请求的发送位置

  • CloudWatch日志(Lambda/API Gateway场景):如果你的HTTPS端点是Lambda+API Gateway,直接去对应Lambda函数的CloudWatch日志组,能找到SNS发送的POST请求的完整内容,包括请求头、请求体
  • SNS控制台订阅状态:在SNS控制台的「订阅」列表中,查看对应订阅的状态:PendingConfirmation表示未完成确认,Confirmed表示已成功
  • 服务器抓包(自建服务场景):如果是自己托管的HTTPS服务,在服务器上用tcpdump工具抓包,过滤目标端口的POST请求,命令示例:
    tcpdump -i any port 443 and host <你的服务器IP> -A
    
  • 死信队列(DLQ):如果Topic配置了死信队列,当确认请求发送失败时,SNS会将消息转发到DLQ,你可以在对应SQS队列中查看失败的请求内容

内容的提问来源于stack exchange,提问作者Laxman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:42:42