使用 aws cdk(typescript) 将 sqs 队列订阅到不同帐户中的 sns 主题

Bas*_*ana 7 amazon-sqs amazon-web-services amazon-sns typescript aws-cdk

我想使用 cdk(打字稿)将 sqs 队列连接到不同帐户中的 sns 主题。下面是代码(此代码在堆栈中),我认为应该工作,但我的代码下面列出了一些疑惑(我还没有部署此,仍然努力学习如何做到这一点在前)。

    const topic = Topic.fromTopicArn(
      this,
      `${stackName}-topic`,
      `arn:aws:sns:${region}:${accountno}:SubscriptionChanges`
    );

    topic.addSubscription(
      new SqsSubscription(queue, {
        filterPolicy: {
          type: SubscriptionFilter.stringFilter({
            whitelist: [
              'filter1',
            ],
          })
        },
      })
    );
  }
Run Code Online (Sandbox Code Playgroud)
  • 我使用fromTopicArn来启动主题构造。如果我不是该主题的所有者,我是否可以这样做(该主题是在不同的帐户中定义的,因此我正在尝试执行此跨帐户操作)?
  • 有没有办法在不创建上面第一行的主题变量的情况下创建 sqs 订阅?

我已阅读文档,并且有用于此的示例代码,但它仅显示如何在同一帐户中执行此操作。任何有这方面经验的人?

Bas*_*ana 18

经过一番研究后我得到了一些答案。

即使您不拥有该主题,您也可以创建主题构造,并且可以将队列连接到该主题,但您(或更具体地说,您的帐号)必须获得主题所有者的访问权限。

const queue = make_my_queue();
const topic = sns.Topic.fromTopicArn(
  this, // assuming `this` is your Deployment Stack object.
  "myTopicId",
  "arn:aws:sns:eu-west-1:123123123123:MyFriendsGreatSnsTopic");

topic.addSubscription(new snsSubs.SqsSubscription(queue), {
   rawMessageDelivery: true // or false if you want
});
Run Code Online (Sandbox Code Playgroud)