使用 aws cdk(typescript) 将 sqs 队列订阅到不同帐户中的 sns 主题
Subscribe a sqs queue to a sns topic that is in a different account, using aws cdk(typescript)
我想使用 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',
],
})
},
})
);
}
- 我使用 fromTopicArn 来启动主题构造。如果我不是该主题的所有者(该主题是在不同的帐户中定义的,所以我正在尝试跨帐户),我可以这样做吗?
- 有没有办法在不在上面第一行创建 topic 变量的情况下创建 sqs 订阅?
我已阅读 documentation,并且,有这方面的示例代码,但它仅显示了如何在同一帐户中执行此操作。有人有这方面的经验吗?
经过一番研究,我有了一些答案。
即使您拥有主题,也可以创建主题构造,并且可以将队列连接到它,但您(或更具体地说,您的帐号)必须获得主题所有者的访问权限.
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
]
}))
我想使用 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',
],
})
},
})
);
}
- 我使用 fromTopicArn 来启动主题构造。如果我不是该主题的所有者(该主题是在不同的帐户中定义的,所以我正在尝试跨帐户),我可以这样做吗?
- 有没有办法在不在上面第一行创建 topic 变量的情况下创建 sqs 订阅?
我已阅读 documentation,并且,有这方面的示例代码,但它仅显示了如何在同一帐户中执行此操作。有人有这方面的经验吗?
经过一番研究,我有了一些答案。
即使您拥有主题,也可以创建主题构造,并且可以将队列连接到它,但您(或更具体地说,您的帐号)必须获得主题所有者的访问权限.
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
]
}))