使用serverless-iam-roles-per-function插件部署时报Properties undefined错误
问题描述
我执行serverless deploy --region eu-central-1命令部署时,遇到如下错误:
Type Error --------------------------------------------- Cannot read property 'Properties' of undefined For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
该错误仅在我添加如下配置后才出现:
plugins: - serverless-iam-roles-per-function
注释掉该插件配置即可恢复正常,但我需要使用该插件为我的Lambda函数配置DynamoDB访问权限。
目前网上几乎没有该报错的相关有效信息,升级到最新版本也暂未解决该问题,Serverless官方提示的参考价值不大。我在部署前执行set SLS_DEBUG=*"开启调试模式后,得到如下报错栈:
Type Error ---------------------------------------------- TypeError: Cannot read property 'Properties' of undefined at ServerlessIamPerFunctionPlugin.createRoleForFunction (C:\Users\XXXXX\MyProject\node_modules\serverless-iam-roles-per-function\dist\lib\index.js:273:25) at ServerlessIamPerFunctionPlugin.createRolesPerFunction (C:\Users\XXXXX\MyProject\node_modules\serverless-iam-roles-per-function\dist\lib\index.js:383:18) at PluginManager.invoke (C:\snapshot\serverless\lib\classes\PluginManager.js:579:20) at async PluginManager.spawn (C:\snapshot\serverless\lib\classes\PluginManager.js:601:5) at async Object.before:deploy:deploy [as hook] (C:\snapshot\serverless\lib\plugins\deploy.js:60:11) at async PluginManager.invoke (C:\snapshot\serverless\lib\classes\PluginManager.js:579:9) at async PluginManager.run (C:\snapshot\serverless\lib\classes\PluginManager.js:639:7) at async Serverless.run (C:\snapshot\serverless\lib\Serverless.js:452:5) at async C:\snapshot\serverless\scripts\serverless.js:751:9 For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
请问我是否需要在本次提问中附上我的serverless.yml配置文件?该文件内容较长。
解答
需要附上配置,你可以只节选核心部分,无需提交完整文件:
- provider块的完整配置,包含区域、运行时、全局IAM配置等内容
- 至少1个触发报错的Lambda函数的完整定义,包含你为该函数配置的IAM权限规则或独立角色配置
- resources块中你定义的DynamoDB资源配置
- 所有plugins相关的配置内容
你也可以先自行排查几个常见的触发该报错的场景:
- 检查是否在函数级别配置了不存在的角色引用,或者角色的CloudFormation逻辑ID拼写错误
- 检查你定义的DynamoDB资源是否配置了正确的Properties字段,没有缩进错误导致资源定义层级异常
- 检查
serverless-iam-roles-per-function插件版本是否和你当前使用的Serverless Framework版本兼容:如果Serverless Framework版本≥3.0,需要使用该插件的3.x及以上版本 - 确认你没有在全局IAM配置中设置
iamRoleStatements的同时,又给个别函数设置了空的iamRoleStatements字段
排查后问题仍存在的话,贴出上述节选的配置内容即可快速定位问题。
内容的提问来源于stack exchange,提问作者Cadoiz
相关产品推荐
相关产品推荐

