我需要将 AWS Lambda 函数从一个 AWS 账户或 AWS 区域转移到另一个 AWS 账户或区域。
简短描述
若要将 Lambda 函数迁移到其他 AWS 账户或区域,请使用 AWS Serverless Application Model(AWS SAM)文件:
- 下载 Lambda 函数的 AWS SAM 文件及其部署包。
- 将 Lambda 函数的部署包上传到您要将函数迁移到的区域中的 Amazon Simple Storage Service(Amazon S3)桶。
- 使用 AWS SAM 文件和 AWS CloudFormation 在另一个 AWS 账户或区域中部署和管理新的 Lambda 函数。
有关详细信息,请参阅部署 Hello World 应用程序。
**注意:**您也可以在 Lambda 控制台或 AWS 命令行界面(AWS CLI)中迁移 Lambda 函数。
解决方法
下载 Lambda 函数 AWS SAM 文件及其部署包
- 在 Lambda 控制台中,选择左侧面板上的函数。
- 选择要迁移的 Lambda 函数的名称。
- 在 Lambda 函数窗口中,选择操作,然后选择导出函数。
- 在“导出函数”窗口中,选择下载 AWS SAM 文件。
- 下载 AWS SAM 文件后,返回导出函数窗口,然后选择下载部署程序包以下载部署包。
将 Lambda 函数的部署包上传到您要将函数迁移到的 AWS 区域中的 Amazon S3 桶
- 使用您要将 Lambda 函数迁移到的 AWS 账户登录 Amazon S3 控制台。
- 在存储桶列表中,选择要将文件上传到的 S3 桶的名称。
- 选择上传。
- 在“上传”页面上,选择添加文件。
- 选择您下载的 Lambda 函数部署包。然后,选择打开。
- 选择上传。
- 选择文件和文件夹。若要打开部署包,请选择部署包文件名。
- 在文件的对象概览部分,记下 S3 URI 值。这是部署包的 S3 路径位置。请保存该值以供下一步使用。
使用 AWS SAM 文件和 AWS CloudFormation 在另一个 AWS 账户或区域中部署和管理新的 Lambda 函数
-
打开您下载的 Lambda 函数 AWS SAM 文件。
示例 Lambda 函数 AWS SAM 文件代码
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
MyLambdaFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
CodeUri: . #S3 bucket Link
Description: ''
MemorySize: 128
Timeout: 6
Role: 'arn:aws:iam::733097455070:role/service-role/FirstLambdaPolicy' #Replace
Environment:
Variables:
homelocation: .tmp
Tags:
sampleTag: test
Tracing: Active
-
在 CodeUri 之后,将**圆点(.)**替换为您在上一步中检索到的 Lambda 部署包的 S3 路径位置。
**重要事项:确保创建 CloudFormation 堆栈的 AWS Identity and Access Management(IAM)用户对此 S3 对象拥有“s3:GetObject”**权限。
-
将函数迁移到其他 AWS 账户:
对于 Role: 值,删除现有的 IAM 角色 ARN。然后,将该值替换为第二个 AWS 账户中的 IAM 角色 ARN。
对于具有层的函数,在层中为第二个 AWS 账户添加权限,允许该层使用第一个账户的层。或者,将 AWS SAM 文件中的 Lambda 层 ARN 替换为第二个 AWS 账户中的 Lambda 层 ARN。
-或-
将函数迁移到另一个区域:
对于 Role: 值,请继续使用现有的 IAM 角色 ARN。
对于具有层的函数,请将 Lambda 层 ARN 替换为第二个 AWS 区域中的 Lambda 层 ARN。
**重要事项:**对于虚拟私有云(VPC)中的函数,请将 SecurityGroupdIds 和 SubnetIds 的值替换为第二个 AWS 账户或区域中的资源。
-
对于带有事件源的函数,事件源配置不会作为从 Lambda 函数下载的 AWS SAM 文件的一部分导出。若要将原始事件源与第二个账户或区域的资源值进行匹配,请参阅“events”属性的语法。然后,将事件添加到您的第二个 AWS 账户或区域的 AWS SAM 文件中。
-
使用编辑后的 AWS SAM 文件在要将函数迁移到的第二个 AWS 账户或区域中创建 AWS CloudFormation 堆栈。
**注意:**在创建 AWS CloudFormation 堆栈后,迁移后的 Lambda 函数将显示在您的 Lambda 控制台中。