我的 Lambda 代码在 S3 中的存储位置

Posted

技术标签:

【中文标题】我的 Lambda 代码在 S3 中的存储位置【英文标题】:Where in S3 my Lambda code stored 【发布时间】:2018-04-13 00:30:34 【问题描述】:

我已阅读 Lambda 常见问题解答,它说它将我的代码存储在 S3 中并且已加密。

它存储在 S3 的什么位置,我可以解密它以编辑我的代码吗?

【问题讨论】:

【参考方案1】:

如果您在创建 Lambda 函数之前将源代码上传到自己的 S3 存储桶,那么您将知道源代码的路径。请注意,仅在 S3 中编辑代码不会更新您的 Lambda 函数。请参阅下面的链接。 Amazon 会将您的代码从您的存储桶复制到 Amazon 的 S3 存储桶。

如果您在创建 Lambda 函数时在 AWS 控制台中上传代码,则它会存储在您无法访问的 Amazon S3 位置。

最终结果是您的代码位于您无法访问的私有 Amazon S3 存储桶中。

AWS Lambda Function Code

【讨论】:

【参考方案2】:

Lambda 服务将您的代码加密存储在 S3 存储桶中。 AWS 没有提供比这更具体的信息。该服务可能有自己的 S3 存储桶,并且它们单独加密存储在那里的所有对象。

不,您不能直接访问 Lambda 服务的 S3 存储桶,但您可以下载之前上传到 Lambda 函数的代码。转到 AWS Lambda 控制台,选择您的 Lambda 函数,然后单击操作 |导出函数,然后单击下载部署包。注意:如果您的代码是用 Java(或其他编译语言)编写的,那么下载将包含编译文件,而不是原始源代码。

【讨论】:

【参考方案3】:

此代码将允许您阅读您的函数:

import requests
import boto3
client = boto3.client('lambda')
function = client.get_function(FunctionName='my_function_name_or_arn')
code_location = function['Code']['Location']
with open("my_function.zip", "wb") as out:
    out.write(res.content)

如果您尝试读取其他人的函数,您将收到 AccessDeniedException。

【讨论】:

以上是关于我的 Lambda 代码在 S3 中的存储位置的主要内容,如果未能解决你的问题,请参考以下文章

AWS 云形成 |配置 Lambda 以使用 S3 存储桶中的最新版本代码

如何使用 lambda 将 s3 中的最新代码部署到 lambda 函数

无法在 Lambda 函数(Node JS)中下载 S3 视频

使用 AWS Lambda (Python 3) 读取存储在 S3 中的 Parquet 文件

AWS Lambda 不会等待代码上传到 Terraform 脚本中的 S3 存储桶

为啥我的 lambda 函数在尝试访问 S3 存储桶时会被拒绝访问?