Using OpenWhisk native actions,
you can package any executable as an action. This works for Go as an example.
As with Docker actions, the Go executable receives a single argument
from the command line.
It is a string serialization of the JSON object representing the arguments to the action.
The program may log to stdout
or stderr
.
By convention, the last line of output must be a stringified JSON object which represents
the result of the action.
Here is an example Go action.
package main
import "encoding/json"
import "fmt"
import "os"
func main() {
//program receives one argument: the JSON object as a string
arg := os.Args[1]
// unmarshal the string to a JSON object
var obj map[string]interface{}
json.Unmarshal([]byte(arg), &obj)
// can optionally log to stdout (or stderr)
fmt.Println("hello Go action")
name, ok := obj["name"].(string)
if !ok { name = "Stranger" }
// last line of stdout is the result JSON object as a string
msg := map[string]string{"msg": ("Hello, " + name + "!")}
res, _ := json.Marshal(msg)
fmt.Println(string(res))
}
Save the code above to a file sample.go
and cross compile it for OpenWhisk.
The executable must be called exec
.
GOOS=linux GOARCH=amd64 go build -o exec
zip exec.zip exec
wsk action create helloGo --native exec.zip
The action may be run as any other action.
wsk action invoke helloGo -r -p name gopher
{
"msg": "Hello, gopher!"
}
Find out more about parameters in the Working with parameters section.
Logs are retrieved in a similar way as well.
wsk activation logs --last --strip
my first Go action.