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