如何为 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 并且 也有效!
我正在为 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 并且 也有效!