Skip to Content
Technical Articles

How to consume an AWS lambda Function from SAPPO

We might have more and more requirements integrating with AWS. One of the typical requests is to push message into AWS Simple Notification Service (SNS). One solution option would be using JAVA program in the mapping step or adapter module step. There will a huge amount of java libraries to be downloaded from AWS for doing it. Or if your project has enough budget, make procurement on third party adapters, like Advantco AWS solution.

Another solution option would be using AWS lambda Function and expose it has an API. Once the Function receives incoming message, it pushes the data into the relevant Topic.

I assume many SAP PO developers, who are less familiar with AWS development, are interested in how the entire solution has been implemented. Understand part of the processes are not within SAP PO. I was trying to add these steps into a separate file and uploaded in form of a PDF/Word attachment. However the Blog Post doesn’t support such kind of attachment and the only way is to put these steps inside the tutorial below. Hopefully it does not break the rule here.

Here is the tutorial describing everything built from scratch.

1 Prerequisite.

  • PO system
  • AWS account with enough authority

2 Solution Overview

 

2.1Process Steps

  1. Postman pushes the message out to SAP PO
  2. SAP PO sends the message to an AWS API Gateway
  3. The API Gateway triggered a lambda Function and the function populates data into a SNS topic

4. The Topic publishes the message to a Mobile registered via SMS

3 Development Steps

3.1  Create a SNS Topic

Go to AWS Management Console and type SNS in the filter below. Press enter button

Choose Topic option on the left

Click on the Create topic button

Fill in the topic name, description. For the access policy, to keep the process simple, just let every can publish and subscribe the topic as below

Click the button create topic to create the topic

This is the topic created. Then click button Create Subscription

 

In order to subscript the topic from mobile phone, input the SMS as protocol and your phone number as the endpoint as below

 

The subscription will be confirmed automatically.

Publish a Test message

This is the message received by the mobile

3.2  Create a Lambda Function

From the AWS Management Console, input lambda in the filter field and press enter button

Click create function button on the right hand

Note:

AWS lambda function supports quite a few different languages

In our tutorial, we will use Node.js 10.x

3.3 Create API Gateway

This is the Diagram after the Add button has been clicked

3.4 Develop Function

Copy and post the source into index.js

const AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
const sns = new AWS.SNS({apiVersion: '2010-03-31'});

exports.handler = async (event) => {
    // TODO implement
    const SNSTopicArn = event.queryStringParameters ? event.queryStringParameters.SNSTopic : null;
    console.log("SNSTopicArn\n" + SNSTopicArn);
    
    return await insertSNS(SNSTopicArn, event.body);
};

const insertSNS = async (Topic, payload) =>{
  // Create publish parameters
    let params = {
      Message: payload, /* required */
      TopicArn: Topic
    };
    // Create promise and SNS service object
    var Promise = sns.publish(params).promise();
    await Promise.then();
    
    return sendRes(202,"SNS Success");
};

const sendRes = (status, body) => {
  var response = {
    statusCode: status,
    headers: {
      "Content-Type": "text/html"
    },
    body: body
  };
  return response;
};

this is the view after code has been added

Create another file, named config.json in the same folder as below

Input the key id and key of your service account.

3.5 Change the default timeout

In the Basic settings tile, the default timeout of lambda function is 3 seconds. This is a bit too short. For our test, change it to 1 minute as below.

3.6 Get API Endpoint

Choose API Gateway linking to the lambda function created. The URL of endpoint will be displayed below. It will be used in the SAP PO REST adapter configuration.

 

4        SAP PO Configuration

Since we are not taking care of message structure conversion, the ESR part can be ignored.

4.1         Sender REST channel

Configure these two tabs only to make the configuration as simple as possible

For the rest of tabs, just remain default configuration.

4.2  Receiver REST channel

Input the URL from AWS API Gateway

The topic needs to be provided in form of parameter in the URL as below

https://<endpoint>?SNSTopic=<SNS ARN>

4.3  Integrated Configuration

The namespace and interfaces are dummy ones.

4.4  Activate the change list

 

5         Unit Test

5.1         POSTMAN

Push message from POSTMAN as below

5.2        Message in the PO Monitor

5.3         Logs in the Cloud Watch

5.4        The SMS received by the mobile phone

Be the first to leave a comment
You must be Logged on to comment or reply to a post.