- Notifications
You must be signed in to change notification settings - Fork 220
Open
Description
This is a Bug Report
Description
What went wrong?
When using the DISTRIBUTED mode for a Map state the following error is thrown from compileIamRole.js.
What did you expect should have happened?
Serverless file deploys correctly.
What was the config you used?
Type: Map ItemProcessor: ProcessorConfig: Mode: DISTRIBUTED ExecutionType: STANDARD StartAt: Lambda States: Lambda: Type: Task Resource: "arn:aws:states:::lambda:invoke" Parameters: "Payload.$": "$" FunctionName: "Fn::GetAtt": [AssetLambdaFunction, Arn] End: true Retry: - ErrorEquals: - States.TaskFailed IntervalSeconds: 1 MaxAttempts: 2 BackoffRate: 2.0 Next: Done Label: FileAnalysis MaxConcurrency: 1000 ItemBatcher: MaxItemsPerBatch: 1 ItemReader: Resource: "arn:aws:states:::s3:getObject" ReaderConfig: InputType: "JSON" Parameters: Bucket.$: $.object.bucket Key.$: $.object.key
What stacktrace or error message from your provider did you see?
TypeError: Cannot read property 'States' of undefined at C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless-step-functions\lib\deploy\stepFunctions\compileIamRole.js:22:42 at C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:3585:27 at C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:4967:15 at baseForOwn (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:3032:24) at C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:4936:18 at baseMap (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:3584:7) at map (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:9622:14) at Function.flatMap (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\lodash\lodash.js:9325:26) at getTaskStates (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless-step-functions\lib\deploy\stepFunctions\compileIamRole.js:12:12) at C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless-step-functions\lib\deploy\stepFunctions\compileIamRole.js:576:26 at Array.forEach (<anonymous>) at ServerlessStepFunctions.compileIamRole (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless-step-functions\lib\deploy\stepFunctions\compileIamRole.js:566:32) at processImmediate (internal/timers.js:464:21) From previous event: at package:compileFunctions (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless-step-functions\lib\index.js:122:10) at PluginManager.runHooks (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\classes\plugin-manager.js:530:15) at async PluginManager.invoke (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\classes\plugin-manager.js:564:9) at async PluginManager.spawn (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\classes\plugin-manager.js:585:5) at async before:deploy:deploy (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\plugins\deploy.js:40:11) at async PluginManager.runHooks (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\classes\plugin-manager.js:530:9) at async PluginManager.invoke (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\classes\plugin-manager.js:563:9) at async PluginManager.run (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\classes\plugin-manager.js:604:7) at async Serverless.run (C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\lib\serverless.js:170:5) at async C:\Users\alan_\Work\Projects\craftsman-serverless-api\node_modules\serverless\scripts\serverless.js:787:9 child_process.js:790 err = new Error(msg); ^ Error: Command failed: npx cross-env NODE_ENV=development bash bin/deploy.sh -o encoder at checkExecSyncError (child_process.js:790:11) at execSync (child_process.js:863:15) at file:///C:/Users/alan_/Work/Projects/craftsman-serverless-api/scripts/deploy.mjs:30:3 at ModuleJob.run (internal/modules/esm/module_job.js:183:25) at async Loader.import (internal/modules/esm/loader.js:178:24) at async Object.loadESM (internal/process/esm_loader.js:68:5) at async handleMainPromise (internal/modules/run_main.js:59:12) { status: 1, signal: null, output: [ null, null, null ], pid: 28572, stdout: null, stderr: null }
Additional Data
- 3.21.0:
- 3.11.1:
- Windows:
Solution
There is a very simple solution for this, updating the switch case for Map to use either Iterator or ItemProcessor
function getTaskStates(states) { return _.flatMap(states, (state) => { switch (state.Type) { case 'Task': { return [state]; } case 'Parallel': { const parallelStates = _.flatMap(state.Branches, branch => _.values(branch.States)); return getTaskStates(parallelStates); } case 'Map': { const mapStates = state?.Iterator?.States || state?.ItemProcessor?.States; return getTaskStates(mapStates); } default: { return []; } } }); }
Metadata
Metadata
Assignees
Labels
No labels