如何使用 AWS CLI 将 Lambda 函数迁移到另一个 AWS 账户或区域?
上次更新日期:2021 年 2 月 3 日
我需要将 AWS Lambda 函数从一个 AWS 账户(或 AWS 区域)移动到另一个账户。如何使用 AWS 命令行界面 (AWS CLI) 执行此操作?
简短描述
要使用 AWS CLI 将 Lambda 函数迁移到另一个 AWS 账户或区域,请执行以下操作:
1. 运行 GetFunction 命令以下载 Lambda 函数部署程序包。
2. 为要将函数移动到的第二个 AWS 账户或区域配置 AWS CLI。
注意:您也可以为第二个 AWS 账户或区域配置新的 AWS CLI 配置文件。
3. 运行 CreateFunction 命令以在第二个 AWS 账户或区域中创建新函数。
注意:您还可以使用 Lambda 控制台或 AWS 无服务器应用程序模型 (AWS SAM) 迁移 Lambda 函数。
解决方法
注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
运行 GetFunction 命令以下载 Lambda 函数部署程序包
1. 运行以下 GetFunction 命令:
aws lambda get-function --function-name my-function
重要提示:将我的函数替换为要迁移的函数的名称。
2. 在命令响应中,打开 "Location": 之后的 URL 链接。链接将显示在类似于以下代码块的代码块中:
"Code": {
"RepositoryType": "S3",
"Location": "https://awslambda-us-west-2-tasks.s3.us-west-2.amazonaws.com/snapshots/123456789012/my-function..."
},
注意:打开 "Location": 后面的链接将下载部署程序包。
为要将函数移至的第二个 AWS 账户或区域配置 AWS CLI
1. 运行以下配置命令:
aws configure --profile profilename
重要提示:将 profilename 更改为您的第二个 AWS 账户或区域的可识别名称。
2. 输入以下输入值以传递第二个 AWS 账户和区域的 AWS Identity and Access Management (IAM) 用户证书:
对于 AWS Access Key ID [None]:在第二个 AWS 账户中输入 IAM 用户的访问密钥。或者,如果您要将函数迁移到另一个区域,请在您的第一个 AWS 账户中输入 IAM 用户的访问密钥。
对于 AWS Secret Access Key [None]:输入同一 IAM 用户的私有访问密钥。
对于 Default region name [None]:输入要将函数迁移到的 AWS 区域。
有关更多信息,请参阅配置 AWS CLI。
运行 CreateFunction 命令以在第二个 AWS 账户或区域中创建新函数。
注意:您需要 Lambda 函数部署包和执行角色才能运行 CreateFunction 命令。
1. 使用刚刚配置的 AWS CLI 配置文件运行以下 CreateFunction 命令:
aws lambda create-function \
--function-name my-function \
--runtime nodejs10.x \
--zip-file fileb://my-function.zip \
--handler my-function.handler \
--role arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-tges6bf4 \
--profile profilename
重要事项:在运行命令之前,请将以下值替换为要迁移的函数中的信息:
对于 function-name,请输入函数的名称。
对于 runtime,请输入函数的运行时。
对于 zip-file,请输入函数部署包的文件路径。
对于 handler,请输入函数的处理程序名称。
对于 role,请输入您要将函数迁移到的 AWS 账户中的 Lambda 执行角色 ARN。
对于 profile,请输入您在运行配置命令时创建的 AWS CLI 配置文件名称。
注意: 如果您要将函数迁移到另一个 AWS 区域,但将其保留在同一 AWS 账户中,则可以继续使用相同的执行角色。
2. 运行以下 list-functions 命令以确认迁移是否有效:
aws lambda list-functions \
--profile profilename
重要提示:将 profilename 替换为您在运行配置命令时创建的 AWS CLI 配置文件名称。