【问题标题】:serverless - aws - SecureLambdaFunction env无服务器 - aws - SecureLambdaFunction 环境
【发布时间】:2019-07-09 00:06:42
【问题描述】:

我有以下情况:

我在 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}

假设我有 10 个环境,当我尝试部署时,我收到以下错误:

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

所以我无法部署,我知道问题出在哪里,但我没有明确的解决方法,所以我的问题是:

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

谢谢!

【问题讨论】:

  • 警告:可能是愚蠢的评论 - 你可以菊花链 lambda 调用吗?
  • 什么意思?我什至无法编译项目导致环境变量的大小。这基本上是问题所在,而不是处决
  • 告诉你这可能是愚蠢的。现在只是进入 lambdas ......并假设您可以从外部来源获得所需的值。请原谅我的新手。
  • :D!一点也不笨:)

标签: serverless-framework serverless


【解决方案1】:

深入研究后得出以下结论:

使用ONE_CLIENT_SECRET=${ssm:/one/key_one~true}这个模式意味着sls框架要下载编译时的值并嵌入到项目中,这就是问题所在,你可以在上传项目后看到这个,你的变量会在 lambda 控制台上以纯文本形式设置。

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

4Kb 的限制是无法更改的,在阅读后,这似乎很明显。

这么短的故事,如果您发现此问题,请找到最适合您的中间件策略和嵌入值。

【讨论】:

  • 我想分享一种使用 Laconia 将 SSM 值加载到 lambda 环境的替代方法。该框架鼓励使用环境变量,类似于 sls 框架,但不会在编译时检索该值。您可以在这里找到更多信息:laconiajs.io/docs/guides/retrieving-secrets(免责声明:我是作者)
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多