调用 Lambda 函数时更改环境变量的值
Change value of environment variable while invoking Lambda function
我正在学习 lambda,目前正在尝试了解环境变量。下面是一个非常简单的代码来显示我的问题。 (一个 nodejs 函数,它将简单地打印名称常量的值)。
exports.handler = async function(event, context) {
const name = process.env.NAME;
return name;
};
我已经在 lambda 上定义了一个环境变量如下
现在这个 lambda 一定会在完成后打印“xyz”。但是我们如何在 运行 Lambda 的同时 overwrite/change "Name" 变量的值。所以在调用它时会显示新值?例如 --NAME = "abc" 或 --NAME abc
You can't change the configuration (including environment variables) or function code in a published Lambda function version. You can only change the current, unpublished function version ($LATEST).
因此,除非您的 Lambda 连接到 AWS API 并发布其自身的全新版本,否则您不能。
您似乎在尝试将环境变量用作本地存储 space,但从根本上说,它们并非如此。使用数据库可能会更好。我希望为此使用 DynamoDB。
根据最初的问题和评论,我收集了以下对您的 Lambda 的要求:
- 您想与 Route53 通话 API。
- 您想参数化 Lambda 以允许在 每次 调用时将域名传递给 Lambda。
实现此目的最简单且可能最合适的方法是在每次调用时将域作为“事件”数据传递。
exports.handler = async (event) => {
const domain = event["domain"];
console.log("Domain: %s", domain);
// your Route53 code goes here...
};
到 运行 Lambda 并传递“域”,您有很多选择。
选项 1:AWS 控制台
您可以转到 AWS 控制台,打开 Lambda,切换到“测试”选项卡并使用以下输入 JSON:
{
"domain": "www.google.com"
}
选项 2:AWS CLI v2
您可以从命令行 invoke that Lambda using the AWS CLI。
aws \
lambda \
invoke \
--cli-binary-format raw-in-base64-out \
--function-name <function-name> \
--payload '{"domain":"www.google.com"}' \
outfile.txt
选项 3:AWS SDK
您还可以在其他 Lambda、本地计算机上的脚本或任何其他可以使用 AWS Lambda 并像这样调用 Lambda 的方式中编写一些代码。
以下是使用 AWS SDK v3 的简单 NodeJS CLI“代码”示例。
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda";
async function main() {
const client = new LambdaClient({ region: "<your-region>" });
const payload = JSON.stringify({
"domain": "www.google.com"
});
const input = {
"FunctionName": "<function-name>",
"Payload": payload
};
const command = new InvokeCommand(input);
const response = await client.send(command);
console.log(response);
}
main()
如果您 运行 node index.js
您将使用给定的负载调用 Lambda。
设置节点:
npm init
npm install @aws-sdk/client-lambda
记得在package.json
里把type
设为module
。
我正在学习 lambda,目前正在尝试了解环境变量。下面是一个非常简单的代码来显示我的问题。 (一个 nodejs 函数,它将简单地打印名称常量的值)。
exports.handler = async function(event, context) {
const name = process.env.NAME;
return name;
};
我已经在 lambda 上定义了一个环境变量如下
现在这个 lambda 一定会在完成后打印“xyz”。但是我们如何在 运行 Lambda 的同时 overwrite/change "Name" 变量的值。所以在调用它时会显示新值?例如 --NAME = "abc" 或 --NAME abc
You can't change the configuration (including environment variables) or function code in a published Lambda function version. You can only change the current, unpublished function version ($LATEST).
因此,除非您的 Lambda 连接到 AWS API 并发布其自身的全新版本,否则您不能。
您似乎在尝试将环境变量用作本地存储 space,但从根本上说,它们并非如此。使用数据库可能会更好。我希望为此使用 DynamoDB。
根据最初的问题和评论,我收集了以下对您的 Lambda 的要求:
- 您想与 Route53 通话 API。
- 您想参数化 Lambda 以允许在 每次 调用时将域名传递给 Lambda。
实现此目的最简单且可能最合适的方法是在每次调用时将域作为“事件”数据传递。
exports.handler = async (event) => {
const domain = event["domain"];
console.log("Domain: %s", domain);
// your Route53 code goes here...
};
到 运行 Lambda 并传递“域”,您有很多选择。
选项 1:AWS 控制台
您可以转到 AWS 控制台,打开 Lambda,切换到“测试”选项卡并使用以下输入 JSON:
{
"domain": "www.google.com"
}
选项 2:AWS CLI v2
您可以从命令行 invoke that Lambda using the AWS CLI。
aws \
lambda \
invoke \
--cli-binary-format raw-in-base64-out \
--function-name <function-name> \
--payload '{"domain":"www.google.com"}' \
outfile.txt
选项 3:AWS SDK
您还可以在其他 Lambda、本地计算机上的脚本或任何其他可以使用 AWS Lambda 并像这样调用 Lambda 的方式中编写一些代码。
以下是使用 AWS SDK v3 的简单 NodeJS CLI“代码”示例。
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda";
async function main() {
const client = new LambdaClient({ region: "<your-region>" });
const payload = JSON.stringify({
"domain": "www.google.com"
});
const input = {
"FunctionName": "<function-name>",
"Payload": payload
};
const command = new InvokeCommand(input);
const response = await client.send(command);
console.log(response);
}
main()
如果您 运行 node index.js
您将使用给定的负载调用 Lambda。
设置节点:
npm init
npm install @aws-sdk/client-lambda
记得在package.json
里把type
设为module
。