Drools Decision Table Deployment (AWS Lambda)

942 views
Skip to first unread message

Timothy Soh

unread,
May 12, 2017, 3:53:31 AM5/12/17
to Drools Setup
Hi there, 

I am trying to deploy a drools project (built using eclipse) onto AWS Lambda but ran into some permission issues with Lambda. 
I was hoping to get some feedback on how to workaround the issue from the drools perspective.


First, let me describe my AWS Lambda function and my deployment structure:
  • I package my drools project into a jar => droolsdemo.jar
    • My drools project has only one decision table (demo.xls) under /src/main/resources/demorule
  • I create a AWS Lambda project that includes droolsdemo.jar as a dependency
    • My AWS Lambda project is a simple wrapper that receives input, creates a KieSession, triggers all rules, and then returns rule outputs.
  • I upload the AWS Lambda project to AWS
When I trigger the AWS Lambda, I get a `permissions denied` error while trying to access demorule/demo.xls (full stack trace below). 
This error is triggered in the code when the KieSession is created:
kSession = kContainer.newKieSession("demorule");

I believe that the above line of code extracts the excel file into the default directory /var/task and tries to read it. AWS Lambda by default restricts permissions on files in the default directory. 
Current workarounds for this issue involve creating files in the /tmp directory instead.

Is it possible to direct Drools to extract the excel file to a specific directory? 
Otherwise, is it possible to direct Drools to create a KieSession with a filepath as an input instead of a session-name (having the .xls/.drl file residing outside of the project) ?

Any help/feedback would be greatly appreciated,

Cheers,
Timothy

--------------------------------------------------------------------------------------------------------------------------------------------

"errorMessage": "/var/task/demorule/demo.xls (Permission denied)",
        "errorType": "java.io.FileNotFoundException",
        "stackTrace": [
          "java.io.RandomAccessFile.open0(Native Method)",
          "java.io.RandomAccessFile.open(RandomAccessFile.java:316)",
          "java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)",
          "org.apache.poi.poifs.nio.FileBackedDataSource.newSrcFile(FileBackedDataSource.java:130)",
          "org.apache.poi.poifs.nio.FileBackedDataSource.<init>(FileBackedDataSource.java:46)",
          "org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:218)",
          "org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:166)",
          "org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:278)",
          "org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:250)",
          "org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:229)",
          "org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:95)",
          "org.drools.decisiontable.SpreadsheetCompiler.parseResource(SpreadsheetCompiler.java:123)",
          "org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:110)",
          "org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:83)",
          "org.drools.decisiontable.DecisionTableProviderImpl.compileResource(DecisionTableProviderImpl.java:78)",
          "org.drools.decisiontable.DecisionTableProviderImpl.loadFromResource(DecisionTableProviderImpl.java:44)",
          "org.drools.compiler.compiler.DecisionTableFactory.loadFromResource(DecisionTableFactory.java:37)",
          "org.drools.compiler.builder.impl.KnowledgeBuilderImpl.decisionTableToPackageDescr(KnowledgeBuilderImpl.java:404)",
          "org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl$12.map(CompositeKnowledgeBuilderImpl.java:437)",
          "org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildResource(CompositeKnowledgeBuilderImpl.java:322)",
          "org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:307)",
          "org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:114)",
          "org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)",
          "org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:243)",
          "org.drools.compiler.kie.builder.impl.KieContainerImpl.createKieBase(KieContainerImpl.java:484)",
          "org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:447)",
          "org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:604)",
          "org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:575)",








Timothy Soh

unread,
May 16, 2017, 2:37:26 AM5/16/17
to Drools Setup
worked around this issue by using .drl files instead. I compiled all .xls files to .drl files and used .drl files in the jar for AWS Lambda
Reply all
Reply to author
Forward
0 new messages