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

eda*_*leh 2 amazon-sns aws-lambda aws-cdk

我有一个 CDK 堆栈,可以创建 lambda 和 SNS 主题。策略设置为允许 lambda 发布到 SNS 主题。

我很难在 lambda 运行时代码中指定主题 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"
)
Run Code Online (Sandbox Code Playgroud)

jog*_*old 6

您可以将主题 ARN 作为 Lambda 中的环境变量传递

topic = sns.Topic(self, "MyTopic")

lambda.Function(
  self, "MyLambda",
  ...,
  environment={'TOPIC_ARN': topic.topic_arn}
)
Run Code Online (Sandbox Code Playgroud)

然后在运行时代码中使用它:

sns = boto3.client('sns')
responce = sns.publish(
  TopicArn=os.environ.get('TOPIC_ARN'),
  Message="my message"
)
Run Code Online (Sandbox Code Playgroud)