如何为 Lambda@Edge 使用环境变量

How to approach use of environment variables for Lambda@Edge

我正在为 CloudFront 构建 Lambda 函数,它检查请求是否有 cookie,如果没有则转发到登录页面。我需要根据环境自定义响应 header location - 对于每个不同的环境。

最初我尝试使用环境变量,但在部署过程中出现错误: InvalidLambdaFunctionAssociation: The function cannot have environment variables 因此,我转而使用 aws-sdk 和 SSM ssm.getParameter,但是在使用 aws-sdk 压缩 lambda 存档和一个依赖项后,它大约有 13 MB。 Lambda@Edge 函数的限制为 1 MB。

我想知道这是解决该问题的最佳方式。在每个 Lambda 构建中生成带有环境变量的文件,并在 index.js?

中要求它

使用 SSM 但不在 Lambda 函数中包含 AWS SDK。 Lambda documentation 表示 AWS SDK 包含在 Lambda 运行时中。

为了对此进行测试,我在 Lambda 控制台中从头开始创建了一个新的 Node.js 12 Lambda 函数,并将其现有代码替换为:

const AWS = require('aws-sdk');
const SSM = new AWS.SSM();
exports.handler = async() => {
    return {
        statusCode: 200,
        body: await SSM.getParameter({ Name: 'my-param' }).promise(),
    };
};

有效! 从 Lambda 控制台下载此功能的部署包显示它只有 276 字节大小。然后我将其部署到 Lambda@Edge 并且 也有效!