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

时间:2019-11-08 20:36:42

标签: aws-lambda amazon-sns aws-cdk

我有一个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"
)

2 个答案:

答案 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的引用变量。