将 Node.js 应用部署到 AWS Lambda
使用加密的 .env.vault 文件将 Node.js 应用部署到 AWS Lambda。
在本指南中,你可以找到关于该指南的完整代码示例在 GitHub 上。
初始设置
使用 node-lambda 创建一个 aws-lambda 项目。
npx node-lambda@latest setup
这将创建一些文件。
ls -1a
.env
context.json
deploy.env
event.json
event_sources.json
创建一个包含 process.env.HELLO
的 index.js
文件。
index.js
exports.handler = function(event, context, callback) {
console.log(`Hello ${process.env.HELLO}.`)
callback(null, event)
}
访问你的 IAM 控制台 并点击 用户 > 添加用户。输入 node-lambda
作为用户名,并点击“下一步”。
在下一个屏幕上,直接附加策略,搜索 AWSLambda_FullAccess
并选择它。点击“下一步”。
完成该用户的创建,然后在用户的页面上,生成一个访问密钥。
从 UI 中获取 AWS_ACCESS_KEY_ID
和 AWS_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
测试函数的调用。
它将返回 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 为每个环境配置这些密钥。
然后构建你的加密 .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 控制台上的环境变量。
再次部署。
npx node-lambda@latest deploy
返回 AWS 控制台,再次调用你的函数。
它应该显示 Hello production
。
就是这样!在调用时,你的 .env.vault
文件将被解密,其生产密钥将作为环境变量注入 - 恰好在需要的时候。
你成功地使用新的 .env.vault 标准来加密和部署你的密钥。这比将你的密钥散布在多个第三方平台和工具中安全得多。当你需要添加或更改密钥时,只需重建你的 .env.vault 文件并重新部署。