Using Serverless Framework with OpenWhisk PHP

Rob Allen
Rob Allen
May 31, 2018 · 3 min read

Serverless Framework is a toolkit to help you mange and deploy a serverless application. (Personally, I’m not a fan of the name as the word “Serverless” already has a meaning in the same space!) It’s a useful tool and supports all the major providers, though AWS Lambda seems to be first-among-equals. The OpenWhisk plugin for Serverless is maintained by the rather excellent James Thomas, so if you have any questions, ping him!

As I build more complex PHP based OpenWhisk applications, I thought I’d explore how Serverless makes this easier.

Installing Serverless & the OpenWhisk plugin

We can install Serverless with this npm command:

$ npm install -g serverless serverless-openwhisk

We can then interact with Serverless using the serverless cli tool. If serverless is too much to type, there’s an sls alias too.

You also need to ensure that you have an IBM Cloud Functions account. Make sure that you also download and set up the bx CLI tool with the cloud-functions plugin as documented here.

Make sure you run this command:

bx wsk api list

This will ensure that the ~/.wskprops file is up-to-date; it contains the relevant API keys that are used by Serverless when deploying.

Create a project

To create a project, we can do:

$ sls create --template openwhisk-php --path ow-php-hello
$ cd ow-php-hello
$ npm install

This generates our project which has a few files files in it. The important ones are:

  • serverless.yml— The Serverless configuration file
  • handler.php — The PHP file containing our action code


If we strip out the comments, there’s not too much to this file:

service: ow-php-hello

name: openwhisk
runtime: php

handler: handler.hello

- serverless-openwhisk

The docs provide the full details of what can go in there, but most importantly for us we can see that there’s a list of functions where one called hello is defined to have a hander of handler.hello which maps to the hello() function in the handler.php file.


This PHP file contains a pretty standard hello-world OpenWhisk PHP action:

function hello(array $args) : array
$name = $args["name"] ?? "stranger";
$greeting = "Hello $name!";
echo $greeting;
return ["greeting" => $greeting];

Deploying and running our project

As you may imagine given that Serverless’s raison d’être is to manage serverless application deployments, deploying is a one-liner:

$ sls deploy

It whirs and clicks for a bit and then you get an output that contains lots of lines. One interesting part is this:


We can see that we have deployed an action called ow-php-hello-dev-hello which is made up of the project name (ow-php-hello), the stage (dev) and our function name (hello).

Invoking our action

We can use the standard command line to invoke our action:

bx wsk action invoke -r ow-php-hello-dev-hello
"greeting": "Hello stranger!"

Alternatively Serverless provides an mechanism that means we don’t have to remember the prefix:

$ sls invoke -f hello
"greeting": "Hello stranger!"

Web actions

To web enable our action (which is really useful for web hooks), we need to set it up as a Web Action. To do this, we have to change the configuration file and also our action code.

Firstly, we modify the serverless.yml file. Update the hello function like this:

handler: handler.hello
web-export: true

For web actions, we also need to modify the return statement in handler.php so that it looks like this:

return [
"body" => [
"greeting" => $greeting,

When you run sls deploy this time, you’ll notice output similar to this:

endpoints (web actions):

This is the URL to our web action, so we can now use an HTTP client such as curl or Postman to invoke our action:

$ curl

"greeting": "Hello stranger!"


Even for a single action, Serverless makes it easier to deploy and manage it. As we add more actions to our project, this will become more apparent. The OpenWhisk Plugin for Serverless makes it really easy to write bigger PHP serverless applications.

As a final note, if you want to remove the entire project from OpenWhisk, use sls remove.

Originally published at Rob Allen’s DevNotes.

Apache OpenWhisk

Apache OpenWhisk is a serverless cloud platform that…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store