'serverless - Type Error: Cannot read property 'Properties' of undefined

When issuing serverless deploy --region eu-central-1, I get the error

 Type Error ---------------------------------------------
 
  Cannot read property 'Properties' of undefined
 
     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

This error only started after including

plugins:
  - serverless-iam-roles-per-function

and can be reverted by commenting the plugin out. But I would like to use it for giving my lambda access to a DynamoDB.

The internet is pretty void about this error besides this typo. The error is not solved by a recent update (yet) and the notice of serverless doesn't help much. set SLS_DEBUG=*" before deployment yields:

 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.

Should I iunclude my serverless.yml in this post? It's quite large.



Solution 1:[1]

Using some different key words I retrieved a second (!) online search result, quoting:

The plugin doesn't support working with the role property. You have the following in your provider sections: role: arn-for-deployment-role'. Try removing this.

More info here

This basically solves the issue and serverless-iam-roles-per-function worked after commenting out this:

provider:
  name: aws
  runtime: python3.7
  #iam: 
  #  role: CallsTableQueryRole

The reason for this could be, that previos versions (serverless < v2.24.0) used a different syntax than current ones. Compare:

provider:
  #previously:
  iam: 
    role:
      statements:
  #? v2.24.0
  iamRoleStatements:

Solution 2:[2]

If you're using Bref framework make sure to update bref in composer and serverless globally to the latest version

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Yidir