- Para a construção de um Lambda" é necessário o descritor de pacote "template.yaml".
Lembrando que a classe que implementa "RequestStreamHandler" será "Singleton" até a JVM sair da instancia (kill).
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
DroolsFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: 'com.github.frkr.DroolsHandler'
CodeUri: ./target/lambda.jar
MemorySize: 256
Timeout: 60
Runtime: java8
O pacote abaixo foi para suprir a necessidade de log.
<dependency>
<groupId>io.symphonia</groupId>
<artifactId>lambda-logging</artifactId>
<version>1.0.0</version>
</dependency>
- Usando o "Maven Shade", fará um pacote único de jar.
Terminando o exemplo de Lambda, continuei com o exemplo de Drools.
O arquivo "kmodule.xml" foi necessário para o Drools funcionar. Não testei se as regras podem ficar em outro diretório que não seja o "rules/". O pacote das regras esta como "com.sample" para exemplificar o DRL com o uso de "import".
Neste exemplo, o Drools executa as regras no classpath simples assim:
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
kSession.fireAllRules();
TODO: Fazer o Lambda receber um JSON com o DRL, executar e devolver outro JSON.
mvn clean package shade:shade
sam local invoke -e event.json
aws lambda list-functions
aws lambda create-function --function-name DroolsFunction --runtime java8 --role arn:aws:iam::827387554119:role/service-role/microservice --handler com.github.frkr.DroolsHandler --zip-file fileb://`pwd`/target/lambda.jar
aws lambda update-function-code --function-name DroolsFunction --zip-file fileb://`pwd`/target/lambda.jar
aws lambda invoke --function-name DroolsFunction --payload '{"teste":"sim"}' output.log
aws apigateway create-rest-api --name 'DroolsFunction'
aws apigateway get-resources --rest-api-id gd4v1lrjjd
aws apigateway create-resource --rest-api-id gd4v1lrjjd --parent-id q5nlsd6eu5 --path-part 'drools'
aws apigateway put-method --rest-api-id gd4v1lrjjd --resource-id hlv8n6 \
--http-method POST --authorization-type "NONE" --no-api-key-required \
--request-parameters "method.request.header.custom-header=false"
aws apigateway put-integration --rest-api-id gd4v1lrjjd --resource-id hlv8n6 \
--http-method POST --type AWS --integration-http-method POST \
--uri 'arn:aws:apigateway:sa-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:sa-east-1:827387554119:function:DroolsFunction/invocations'
--uri 'arn:aws:lambda:sa-east-1:827387554119:function:DroolsFunction'
delete-integration \
aws apigateway \
get-integration \
--rest-api-id gd4v1lrjjd \
--resource-id hlv8n6 \
--http-method POST
aws apigateway \
put-method-response \
--rest-api-id gd4v1lrjjd \
--resource-id hlv8n6 \
--http-method POST \
--status-code 200
aws apigateway put-integration-response --rest-api-id gd4v1lrjjd --resource-id hlv8n6 \
--http-method POST --status-code 200 --selection-pattern "" --response-templates '{"application/json": "{\"json\": \"template\"}"}'
aws apigateway \
get-integration-response \
--rest-api-id gd4v1lrjjd \
--resource-id hlv8n6 \
--http-method POST \
--status-code 200
aws apigateway create-deployment --rest-api-id gd4v1lrjjd --region sa-east-1
aws apigateway update-stage --region <region> \
--rest-api-id <rest-api-id> \
--stage-name <stage-name> \
--patch-operations op='replace',path='/deploymentId',value='<deployment-id>'
curl -i -X POST -H "Content-Type:application/json" -d "{ \"nome\" : \"Davi\" }" https://gd4v1lrjjd.execute-api.sa-east-1.amazonaws.com/prod/drools