AWS SNS SMS在eu-west-2无法收验证码,eu-west-1正常求解决方案
AWS SNS eu-west-2区域沙箱验证码无法接收的可行修复方案
问题背景
在eu-west-2区域创建的SNS主题,添加SMS订阅时始终收不到沙箱验证码,CloudWatch日志显示消息已被运营商接受,但终端无接收;切换至eu-west-1区域则正常接收,工单及论坛求助无果。
修复方案
强制指定发送者ID尝试触发正确路由
英国号码默认不支持自定义发送者ID,但可尝试在发布验证消息时显式指定默认发送者ID,部分区域可能因路由规则需要该参数。用AWS CLI执行:aws sns publish --phone-number "+44XXXXXXXXXX" --message "Your verification code here" --sender-id "AWS" --region eu-west-2脱离沙箱使用正式SMS环境
沙箱环境的路由策略可能存在区域特定问题,申请提升SMS配额进入正式环境:- 进入AWS SNS控制台的SMS messaging页面
- 点击Request increase,填写用途、预计发送量等信息
- 审核通过后,正式环境的SMS路由可能绕过eu-west-2沙箱的异常节点
用Lambda转发至第三方SMS服务(临时替代)
若eu-west-2的SNS SMS持续异常,可通过Lambda将SNS消息转发到第三方服务(如Twilio)。示例Python Lambda代码:import requests def lambda_handler(event, context): sns_record = event['Records'][0]['Sns'] message = sns_record['Message'] phone_number = sns_record['Subject'] # 订阅时将号码设为主题Subject # 替换为你的Twilio账号信息 twilio_account_sid = "YOUR_ACCOUNT_SID" twilio_auth_token = "YOUR_AUTH_TOKEN" twilio_from_number = "+1234567890" requests.post( f"https://api.twilio.com/2010-04-01/Accounts/{twilio_account_sid}/Messages.json", auth=(twilio_account_sid, twilio_auth_token), data={ "From": twilio_from_number, "To": phone_number, "Body": message } ) return {'statusCode': 200}将SNS主题的订阅端点设置为该Lambda函数,替代原生SMS订阅。
重新提交AWS工单并提供精准诊断信息
之前工单未解决可能是信息不足,重新提交时务必包含:- 多个无法接收号码的完整E.164格式(隐去中间四位)
- CloudWatch日志中的完整
messageId、timestamp及运营商信息 - eu-west-1区域成功接收的对应日志对比
- 明确说明区域切换即可正常接收,要求排查eu-west-2沙箱的SMS路由节点
内容的提问来源于stack exchange,提问作者Terchila Marian
相关产品推荐
相关产品推荐

