我有一个CDK堆栈,可同时创建lambda和SNS主题。设置策略以允许Lambda发布到SNS主题。
我很难在我的lambda运行时代码中指定Topic ARN,因为从技术上讲它还没有创建,只是在堆栈中。
如何在Lambda代码中引用主题ARN,以便Lambda发布到该主题? Lambda用python编写。我正在使用fromAsset
方法(https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-readme.html)在堆栈中指定我的lambda运行时代码。
sns = boto3.client('sns')
responce = sns.publish(
TopicArn="arn would go here --- not sure what to put here w/ no arn",
Message="my_message"
)
答案 0 :(得分:1)
您可以在Lambda中将主题ARN作为环境变量传递
topic = sns.Topic(self, "MyTopic")
lambda.Function(
self, "MyLambda",
...,
environment={'TOPIC_ARN': topic.topic_arn}
)
,然后在您的运行时代码中使用它:
sns = boto3.client('sns')
responce = sns.publish(
TopicArn=os.environ.get('TOPIC_ARN'),
Message="my message"
)
答案 1 :(得分:0)
除了@jogold的答案外,还可以使用创建的SNS的arn在cdk中创建环境变量。如下图所示,
{"topic_arn":sns_topic.topicArn}
topic_arn是env变量的名称,而sns_topic是cdk创建的SNS的引用变量。