无服务器 - aws - SecureLambdaFunction环境

and*_*res 5 serverless-framework serverless

我有以下情况:

我在serverless.yml文件上设置了几个环境变量,如:

ONE_CLIENT_SECRET=${ssm:/one/key_one~true}
ONE_CLIENT_PUBLIC=${ssm:/one/key_two~true}

ANOTHER_SERVICE_KEY=${ssm:/two/key_one~true}
ANOTHER_SERVICE_SECRET=${ssm:/two/key_two~true}
Run Code Online (Sandbox Code Playgroud)

让我说我喜欢10个envs,当我尝试部署时,我得到以下错误:

An error occurred: SecureLambdaFunction - Lambda was unable to configure your environment variables because the environment variables you have provided exceeded the 4KB limit. String measured: JSON_WITH_MY_VARIABLES_HERE
Run Code Online (Sandbox Code Playgroud)

所以我无法部署,我知道问题是什么,但我没有明确的解决方法,所以我的问题是:

1)如何扩展4Kb限制?
2)假设我的变量是使用SSM设置的,我使用EC2参数存储来保存它们.(这与无服务器团队或知道该主题的人更相关)它在幕后如何运作?- 当我运行sls deploy它是否获取值并包含在.zip文件中?(这是我认为它的作用,我只是想澄清一下)还是在我执行lambdas时获取值?我问因为我去了aws lambda控制台,我可以看到他们设置在那里.

谢谢!

and*_*res 2

经过深入观察,我得出以下结论:

使用这种模式ONE_CLIENT_SECRET=${ssm:/one/key_one~true}意味着 sls 框架将在编译时下载值并嵌入到项目中,这就是问题所在,您可以在上传项目后看到这一点,您的变量将被设置为纯文本拉姆达控制台。

我的解决方案是在执行 lambda 时使用 middy 中间件加载 ssm 值。这意味着,您需要以一种在变量可用之前不会触发任何代码的方式对项目进行编码,并找到一个好的策略来捕获变量(冷启动),否则,它将增加更多的执行时间。

4Kb 的限制无法更改,阅读完此内容后,这似乎是显而易见的。

简而言之,如果您发现此问题,请找到最适合您的中间件策略和嵌入值。