[英]How to pass an environment variable to an AWS Lambda function using the Serverless framework?
[英]Using serverless, how to add secret keys as environment variable in AWS lambda function?
我需要使用無服務器和密鑰將 AWS lambda function 從文件部署到環境變量中。 我不想使用 AWS 機密/系統管理器。 如何在 serverless.yml 文件中隱藏環境變量?
當我手動上傳和部署我的 nodejs AWS lambda function 時,它能夠從環境變量中讀取數據並運行。 我想使用無服務器而不是手動部署來處理這個問題。
我的無服務器 yml 文件如下:
service: sample-lambda
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: us-east-2
apiName: getData
profile: MYAWS
timeout: 300
memorySize: 512
functions:
getData:
handler: handler.getData
name: getData
description: API to get data from server
environment:
key1: 12345
key2: abcdef
server: sample
events:
- http:
path: getData
method: post
cors: true
作為已接受答案的替代方案,如果您像我一樣不喜歡修改額外的機密文件,您還可以使用 AWS Systems Manager Parameter Store 服務。 您可以存儲您的 Amazon 密鑰、數據庫連接、用戶名和密碼。
這種方法的優點是您只需保存一次密鑰並在多個項目中使用它們,只要它們是在同一區域中創建的。
要使用 AWS cli 行將您的環境變量保存在 AWS Parameter Store 中:
aws --profile default --region us-west-2 ssm put-parameter --name KEY1 --value 123456 --type String
aws --profile default --region us-west-2 ssm put-parameter --name KEY2 --value abcdef --type String
aws --profile default --region us-west-2 ssm put-parameter --name SERVER --value sample --type String
使用控制台將環境變量保存在 AWS Parameter Store 中:
要使用 serverless.yml 文件中的密鑰:
service: sample-lambda-service
custom:
config:
KEY1: ${ssm:KEY1}
KEY2: ${ssm:KEY2}
SERVER: ${ssm:SERVER}
provider:
name: aws
stage: prod
timeout: 20
memorySize: 512
region: us-west-2
runtime: nodejs12.x
endpointType: regional
environment: ${self:custom.config}
. . .
然后,您可以在handler.js文件中將它們用作普通環境變量,如下所示:
'use strict'
const AWS = require("aws-sdk");
const s3 = new AWS.S3({
credentials: {
accessKeyId: process.env.KEY1,
secretAccessKey: process.env.KEY2,
},
});
let server = process.env.SERVER;
. . .
使用來自 npm 的 serverless-secrets-plugin package 並安裝它。
您可以為不同的環境創建不同的文件。 當您的階段是 dev 時,使用文件 secrets.dev.yml 當您的階段是生產時,使用文件 secrets.production.yml
創建一個文件 secrets.dev.yml 並添加如下數據:
key1: 123456
key2: abcdef
server: sample
要使用密碼加密您的 secrets.dev.yml 文件:
serverless encrypt --stage dev --password 'YOUR_PASSWORD'
要使用密碼解密您的 secrets.dev.yml 文件:
serverless encrypt --stage dev --password 'YOUR_PASSWORD'
注意:在部署 lambda function 之前,請確保 secrets.dev.yml 文件處於解密視圖中
更新 serverless.yml 如下:
service: sample-lambda
plugins:
- serverless-secrets-plugin
custom:
secrets: ${file(secrets.${opt:stage, self:provider.stage}.yml)}
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: us-east-2
apiName: getData
profile: MYAWS
timeout: 300
memorySize: 512
functions:
getData:
handler: handler.getData
name: getData
description: API to get data from server
environment:
key1: ${self:custom.secrets.key1}
key2: ${self:custom.secrets.key2}
server: ${self:custom.secrets.server}
events:
- http:
path: getData
method: post
cors: true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.