部署 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 檔案將會被解密,且其生產環境機密會即時注入為環境變數。