serverless-framework - 无服务器 - aws - SecureLambdaFunction 环境
问题描述
我有以下情况:
我在 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。
谢谢!
解决方案
仔细看了一圈,得出以下结论:
使用这种模式ONE_CLIENT_SECRET=${ssm:/one/key_one~true}
意味着 sls 框架将下载编译时的值并嵌入到项目中,这就是问题所在,您可以在上传项目后看到这一点,您的变量将设置为纯文本lambda 控制台。
我的解决方案是在执行 lambda 时使用 middy 中间件来加载 ssm 值。这意味着,您需要以一种在变量可用之前不会触发任何代码的方式对项目进行编码,并找到捕获变量的好策略(冷启动),否则会增加执行时间。
4Kb 的限制无法更改,并且在阅读后,这似乎很明显。
这么短的故事,如果你发现这个问题,找到最适合你的中间件策略和嵌入值。
推荐阅读
- java - 无法在 java 模式匹配中获得正确的输出
- python - 使用 Python 3 将多个 Excel 工作簿和工作表导入单个数据框
- solr - 使用 Systemd 运行 Zookeeper 3.4.12 和 Solr 6.5.1 - Solr 在启动后立即关闭
- entity-framework-6 - EF 6.0 - 将复杂类型映射到与父属性相同的表
- javascript - 为什么在 aspx 页面中使用 Bootstrap 时网站渲染没有响应?
- mysql - Sails v1.0 无法连接到本地 MySQL
- vba - Excel VBA 宏将某些列复制到另一个工作簿
- intellij-idea - JSF2 自定义组件,带本地文件路径的参数自动补全
- javascript - React Native:找不到我的(创建的)组件?
- google-colaboratory - 使用 Google Colaboratory 是否可以让 Google 访问我的代码?