繁体   English   中英

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

[英]Subscribe a sqs queue to a sns topic that is in a different account, using aws cdk(typescript)

我想使用 cdk (typescript) 将 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',
            ],
          })
        },
      })
    );
  }
  • 我使用fromTopicArn来启动主题构造。 如果我不是主题的所有者,我是否可以这样做(主题是在不同的帐户中定义的,所以我正在尝试跨帐户)?
  • 有没有办法创建一个 sqs 订阅而不在上面的第一行创建主题变量?

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

所以经过一些研究,我有了一些答案。

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

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
});

使用下面为跨帐户访问提供主题所有者

        topic.addToResourcePolicy(new PolicyStatement({
            sid: "Allow Access to subscribe",
            effect: Effect.ALLOW,
            principals: [new AccountPrincipal(<***>)],
            actions: [
                "SNS:Subscribe"
            ],
            resources: [
                topic.topicArn
            ]
        }))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM