将 Node.js 应用部署到 AWS Lambda

使用加密的 .env.vault 文件将 Node.js 应用部署到 AWS Lambda。

初始设置

使用 node-lambda 创建一个 aws-lambda 项目。

npx node-lambda@latest setup

这将创建一些文件。

ls -1a
.env
context.json
deploy.env
event.json
event_sources.json

创建一个包含 process.env.HELLOindex.js 文件。

index.js

exports.handler = function(event, context, callback) {
  console.log(`Hello ${process.env.HELLO}.`)

  callback(null, event)
}

访问你的 IAM 控制台 并点击 用户 > 添加用户。输入 node-lambda 作为用户名,并点击“下一步”。

console.aws.com

在下一个屏幕上,直接附加策略,搜索 AWSLambda_FullAccess 并选择它。点击“下一步”。

console.aws.com

完成该用户的创建,然后在用户的页面上,生成一个访问密钥。

console.aws.com

从 UI 中获取 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,并粘贴到你的 .env 文件中。

.env

AWS_ENVIRONMENT=development
AWS_ACCESS_KEY_ID="AKAI6..."
AWS_SECRET_ACCESS_KEY="YiuNa..."
AWS_PROFILE=
AWS_SESSION_TOKEN=
AWS_ROLE_ARN=
AWS_REGION=us-east-1
AWS_FUNCTION_NAME=
AWS_HANDLER=index.handler
AWS_MEMORY_SIZE=128
AWS_TIMEOUT=3
AWS_DESCRIPTION=
AWS_RUNTIME=nodejs16.x
AWS_VPC_SUBNETS=
AWS_VPC_SECURITY_GROUPS=
AWS_TRACING_CONFIG=
AWS_LOGS_RETENTION_IN_DAYS=
EXCLUDE_GLOBS="event.json build/"
PACKAGE_DIRECTORY=build

部署你的 lambda 代码。

npx node-lambda@latest deploy

测试函数的调用。

console.aws.com

它将返回 Hello undefined,因为它还没有访问环境变量的方法。让我们在下一步中解决这个问题。

安装 dotenv

安装 dotenv

npm install dotenv --save # Requires dotenv >= 16.1.0

尽早地在你的函数中导入并配置 dotenv。

index.js

require('dotenv').config()
console.log(process.env) // remove this after you've confirmed it is working

exports.handler = function(event, context, callback) {
...

接下来,让我们构建 .env.vault 文件。

构建 .env.vault

推送你最新的 .env 文件更改,并编辑你的生产密钥。详细了解同步

npx dotenv-vault@latest push
npx dotenv-vault@latest open production

使用 UI 为每个环境配置这些密钥。

www.dotenv.org

然后构建你的加密 .env.vault 文件。

npx dotenv-vault@latest build

它的内容应该类似于以下示例。

.env.vault

#/-------------------.env.vault---------------------/
#/         cloud-agnostic vaulting standard         /
#/   [how it works](https://dotenv.org/env-vault)   /
#/--------------------------------------------------/

# development
DOTENV_VAULT_DEVELOPMENT="/HqNgQWsf6Oh6XB9pI/CGkdgCe6d4/vWZHgP50RRoDTzkzPQk/xOaQs="
DOTENV_VAULT_DEVELOPMENT_VERSION=2

# production
DOTENV_VAULT_PRODUCTION="x26PuIKQ/xZ5eKrYomKngM+dO/9v1vxhwslE/zjHdg3l+H6q6PheB5GVDVIbZg=="
DOTENV_VAULT_PRODUCTION_VERSION=2

设置 DOTENV_KEY

获取你的生产 DOTENV_KEY

npx dotenv-vault@latest keys production
# outputs: dotenv://:[email protected]/vault/.env.vault?environment=production

使用上面获取的 DOTENV_KEY,将其设置为 AWS Lambda 控制台上的环境变量。

console.aws.com

再次部署。

npx node-lambda@latest deploy

返回 AWS 控制台,再次调用你的函数。

console.aws.com

它应该显示 Hello production

就是这样!在调用时,你的 .env.vault 文件将被解密,其生产密钥将作为环境变量注入 - 恰好在需要的时候。