如何在 Lambda 中引用通过 SAM 创建的 AWS 资源?

How to reference an AWS resource created via SAM in a Lambda?

我正在尝试写入我在与我的 lambda 相同的 SAM 模板中创建的 SQS 队列。要向队列发送消息,我需要 URL。

client.send_message(QueueUrl='string', MessageBody='string', ...)

如果我有队列名称 (client.get_queue_url(QueueName='string', QueueOwnerAWSAccountId='string')),我可以获得 URL,但这是在 SAM 部署时随机生成的。对于函数,您可以在 template.yaml 中指定 FunctionName,但我还没有为队列找到这样的示例。

我知道在 template.yaml 中我可以使用 !Ref MyQueue 但我不知道在 lambda 中使用等效项。我假设有一个技巧,我只是不知道那个技巧:)

您可以将队列 URL 作为环境变量传递给 lambda。这允许您在模板中使用 !Ref MyQueue 来引用队列。只需将其添加到 lambda 配置的 Environment -> Variables 部分。