Serverless 订阅其他区域的 SNS
Posted
技术标签:
【中文标题】Serverless 订阅其他区域的 SNS【英文标题】:Serverless subscribe to SNS in another region 【发布时间】:2021-01-19 16:01:09 【问题描述】:我在区域 eu-west-1 中有 SNS 主题 SNS1 和所有其他服务 SQS1 并且在 eu-central-1 我想要的是通过无服务器框架将我的 SQS 订阅到 SNS 主题
我当前的无服务器定义是
Resources:
SNS1:
Type: AWS::SNS::Topic
Properties:
TopicName: "SNS1"
SQS1:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "SQS1"
snsSubscription:
Type: "AWS::SNS::Subscription"
Properties:
TopicArn: !Ref SNS1
Endpoint: !GetAtt
- SQS2
- Arn
Protocol: sqs
RawMessageDelivery: "true"
但这会在 eu-central-1(我的默认区域)中创建一个新的 SNS 主题,我不希望这样,是否有一些参数可以直接指定 SNS ARN? 或者 指定 SNS 的区域?
我已经尝试过这种配置,但它不起作用
Resources:
SQS1:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "SQS1"
snsSubscription:
Type: "AWS::SNS::Subscription"
Properties:
TopicArn: "arn:aws:sqs:eu-west-1:776751225653:SNS1"
Endpoint: !GetAtt
- SQS2
- Arn
Protocol: sqs
RawMessageDelivery: "true"
我得到错误:
发生错误:snsSubscription - 无效参数:TopicArn(服务:AmazonSNS;状态代码:400;错误代码:InvalidParameter;请求 ID:9494047a-f933-5ece-9af8-5cfbf94a78a4;代理:null)。
请注意,名称是虚构的,我的资源名称中没有数字
【问题讨论】:
【参考方案1】:创建两个堆栈:
-
在区域 1 中,创建 SNS 主题和所有其他区域 1 资源。
在区域 2 中,创建 SQS 队列、SNS 订阅和其他区域 2 资源。将区域 1 SNS 主题 ARN 作为输入参数传递给此堆栈(或者您可以使用区域 1 堆栈中的 CloudFormation 输出)。
【讨论】:
您能否详细描述一下区域 2 资源部分的外观?正如您在我的第二个片段中看到的那样,我尝试直接用 ARN 指向但不起作用 您已经展示了两个模板片段。它们代表什么?每个区域的堆栈?它们似乎无效(例如,对不存在的 SQS2 的引用)。 我只有一个堆栈,在 eu-central-1 区域,SNS 是由另一个应用程序创建的,我只想订阅以上是关于Serverless 订阅其他区域的 SNS的主要内容,如果未能解决你的问题,请参考以下文章
ArkUI eTS 云函数计算十二生肖[Serverless]
Spring Boot Serverless 实战系列“部署篇” | Mall 应用
云原生之上,亚马逊云科技发布多项容器与Serverless服务,持续发力现代化应用