如何使用 AWS SAM 文件将 Lambda 函数迁移到另一个 AWS 账户或区域?

上次更新日期:2021 年 2 月 3 日

我需要将 AWS Lambda 函数从一个 AWS 账户(或 AWS 区域)移动到另一个账户。如何使用 AWS 无服务器应用程序模型 (AWS SAM) 文件来做到这一点?

简短描述

要使用 AWS SAM 文件将 Lambda 函数迁移到另一个 AWS 账户或区域,请执行以下操作:

1.    下载 Lambda 函数的 AWS SAM 文件及其部署软件包。

2.     将 Lambda 函数的部署软件包上传到您要将函数迁移到的 AWS 区域中的 Amazon 简单存储服务 (Amazon S3) 存储桶。

3.    使用 AWS SAM 文件和 AWS CloudFormation 在另一个 AWS 账户或区域中部署和管理新的 Lambda 函数。

有关更多信息,请参阅部署 Hello World 应用程序

注意:您还可以使用 Lambda 控制台或 AWS 命令行界面 (AWS CLI) 迁移 Lambda 函数。

解决方法

下载 Lambda 函数 AWS SAM 文件及其部署软件包

1.    在 Lambda 控制台中,选择左侧面板上的函数

2.    选择要迁移的 Lambda 函数的名称。

3.    在 Lambda 函数窗口中,选择操作,然后选择导出函数

4.    在 “导出功能” 窗口中,选择下载 AWS SAM 文件

5.    下载 AWS SAM 文件后,返回导出函数 窗口,然后选择下载部署程序包以下载部署程序包。

将 Lambda 函数的部署包上传到位于您要将函数迁移到的 AWS 区域的 Amazon S3 存储桶

1.    使用您想要将 Lambda 函数迁移到的 AWS 账户登录 Amazon S3 控制台

2.    在存储桶列表中,选择要将文件上传到的 S3 存储桶的名称。

3.    选择上传

4.    在上传页面上,选择添加文件

5.    选择您下载的 Lambda 函数的部署程序包。然后,选择打开

6.    选择上传

7.    选择文件和文件夹,然后选择要将其打开的部署包文件名。

8.    在文件的对象概述部分中,注意 S3 URI 值,该值是部署程序包的 S3 路径位置。保存该值以便在下一步中使用。

使用 AWS SAM 文件和 AWS CloudFormation 在另一个 AWS 账户或区域中部署和管理新的 Lambda 函数

1.    打开您下载的 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

2.    在 CodeUri 之后,替换 dot (.) 使用您在上一步中检索到的 Lambda 部署程序包的 S3 路径位置。

重要提示: 确保创建 CloudFormation 堆栈的 IAM 用户对此 S3 对象具有 's3:GetObject' 权限。

3.    要将函数迁移到另一个 AWS 账户,请执行以下操作:
对于 Role: 值,删除现有 IAM 角色 ARN。然后,将值替换为第二个 AWS 账户中的 IAM 角色 ARN。
对于带有图层的函数,请在层中为第二个 AWS 账户添加权限,允许该层使用第一个账户的层。或者,将 AWS SAM 文件中的 Lambda 层 ARN 替换为第二个 AWS 账户中的 Lambda 层 ARN。

-或者-

要将函数迁移到另一个 AWS 区域,请执行以下操作:
对于 Role: 值,继续使用现有 IAM 角色 ARN。
对于带有层的函数,请将 Lambda 层 ARN 替换为第二个 AWS 区域中的 Lambda 层 ARN。

重要信息:对于 Virtual Private Cloud (VPC) 中的功能,请将 SecurityGroupDIDSubneTID 的值替换为第二个 AWS 账户或区域中的资源。

4.    对于具有事件源的函数,请从 AWS SAM 文件中删除用于在第二个 AWS 账户或区域中重新创建事件源的代码。然后,将 Events: 事件之后的值替换为第二个 AWS 账户或区域中的事件源。

5.    使用编辑过的 AWS SAM 文件在要将函数迁移到的第二个 AWS 账户或区域中创建 AWS CloudFormation 堆栈

注意:创建 AWS CloudFormation 堆栈后,迁移的 Lambda 函数将显示在您的 Lambda 控制台中。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?