调用 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

来自AWS Knowledge Center: Can I change the environment variables in a published version of my Lambda function?

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 的要求:

  1. 您想与 Route53 通话 API。
  2. 您想参数化 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