我想要在一个账户中创建一个 AWS Lambda 函数,然后从另一个账户中的 AWS CloudFormation 自定义资源调用该函数。
简短描述
只有当函数和资源位于同一 AWS 区域中时,您才能从另一个账户中的自定义资源调用 Lambda 函数。AWS::CloudFormation::CustomResource 的 ServiceToken 属性必须位于您创建 AWS CloudFormation 堆栈的同一区域。必须使用基于资源的策略来向具有自定义资源的账户授予调用 Lambda 函数的权限。
**注意:**如果将 Lambda 函数与自定义资源关联,则每当创建、更新或删除函数时,自定义资源都会调用该函数。CloudFormation 会调用一个 Lambda API 来将所有请求数据(如请求类型和资源属性)传递给该函数。
解决方法
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,请确保使用的是最新版本的 AWS CLI。
在主账户(账户 A)中运行 AWS CLI add-permission 命令。该命令授予 Lambda 函数对另一个账户(账户 B)中的自定义资源的访问权限。
-或-
使用 AWS::Lambda::Permission 资源授予账户 B 调用账户 A 中的 Lambda 函数的权限:
- 当通过账户 A 中的堆栈创建 Lambda 函数时,使用 AWS::Lambda::Permission 资源来向账户 B 授予权限。
- 在账户 B 中,启动包含自定义资源的 AWS CloudFormation 堆栈。
注意:确保 ServiceToken 引用来自账户 A 的 Lambda 函数的 Amazon 资源名称(ARN)。请包括要发送到自定义资源的任何其他属性作为输入。
- 使用 Amazon CloudWatch Logs 确认账户 B 中的自定义资源调用了账户 A 中的 Lambda 函数。
相关信息
向其他账户授予函数访问权限