A question I had recently was “How to use IBM FHIR Server” with IBM Cloud Functions….
Here is the recipe:
1 – Create a topic FHIR_NOTIFICATION (for instance in EventStreams)
2 – Setup a IBM Cloud Function per https://github.com/IBM/ibm-cloud-functions-message-hub-trigger
3 – Update your process-message with the following code:
function main(params) {
return new Promise((resolve, reject) => {
console.log(params.messages);
if (!params.messages || !params.messages[0] || !params.messages[0].value) {
reject("Invalid arguments. Must include 'messages' JSON array with 'value' field");
}
const msgs = params.messages;
const locations = [];
for (let i = 0; i < msgs.length; i++) {
const msg = msgs[i];
console.log(msg.value.location);
locations.push(msg.value.location);
}
resolve({
locations,
});
});
}
exports.main = main;
exports.main = main;
4 – Invoke with parameters
{
"messages": [
{
"key": null,
"offset": 0,
"partition": 2,
"topic": "FHIR_NOTIFICATION",
"value": {
"datasourceId": "default",
"lastUpdated": "2021-04-16T13:55:13.312415Z",
"location": "SearchParameter/178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac/_history/1",
"operationType": "create",
"resource": {
"base": [
"Encounter"
],
"code": "diff-start-end-time",
"description": "Example of sophisiticated extraction",
"expression": "iif(period.start.exists() and period.end.exists(), between(period.start , period.end, 'days'), {})",
"id": "178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac",
"meta": {
"lastUpdated": "2021-04-16T13:55:13.312415Z",
"versionId": "1"
},
"name": "Example of sophisiticated extraction",
"resourceType": "SearchParameter",
"status": "draft",
"type": "quantity",
"url": "https://fhir.ibm.com/demo/diff-start-end-time"
},
"resourceId": "178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac",
"tenantId": "default"
}
}
]
}
4 – Click Invoke
5 – Look to the Right to see the logging/activation (Expand the tick on the right-middle of the screen)
6 – You’ll see you now have a Function connected with EventStreams.

Notes
The activation dashboard is important https://cloud.ibm.com/functions/dashboard. You can see great detail on the logs and what is passed to the Function.
{
"activationId": "960f129da9f04f138f129da9f0ef13f7",
"annotations": [
{
"key": "path",
"value": "14d753c7-8620-4caa-b6af-3934e33ae451/fhir-event-streams/process-message"
},
{
"key": "waitTime",
"value": 274
},
{
"key": "kind",
"value": "nodejs:12"
},
{
"key": "timeout",
"value": false
},
{
"key": "limits",
"value": {
"concurrency": 1,
"logs": 10,
"memory": 256,
"timeout": 60000
}
},
{
"key": "initTime",
"value": 25
}
],
"duration": 32,
"end": 1618583048738,
"logs": [
"2021-04-16T14:24:08.737951Z stdout: [",
"2021-04-16T14:24:08.737997Z stdout: {",
"2021-04-16T14:24:08.738031Z stdout: key: null,",
"2021-04-16T14:24:08.738037Z stdout: offset: 0,",
"2021-04-16T14:24:08.738042Z stdout: partition: 2,",
"2021-04-16T14:24:08.738047Z stdout: topic: 'FHIR_NOTIFICATION',",
"2021-04-16T14:24:08.738052Z stdout: value: {",
"2021-04-16T14:24:08.738057Z stdout: datasourceId: 'default',",
"2021-04-16T14:24:08.738062Z stdout: lastUpdated: '2021-04-16T13:55:13.312415Z',",
"2021-04-16T14:24:08.738066Z stdout: location: 'SearchParameter/178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac/_history/1',",
"2021-04-16T14:24:08.738071Z stdout: operationType: 'create',",
"2021-04-16T14:24:08.738076Z stdout: resource: [Object],",
"2021-04-16T14:24:08.738081Z stdout: resourceId: '178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac',",
"2021-04-16T14:24:08.738085Z stdout: tenantId: 'default'",
"2021-04-16T14:24:08.738134Z stdout: }",
"2021-04-16T14:24:08.738141Z stdout: }",
"2021-04-16T14:24:08.738146Z stdout: ]",
"2021-04-16T14:24:08.738152Z stdout: SearchParameter/178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac/_history/1"
],
"name": "process-message",
"namespace": "14d753c7-8620-4caa-b6af-3934e33ae451",
"publish": false,
"response": {
"result": {
"msgs": [
{
"key": null,
"offset": 0,
"partition": 2,
"topic": "FHIR_NOTIFICATION",
"value": {
"datasourceId": "default",
"lastUpdated": "2021-04-16T13:55:13.312415Z",
"location": "SearchParameter/178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac/_history/1",
"operationType": "create",
"resource": {
"base": [
"Encounter"
],
"code": "diff-start-end-time",
"description": "Example of sophisiticated extraction",
"expression": "iif(period.start.exists() and period.end.exists(), between(period.start , period.end, 'days'), {})",
"id": "178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac",
"meta": {
"lastUpdated": "2021-04-16T13:55:13.312415Z",
"versionId": "1"
},
"name": "Example of sophisiticated extraction",
"resourceType": "SearchParameter",
"status": "draft",
"type": "quantity",
"url": "https://fhir.ibm.com/demo/diff-start-end-time"
},
"resourceId": "178daf6d720-d2da7624-1664-4e50-a4f8-e558ab667fac",
"tenantId": "default"
}
}
]
},
"size": 877,
"status": "success",
"success": true
},
"start": 1618583048706,
"subject": "pb",
"version": "0.0.1"
}