在Lambda运行时代码中引用ARN(在CDK堆栈中创建)

我有一个cdk堆栈,可同时创建lambdasnS主题。设置策略以允许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"
)
ad3344 回答:在Lambda运行时代码中引用ARN(在CDK堆栈中创建)

您可以在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"
)
,

除了@jogold的答案外,还可以使用创建的SNS的arn在cdk中创建环境变量。如下图所示,

{"topic_arn":sns_topic.topicArn}

topic_arn是env变量的名称,而sns_topic是cdk创建的SNS的引用变量。

本文链接:https://www.f2er.com/3135236.html

大家都在问