使用AWS Lambda下载文件

时间:2018-07-07 00:42:38

标签: amazon-web-services aws-lambda

我有一个调用AWS Lambda函数的iOS应用。我希望Lambda函数通过Lambda代理功能从服务器获取一些文件,然后将其发送回iOS应用。

我正在使用生成的SDK从我的应用程序直接调用Lambda函数。我找不到说明如何交换除JSON编码请求以外的数据的文档。

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

Lambda与外界的 only 接口是JSON。

要从Lambda返回文本数据,您必须将其作为字符串返回,并从JSON响应中反序列化该字符串。

要从Lambda返回二进制数据,必须首先使用无法产生一系列字节(也不是有效的UTF-8字符序列)的编码对数据进行转换(编码),因为JSON无法序列化非字符数据(并非字节的所有可能组合都对应一个或多个有效字符)。这样做的常见策略是使用base-64编码。 Base-64使用8:6转换率(每个字节编码6位)将一系列字节(八位字节)无损地转换为也总是有效的7位ASCII字符的不同字节系列。然后,您需要将该数据从base-64解码回二进制。

您可以在客户端上对JSON和base-64进行解码,但是,如果您不喜欢该主意,还有其他一些选择。

API网关和CloudFront的Lambda @ Edge功能都提供了内置的转换功能,如果您不想在客户端上将base-64有效负载(来自JSON Lambda响应)转换回二进制。

API网关支持所有Lambda运行时,并且expects此格式...

"isBase64Encoded": true,
"body": "the-base-64-encoded-body",

Lambda @ Edge仅支持Node.js Lambda函数,但比API Gateway便宜。它expects的base-64响应包括...

"body": "the-base-64-encoded-body",
"bodyEncoding": "base64",

这两种方法的可行性取决于您的安全需求。 API网关支持通过IAM以及其他机制进行身份验证。 CloudFront + Lambda @ Edge不支持IAM身份验证,但可以与CloudFront签名的URL或Cognito或其他自定义授权机制一起使用。

如果您提到的“文件”来自服务器,API Gateway也可以直接从服务器代理这些文件,而无需Lambda函数来处理内容(尽管根据您的安全需求,可能需要Lambda自定义授权程序,以对请求进行身份验证,然后只需告诉API Gateway允许将请求转发到后端即可。

或者,如果文件是来自S3的对象,那么您可以直接访问S3,类似于现在访问Lambda的方式。