Fn Project in Public Clouds (aka Serverless on IaaS ?)

Fn in Public Clouds (IaaS)

Fn project is a cloud agnostic FaaS platform and a common question is how to use Fn in public clouds. Similar to the local installation that we used in the Oracle blog posting (link soon), it can also be installed on any public cloud IaaS. For most IaaS it is enough to pass the installation command directly to the creation of a compute instance as so called user-data. User data is commands that are acted upon when the instance is provisioned. Also when running Fn in a public cloud, don’t forget to enable access rules for Fn server allowing port 8080 – depending on requirements – either from your own IP or all public IP addresses.

Once Fn server is running on your favourite cloud provider, you could deploy the recommendation engine mock example mentioned in the posting above in two different ways.

Deploy Your Fn Function in the Cloud

# example 1 (for teaching purpose only, in production use approach below)
# note: run these commands on the cloud instance

$ fn apps create advtravel
$ fn routes create advtravel /fn-recommend DOCKER_ID/recommend:0.0.2


Another, probably even more useful way to deploy the function is to set the FN_API_URL environment variable locally, point it to the remote cloud instance, and run the local Fn deploy command against the remote cloud instance.

# example 2 (easier, what you'd do in real life)
$ export FN_API_URL=URLofRemoteCloudInstance
$ fn deploy --app advtravel 

Note, that with the commands above you never had copy over the function or the container image to the cloud instance. When the function will be invoked the first time, Fn will pull the Docker container from the registry, store it locally, and then simply run the function.

Test Fn in the Cloud

Once the Fn is running in the cloud and your application is deployed you can access the application from a local machine using the command-line or Postman. The invocation is the same as in the local example, just replace localhost with the public IP address of your cloud instance:

$ curl -X POST --data @testdata/syd.json PUBLIC_IP:8080/r/advtravel/fn-recommend 

Real FaaS?

Obviously, when running Fn project on an IaaS you do not get the true pay per invocation benefit as for a FaaS implemented by the cloud provider as PaaS. You will get automated scalability to some degree, since it is built into the load balancer Fn LB. At the end running Fn on IaaS is only serverless from a user perspective.

It will be interesting to see if a cloud platform (most likely Oracle, since Fn Project is driven a lot by Oracle) will provide a proper FaaS service with pay per invocation and automated scalability that is compatible with open source Fn Project.

Fn Cloud Demo

A recorded live demo from Devoxx conference about deploying Fn on IaaS can be seen here.

Get the demo app used in webcast from here.

Show EC2 Instances across all Regions

A note to myself (might be useful to you as well):

for region in `aws ec2 describe-regions --output text | cut -f3`
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region

Originally from Stackoverflow

Cloud, Microservices and Container Workshop in South Africa!

Lot’s of people are talking about these topics nowadays. Heaps of slides and samples are available for download, lots of presentations can simply be streamed from youtube.

In Johannesburg we were working with these solutions hands-on: I delivered a 3 day Cloud, Microservices and Containers workshop on behalf of Oracle.

Find attached some impressions from the smart and fun group of devs and architects I was working with.



APIs, and Clouds: Please Explain the Joke!

Some people have asked what the sentence on my laptop sticker means. I was gifting some of these stickers at the OTN Tour Latam 2016. Maybe it is a bit of a academic / nerdy joke. So let me explain.

Screen Shot 2016-08-10 at 10.23.24

The Posh (and boring)

Once upon a time there were people rich in money but poor in humor driving around in their second cars (typically a small Mercedes, a small BMW or a small Audi) with a sticker on it saying that their first car is a huge Mercedes, Porsche or Bentley. Let’s not waste too much time talking about these people here.


The cooll stuff as often started in Down Under. Some people with a lifestyle instead of a job came up with a cool car sticker, that basically said it is much nicer to have a small boat and go to the sea for diving than wasting money on a second car. E.g. see here for a rather fun version.


Then (to the best of my knowledge) Google made fun out of it, riding the cloud computing wave with a sticker that said “My other Computer is a Data Center“. Meaning that if you use the cloud you can have a whole data center.

Cloud Computing and APIs

Let’s get a bit more specific: What I pointed out half decade ago (yes, that time when everybody was just laughing about that topic) in my Cloud Computing book is the following: The true beauty of cloud computing is not that you access a compute instance in somebody else’s data center – this is what you could simply get by outsourcing. Guys, it’s more that your whole data center is software. Your whole data center is an API!

With cloud computing the difference of placing a cloud instance in Sydney or Frankfurt is just one single parameter in an API call – that comes at no extra cost. Same for placing it in datacenter 1 in Frankfurt or datacenter 2. So you get geo-redundancy for free! Now go and try this at home.

Also there is no difference in using 100 instances for 1h or using 1 instance for 100h. So you have a massively parallel, distributed supercomputer at your fingertips for a few pennies. Try this in your DC.

I guess now you get an idea what sticker means and why it says API. At the end it is all about APIs. And we haven’t even started to talk about the possibilities of PaaS, SaaS, HaaS, or API Management 🙂 Btw, sometimes I think most marketing people do a really bad job causing FUD instead of promoting tech.

Screen Shot 2016-08-22 at 11.20.04

Screen Shot 2016-08-22 at 11.35.15Screen Shot 2016-08-22 at 11.20.26

computer api cloud


Let me know if you spot more of these stickers out there and send me pics :-)!

Oracle Service Bus 12c (12.2.1) Native REST: Bug in HTTP GET in Pipeline?

While I was working on an Oracle tech presentation, I discovered the following issue with native REST and Oracle Service Bus 12c.


SOA Quickstart / 12.2.1 OSB, running on RedHat derivative with Oracle JDK 8.


OSB 12.2.1 Native REST pipelines don’t work with GET parameters.

Creating a native REST business services works fine, also adding a REST proxy service.
Once you insert a pipeline HTTP stops working correctly (since the URL parameters aren’t forwarded, a list will be returned by the backend service according to REST semantics), since URL parameters are not forwarded.

Steps to reproduce:

  • Use REST tech adapter to create a REST business service for an existing REST backend.
  • Define GET and POST methods. WADL will be created.
  • Test business service from WADL: both GET and POST will work.
  • Create proxy service from REST business service
  • Test proxy service, again GET and POST methods will work from OSB test client.
  • In JDev, drop a pipeline on the line connecting proxy and business service.
  • In JDev verify the pipeline configuration. it will display correct values.
  • Test the proxy service again, only POST will work. GET does not work anymore (now returns a whole list), since the URL parameters are not forwarded. Even an empty OSB pipeline will swallow the GET URL parameters.


IMHO this is a bug. I am currently in discussion with Oracle PM about it. Since I am working on another cloud gig, I cannot file a SR myself.

What is next?

I will let you know about updates / fixes or workarounds. Note, you could set the URL parameters as routing options to circumnavigate the issue for a particular use case.

Update 1 (Oct 2016)

I received no feedback from Oracle unfortunately. Anyway, if you experience the same issue let me know. It is important to share the knowledge here – I receive a lot of positive feedback from people with the same issues. Anyhow, also file a SR with MOS if you can. This is the official way to get it possibly fixed.

Update 2 (Jan-12, 2017)

There is a Patch 25184543 now with a backport to, see comments below. Gracias a Juan! Kudos for getting this through MOS and for sharing the knowledge.