Serverless 应用中如何使用 S3 进行文件存储

Serverless 应用已经成为了现代应用程序开发的一种主流方式。它可以使开发人员更加专注于应用程序的逻辑编写,而不用担心基础设施的管理。Amazon S3 是一种强大的对象存储服务,它可以在 Serverless 应用中用于文件存储。在本文中,我们将探讨如何在 Serverless 应用中使用 S3 进行文件存储。

S3 简介

Amazon S3 是一种可扩展、高可用、高性能的对象存储服务。它可以存储和检索任意类型的数据,包括文本和二进制数据。S3 可以在全球范围内自动复制和存储数据,以确保可靠性和可用性。此外,S3 还提供了强大的安全性和访问控制功能,以确保数据的保密性和完整性。

在 Serverless 应用中使用 S3

在 Serverless 应用中使用 S3 进行文件存储,需要完成以下步骤:

  1. 创建一个 S3 存储桶
  2. 编写 Lambda 函数来上传和下载文件
  3. 配置 Lambda 函数的执行角色和 S3 存储桶的访问权限

创建 S3 存储桶

在 Amazon S3 控制台中,单击“创建存储桶”按钮,按照提示创建一个新的存储桶。在创建存储桶的过程中,需要设置以下选项:

  • 存储桶名称:存储桶的唯一名称。
  • 区域:存储桶所在的 AWS 区域。
  • 权限:存储桶的访问权限,可以选择公共读写或私有。

编写 Lambda 函数

在 AWS Lambda 控制台中,创建一个新的 Lambda 函数,并编写以下代码来上传和下载文件:

----- --- - -------------------
----- -- - --- ---------

--------------- - ----- ------- -- -
    ----- ------ - -----------------
    ----- ------ - ----------------------------
    ----- ---- - -----------------------

    ------ -------- -
        ---- -------
            ----- ------------ - -
                ------- -------------------
                ---- --------------
                ----- -------------
            --
            ----- ----------------------------------
            ------ - ----------- ---- ----- ----- -------- ------------- --
        ---- ------
            ----- -------------- - -
                ------- -------------------
                ---- ---------------
            --
            ----- ---- - ----- ---------------------------------------
            ------ - ----------- ---- ----- ---------------------------- --
        --------
            ------ - ----------- ---- ----- -------- ------- ------- --
    -
--

这段代码使用 AWS SDK for JavaScript 来调用 S3 API。在上传文件时,它将文件名和文件数据作为请求体发送到 Lambda 函数。在下载文件时,它将文件名作为查询参数发送到 Lambda 函数,并返回文件数据的 Base64 编码。

配置 Lambda 函数的执行角色和 S3 存储桶的访问权限

为了让 Lambda 函数能够访问 S3 存储桶,需要为 Lambda 函数指定一个执行角色,并授予该角色访问 S3 存储桶的权限。在 AWS IAM 控制台中,创建一个新的 IAM 角色,并将以下策略附加到该角色:

-
    ---------- -------------
    ------------ -
        -
            --------- --------
            --------- -
                ---------------
                --------------
            --
            ----------- ---------------------------------
        -
    -
-

这个策略授予执行角色上传和下载 S3 存储桶中的对象的权限。

在 Lambda 函数的配置页面中,将执行角色设置为刚刚创建的角色。

示例应用

为了演示如何在 Serverless 应用中使用 S3 进行文件存储,我们可以编写一个简单的 Web 应用程序,允许用户上传和下载文件。在这个应用程序中,我们将使用 AWS Amplify 框架来托管前端应用程序,并使用 AWS Lambda 和 S3 来处理文件上传和下载。

前端应用程序

在本地计算机上创建一个新的 React 应用程序,并使用以下命令添加 AWS Amplify 和 AWS Amplify UI:

--- ------- ----------- -----------------

在应用程序的 src/index.js 文件中,添加以下代码来初始化 Amplify:

------ ------- ---- --------------
------ ------ ---- ----------------

--------------------------

其中,aws-exports.js 文件包含应用程序所需的 AWS 资源的配置信息,可以在 AWS Amplify 控制台中下载。

在应用程序的 src/App.js 文件中,添加以下代码来实现文件上传和下载功能:

------ ------ - -------- - ---- --------
------ - ------- - ---- --------------

-------- ----- -
    ----- ------ -------- - ---------------
    ----- ---------- ------------ - -------------
    ----- ---------- ------------ - -------------
    ----- ------------- --------------- - -------------

    ----- ---------------- - ------- -- -
        -------------------------------
        ----------------------------------------
    --

    ----- ------------ - ----- -- -- -
        ----- ---- - ----- --------------------- ----- - ------------ --------- ---
        ----------------- -------- --------------- ------
        ----------------
    --

    ----- -------------- - ----- -- -- -
        ----- ---- - ----- --------------------- - --------- ---- ---
        ----- --- - -------------------------------
        --------------------
    --

    ----- -------------------- - ------- -- -
        --------------------------------
    --

    ------ -
        -----
            -------- ------ --- -------------
            ------ ----------- --------------------------- --
            --- --
            ------- --------------------------------------
            --- --
            --------- ---------------- ------------------------------- --
            --- --
            ------- ------------------------------------------
            --- --
            ------------ -- -- ------------------ ---------------------------- ---------
        ------
    --
-

------ ------- ----

这段代码使用 Storage 模块来调用 S3 API。在上传文件时,它将文件名和文件数据作为参数发送到 Storage.put 方法。在下载文件时,它将文件名作为参数发送到 Storage.get 方法,并使用 URL.createObjectURL 方法将文件数据转换为可下载的 URL。

Lambda 函数

在 AWS Lambda 控制台中,创建一个新的 Lambda 函数,并使用以下代码实现文件上传和下载功能:

----- --- - -------------------
----- -- - --- ---------

--------------- - ----- ------- -- -
    ----- ------ - -----------------
    ----- ------ - ----------------------------
    ----- ---- - -----------------------

    ------ -------- -
        ---- -------
            ----- ------------ - -
                ------- -------------------
                ---- --------------
                ----- -------------
            --
            ----- ----------------------------------
            ------ - ----------- ---- ----- ----- -------- ------------- --
        ---- ------
            ----- -------------- - -
                ------- -------------------
                ---- ---------------
            --
            ----- ---- - ----- ---------------------------------------
            ------ - ----------- ---- ----- ---------------------------- --
        --------
            ------ - ----------- ---- ----- -------- ------- ------- --
    -
--

这段代码与前面介绍的 Lambda 函数代码相同。

部署应用程序

在 AWS Amplify 控制台中,创建一个新的 Amplify 应用程序,并将应用程序部署到 Amazon S3 和 AWS Lambda。在部署过程中,需要输入以下信息:

  • 应用程序名称:应用程序的唯一名称。
  • 存储桶名称:存储应用程序文件的 S3 存储桶的名称。
  • Lambda 函数名称:处理文件上传和下载的 Lambda 函数的名称。

在部署完成后,可以访问应用程序的 URL,测试文件上传和下载功能。

总结

在本文中,我们介绍了如何在 Serverless 应用中使用 S3 进行文件存储。我们首先介绍了 S3 的基本概念和用法,然后演示了如何使用 AWS SDK for JavaScript 和 AWS Amplify 框架来实现文件上传和下载功能。希望本文对您有所帮助,让您更加深入地了解 Serverless 应用开发。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/663d783ad3423812e4b80220