在 Serverless 架构中,经常需要将资源创建的输出值(如 API 网关 URL、数据库地址、S3 存储桶名称等)传递给其他函数或服务。serverless-stack-output 是一个 Node.js 模块,用于在 Serverless 架构中存储和管理输出值。
本文将介绍如何使用 npm 包 serverless-stack-output,以及如何在项目开发中优雅地管理 Serverless 输出值。
安装 serverless-stack-output
可以通过 npm 安装 serverless-stack-output:
npm install serverless-stack-output
初始化 Serverless 项目
在介绍如何使用 serverless-stack-output 之前,需要先创建一个简单的 Serverless 项目。
创建服务
首先,在终端中输入以下命令,创建一个使用 AWS Lambda 做为计算服务、Amazon API Gateway 做为 HTTP API 的服务。
serverless create --template aws-nodejs --path my-service
配置服务
在服务的根目录中,创建一个 serverless.yml 文件。用于配置服务和 Lambda 函数。
-- -------------------- ---- ------- -------- ---------- --------- ----- --- -------- ---------- ---------- ------ -------- ------------- ------- - ----- ----- - ------- ---
服务中创建了一个名为 hello
的函数,用于响应 HTTP 请求。在浏览器中打开服务 URL,将会看到该函数的响应结果。
配置 AWS 凭证
需要为服务配置 AWS 凭证,才能访问 AWS 资源。
在系统中配置 AWS 凭证环境变量:
export AWS_ACCESS_KEY_ID=<your-key-id> export AWS_SECRET_ACCESS_KEY=<your-secret-key>
部署服务
最后,部署服务:
serverless deploy
服务的 API 地址将会在输出信息中显示出来,记下这个地址,用于后面的测试。
使用 serverless-stack-output
接下来,我们将使用 serverless-stack-output,将服务的 API 地址传递给另一个函数或服务。
安装 serverless-stack-output
在项目根目录中,输入以下命令,将 serverless-stack-output 安装为依赖。
npm install serverless-stack-output
配置输出值
在 serverless.yml 文件中,添加一个名称为 api
的输出值:
-- -------------------- ---- ------- -------- ---------- --------- ----- --- -------- ---------- ---------- ------ -------- ------------- ------- - ----- ----- - ------- --- ---------- -------- ---- ------ --------- - -- - - ---------- - ---- ------------------- - ------------------------------------------------
这里的 Fn::Join
函数用于将 API Gateway 地址组合在一起。${AWS::Region}
将会被替换为 AWS 区域名称,这里默认是 us-east-1。
调用输出值
在 Lambda 函数中使用 serverless-stack-output,将会对输出值进行缓存,避免了每次请求都需要读取 AWS CloudFormation。
const serverlessOutput = require("serverless-stack-output"); async function handler(event) { const apiUrl = serverlessOutput.get("api"); // 使用 apiUrl 进行其他操作 }
这里 get
方法返回一个字符串类型的 API Gateway 地址。
部署服务
重新部署服务,部署完成后,使用 get
方法获取 API Gateway 地址:
const apiUrl = serverlessOutput.get("api");
结论
在使用 Serverless 架构时,管理资源的输出值是一项重要的工作。serverless-stack-output 模块提供了一种轻松的方式解决这个问题。使用本文提供的方法,在 Serverless 项目中轻松地存储和管理输出值。
更多 serverless-stack-output 使用方式,请参考开发者文档和服务器配置。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005671281e8991b448e35df