Adobe I/O & OpenWhisk

May 15, 2018

Quick First Impressions on Adobe I/O and OpenWhisk

For some reason, when AWS first announced their Lambda service back in 2014 I didn’t really “get” it. At the time most of my day-to-day development efforts were put towards projects with traditional “serverfull” infrastructure. It wasn’t until a few years later while working on a hobby project that I realized just how great it was to not have to worry about EC2 instance sizes or patching node or NGINX configurations. Not to mention the simple but flexible set of _modern_ tools that make developing not only enjoyable but fast.

Fast forward to today and with the right tooling (e.g. serverless and TypeScript) the “serverless” approach has been incredibly freeing on a number of different projects vastly reducing (or at least changing!) the mental overhead required. Honestly, I love it – which is why I am so excited about the direction Adobe has taken with Adobe I/O, specifically the cloud-based version of Commerce Integration Framework.

CIF Cloud is part of the Adobe I/O ecosystem and built on OpenWhisk, an open-source Apache project which can be thought of as a self-hosted version of AWS Lambda or Microsoft Azure’s Functions. Adobe manages the hosting with the Adobe I/O runtime which means we as developers/contributors can focus on the platform!

Tooling

Much like other “serverless” providers/vendors, OpenWhisk is (relatively) platform agnostic so any number of languages can be leveraged when creating your functions (“actions” in the OpenWhisk vernacular). At this point in time CIF has focused on Node.js which for us as node has been our Lambda go-to already. We’ve also found tools such as Apex and serverless to be invaluable for deploying our functions and bringing a great deal of sanity into a workflow. Specifically `serverless` has been our tool of choice (though AWS SAM CLI) looks promising on the Lambda front!) is that it’s platform agnostic which means a lot of our existing tooling infrastructure from past AWS Lambda projects has been portable to our work with CIF Cloud.

Here’s a quick snippet from a `yaml` file that gives an idea of how serverless makes it easy to setup an endpoint for searching for products from our Magento CIF Cloud implementation:

 

searchProducts:
  name: ${self:custom.magento-cif}/searchProducts
  handler: src/functions/products/searchProducts.main 
  annotations:
    web-export: true

 

Gotchas

Perhaps because OpenWhisk is a relatively new serverless platform compared to AWS and Microsoft’s offerings, there are a few plugins for serverless that don’t fully support OpenWhisk. In particular, the TypeScript plugin for serverless doesn’t work flawlessly without some massaging (the details of which we may cover in a future blog post if there is any interest). This has been a minor issue and the benefits of using VS Code + TypeScript together we’ve found make the small initial effort in setup well worth it.

The future of OpenWhisk + Adobe I/O

Bounteous has a long history of creating solid AEM integrations with a number of different commerce systems. Having personally been involved in many of them I will say that I’m genuinely excited about the direction Adobe is taking CIF with the cloud offering. I believe a more defined separation of concerns (e.g. commerce from content) is a big step in a positive direction. But, the thing I’m most excited about is the structure and definition Adobe is providing around what a commerce service is and what and how it interacts with other systems – in other words, the API. I suspect this will open up a whole new world of interoperability between commerce and the rest of the Adobe I/O ecosystem.