npm 包 serverless-stack-output 使用教程

阅读时长 5 分钟读完

在 Serverless 架构中,经常需要将资源创建的输出值(如 API 网关 URL、数据库地址、S3 存储桶名称等)传递给其他函数或服务。serverless-stack-output 是一个 Node.js 模块,用于在 Serverless 架构中存储和管理输出值。

本文将介绍如何使用 npm 包 serverless-stack-output,以及如何在项目开发中优雅地管理 Serverless 输出值。

安装 serverless-stack-output

可以通过 npm 安装 serverless-stack-output:

初始化 Serverless 项目

在介绍如何使用 serverless-stack-output 之前,需要先创建一个简单的 Serverless 项目。

创建服务

首先,在终端中输入以下命令,创建一个使用 AWS Lambda 做为计算服务、Amazon API Gateway 做为 HTTP API 的服务。

配置服务

在服务的根目录中,创建一个 serverless.yml 文件。用于配置服务和 Lambda 函数。

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

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

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

服务中创建了一个名为 hello 的函数,用于响应 HTTP 请求。在浏览器中打开服务 URL,将会看到该函数的响应结果。

配置 AWS 凭证

需要为服务配置 AWS 凭证,才能访问 AWS 资源。

在系统中配置 AWS 凭证环境变量:

部署服务

最后,部署服务:

服务的 API 地址将会在输出信息中显示出来,记下这个地址,用于后面的测试。

使用 serverless-stack-output

接下来,我们将使用 serverless-stack-output,将服务的 API 地址传递给另一个函数或服务。

安装 serverless-stack-output

在项目根目录中,输入以下命令,将 serverless-stack-output 安装为依赖。

配置输出值

在 serverless.yml 文件中,添加一个名称为 api 的输出值:

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

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

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

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

这里的 Fn::Join 函数用于将 API Gateway 地址组合在一起。${AWS::Region} 将会被替换为 AWS 区域名称,这里默认是 us-east-1。

调用输出值

在 Lambda 函数中使用 serverless-stack-output,将会对输出值进行缓存,避免了每次请求都需要读取 AWS CloudFormation。

这里 get 方法返回一个字符串类型的 API Gateway 地址。

部署服务

重新部署服务,部署完成后,使用 get 方法获取 API Gateway 地址:

结论

在使用 Serverless 架构时,管理资源的输出值是一项重要的工作。serverless-stack-output 模块提供了一种轻松的方式解决这个问题。使用本文提供的方法,在 Serverless 项目中轻松地存储和管理输出值。

更多 serverless-stack-output 使用方式,请参考开发者文档和服务器配置。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005671281e8991b448e35df

纠错
反馈