Serverless 订阅另一个区域的 SNS

时间:2021-01-19 16:01:09

标签: amazon-web-services amazon-sqs amazon-sns serverless

我在区域 eu-west-1 和所有其他服务 SQS1 中有 SNS 主题 SNS1 并且在 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 个答案:

答案 0 :(得分:0)

创建两个堆栈:

  1. 在区域 1 中,创建 SNS 主题和所有其他区域 1 资源。
  2. 在区域 2 中,创建 SQS 队列、SNS 订阅和其他区域 2 资源。将区域 1 SNS 主题 ARN 作为输入参数传递给此堆栈(或者您可以使用区域 1 堆栈的 CloudFormation 输出)。
相关问题