使用 CDK 的跨账户 SNS 订阅自动化

问题描述 投票:0回答:1

我有一个使用 CDK 管理的 SNS 主题。其他 AWS 账户中的客户希望将其 SQS 队列订阅到该主题。

我知道可以像这样手动执行此操作:

  1. 修改提供者(SNS)CDK包,赋予客户端权限
  2. 修改客户端(SQS)从SNS读取

这是一个选项,但它不可扩展。可能有大量客户端(数百+)想要接收 SNS 事件的权限。

ways 通过代码添加 SNS 订阅,因此我们可以启动一个轻量级前端,客户端可以 (1) 在他们的端授予 SNS 权限,以及 (2) 使用前端并输入他们的 SQS arn然后通过代码添加 SNS 权限。但是,我不确定这是否可行,因为我们将 CDK 用于 SNS。

有人有什么想法吗?有什么办法解决这个问题吗?

amazon-web-services aws-cdk amazon-sns
1个回答
0
投票

您可以将用户电子邮件放在一个文件中,然后更新您的堆栈。如果您不想手动执行此操作,您可以制作一个应用程序,当点击时将他们的主题添加到堆栈并更新它。代码将是这样的。

from aws_cdk import (
        Stack,
        aws_sns as sns,
        aws_sns_subscriptions as sns_sub
    )
from constructs import Construct
import os

new_email = [email protected]

class CdkTopicStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, email: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        topic = sns.Topic(self, "Topic",
                          display_name="Sync S3 Topic"
                          )

        topic.add_subscription(sns_sub.EmailSubscription(email_address=email))

app = cdk.App()

env = cdk.Environment(account=os.getenv("AWS_ACCOUNT"),
                      region=os.getenv("AWS_DEFAULT_REGION"))

CdkTopicStack(app,
              "Stack",
              env=env,
              email=new_email)


© www.soinside.com 2019 - 2024. All rights reserved.