Compute Services

Simplify binding your IBM Cloud services to serverless Functions

Share this post:

 

Introducing a new command for the IBM Cloud Functions CLI plug-in to make it easier to configure your actions to have access to your IBM Cloud service credentials.  The new service command is a convenient way to make your IBM Cloud service credentials available to your Cloud Functions code at run time.  The new command helps with a form of secret management for your IBM Cloud services within the context of IBM Cloud Functions.

Introducing the bx wsk service CLI command

 

The bx wsk service bind retrieves the specified service’s credentials and “binds” the requested service credentials to your Cloud Functions action as a new parameter.  Once the credentials are “bound”, you can leverage them like any other parameter that is defined for that action.

The new service command is not to be confused with the cf bind-service command that is available in Cloud Foundry.  It is simply an automated way to create a new parameter on your existing action that contains service credentials.

How the service command differs from the existing package refresh command

If you are familiar with IBM Cloud Functions packages, you might wonder what the difference between bx wsk service bind and bx wsk package refresh is.  The package refresh command only updates credentials for very specific IBM provided service for which Cloud Functions provides custom integrations.  For example, Cloudant, MessageHub and the Weather services are supported.

The service bind command is more flexible and allows you to bind any IBM Cloud service to any action that is defined in IBM Cloud Functions. The only caveat is that you must have credentials defined for the service that you want to bind.

Examples

To obtain the credentials from your Watson Conversation service, and make it available to your “TravelAdvisor” action, run the following command:

[code]
bx wsk service bind conversation TravelAdvisor
[/code]

To see what is currently bound and where it came from, you can run the following command:

[code]
bx wsk action get TravelAdvisor
[/code]

The Watson conversation service credentials are now available to the TravelAdvisor action as a parameter named __bx_creds as shown in the following code.  For example, pretend the TravelAdvisor action has the following code:

[code]function main({
message,
__bx_creds: {conversation:{url}},
__bx_creds: {conversation:{username}},
__bx_creds: {conversation:{password}}
}){
console.log("Use the Watson Conversation API with credentials:", url, username, password);
}
[/code]

If you run bx wsk action invoke TravelAdvisor -r, you might see something like the following output:

[code]
{ }
[/code]

What gives?  Well the output was printed to standard out, and not returned as part of the response.  To view the log, you can check the last activation with the command bx wsk activation get -l :

[code]
ok: got activation abcde……xyz

{
"namespace": "jalva@us.ibm.com_dev",
"name": "TravelAdvisor",
"version": "0.0.3",
"subject": "jalva@us.ibm.com",
"activationId": "b96d80816f0349fbad80816f03e9fbdf",
"start": 1509462891021,
"end": 1509462891087,
"duration": 66,
"response": {
"status": "success",
"statusCode": 0,
"success": true,
"result": {}
},
"logs": [
"2017-10-31T15:14:51.08598289Z stdout: Use the Watson Conversation
API with credentials: <watson-url> <watson-username> <watson-password>"
],
"annotations": [
{
"key": "limits",
"value": {
"logs": 10,
"memory": 256,
"timeout": 60000
}
},
{
"key": "path",
"value": "jalva@us.ibm.com_dev/TravelAdvisor"
},
{
"key": "kind",
"value": "nodejs:6"
}
],
"publish": false
}
[/code]

If you no longer wish to have this binding reflected in the action, as you no longer use this service, you can remove it using the unbind command:

[code]
bx wsk service unbind conversation TravelAdvisor
[/code]

If you rerun your TravelAdvisor action again (bx wsk action invoke TravelAdvisor) after your credentials are unbound, you might see something like the following output:

[code]
{
"error": "An error has occurred: TypeError: Cannot match against ‘undefined’ or ‘null’."
}
[/code]

Remember to always run the bx wsk service command after you set up all your other default parameters.If you run bx wsk action update to modify parameters, the credentials binding is removed along with any other parameters not included in the action update. If this happens, remember to run bx wsk service bind again.

For more information about this new feature, take a look at the documentation for the Cloud Functions plug-in – https://console.bluemix.net/docs/openwhisk/bluemix_cli.html#cli_bind

Get started with IBM Cloud Functions with your Free account.

Product Marketing Manager - Cloud Computing

More Compute Services stories
January 14, 2019

Knative Monitoring with Sysdig on IBM Cloud

Learn how to monitor your Knative Kubernetes cluster using IBM Cloud Monitoring with Sysdig.

Continue reading

January 14, 2019

Predicting the future with Monte Carlo simulations over IBM Cloud Functions

We’re going to demonstrate how IBM Cloud Functions can provide a phenomenal boost to Monte Carlo simulations, allowing them to execute in a fraction of the time as compared to a conventional execution model.

Continue reading

January 10, 2019

Knative Log Analysis with LogDNA on IBM Cloud

We're going to show you how to use the IBM Log Analysis with LogDNA service to configure cluster-level logging for an app named Knative-node-app published in IBM Cloud Kubernetes Service.

Continue reading