SHIFT

--- Sjoerd Hooft's InFormation Technology ---

User Tools

Site Tools


Sidebar

Sponsor:


Recently Changed Pages:

View All Pages


View All Tags







WIKI Disclaimer: As with most other things on the Internet, the content on this wiki is not supported. It was contributed by me and is published “as is”. It has worked for me, and might work for you.
Also note that any view or statement expressed anywhere on this site are strictly mine and not the opinions or views of my employer.


Pages with comments

PageDateDiscussionTags
2019/11/18 13:52 1 Comment

View All Comments

addnodejslayertolambda

Add a Node.JS Layer to Lambda

In this article I'll show how to add a Node.JS layer to Lambda. By default, Lambda supports Node.JS 12 and 10 native modules and the AWS SDK for JavaScript in Node.JS (subject to change). However, there are many modules for Node.JS available that extend the possibilities. I'll show how to add the Node.JS module paynl to Lambda.

First play with Paynl

If you're just interested in the layer stuff you can skip this step. I find it useful however to first test a module natively on my workstation before adding it to Lambda:

  • First download ans install the LTS (long-term-support) or latest version from nodejs.org. I recommend to install the Long Term Support version, which is 12.18.3 right now. During the install you can keep all the installation defaults.
  • After the installation you have to restart your computer and you can test the installation with node --version from a terminal (like powershell)
  • If you want to test a bit more you could create a file called index.js with the text console.log("Hello world") and run it with node index.js
    • As an alternative you can start node by typing node which gives you an prompt to run console.log("Hello world") directly

Now that node runs we can start with the module paynl:

  • We can install the module using npm install paynl-sdk --save
  • We can now setup the paynl.js file and test the functionality
//jshint esversion:6
 
console.log("Start testing with paynl node.js module");
var Paynl = require('paynl-sdk');
// In the pay.nl admin, navigate to Manage -> Services and click the SL-code on the left.
// From the popup use the apitoken and serviceId, and configure them in the SDK.
Paynl.Config.setApiToken('xxxxx');
Paynl.Config.setServiceId('xxxxx');
 
Paynl.Paymentmethods.getList().forEach(
    function(paymentmethod) {
            console.log(paymentmethod.id + ' ' + paymentmethod.visibleName);
    }
)
.catch(error => {
    console.error(error);
});

Start the script (after setting your own token and serviceId) using:

node paynl.js

Which should output something like this:

Start testing with paynl node.js module
10 iDEAL

Now that we know we have a working module and script we can start creating a Layer for Lambda so we can run the script from Lambda.

Add Layer in Lambda

Follow the following steps to add the paynl module as a layer to Lambda

  • First create an empty directory called nodejs (this must be nodejs)
  • From inside of the directory issue the following command to initialize npm npm init which will start a wizard to create a package.json file
  • Now install the paynl module: npm install --save paynl-sdk
  • Now zip the nodejs directory to create a nodejs.zip file
  • Now move to the AWS Lambda console and click Layers under Additional resources
  • Click on Create Layer and provide:
    • Name: nodejs-paynl
    • Upload zipfile
    • Set the latest version of node as the runtime

Now that we've added a new layer to Lambda we can add it to a Lambda Function.

Add Layer to Lambda Function

Follow the following steps to create a Lambda Function using the script above and adding the layer to it:

  • Still inside the AWS Lambda console, click on Functions to access the Lambda Functions
  • Click on Create Function and select “Author from scratch”:
    • Name: PaynlTest
    • Runtime: Select the same version you selected for the layer
    • Permissions: If you don't have one yet choose to “Create a new role with Basic Lambda permissions” or use an existing role with the required permissions already assigned
    • Click on Create Function
  • Inside the new function, click on Layers and click “Add a Layer”
    • Select Custom Layers and select your created layer from the drop down menu
    • Select the available version from the dropdown menu
    • Click Add
  • Inside the function, scroll down to Function code, and replace the default code with the code below and click Save:
//jshint esversion:6
 
var Paynl = require('paynl-sdk');
// In the pay.nl admin, navigate to Manage -> Services and click the SL-code on the left.
// From the popup use the apitoken and serviceId, and configure them in the SDK.
Paynl.Config.setApiToken('xxxxx);
Paynl.Config.setServiceId('xxxxx');
 
exports.handler = (event, context, callback) => {
    console.log("Start testing with paynl node.js module");
 
    Paynl.Paymentmethods.getList().forEach(
        function(paymentmethod) {
            console.log(paymentmethod.id + ' ' + paymentmethod.visibleName);
        }
    )
    .catch(error => {
        console.error(error);
    });
};

Now we are finished we can check the function:

  • Still inside the new created Function, click Test at the top
  • Provide a name for the test event, and you can keep the default input as this is not used in the function
  • Click Create
  • Once the test event is created click Test again

Now, part of the output should be something like this:

INFO    Start testing with paynl node.js module
INFO    10 iDEAL

Resources

Discussion

Enter your comment. Wiki syntax is allowed:
T H B L L
 
addnodejslayertolambda.txt · Last modified: 2020/09/04 17:30 by sjoerd