如何在OpenWhisk上使用redis包运行Go函数?

时间:2018-02-21 01:57:43

标签: go ibm-cloud openwhisk

我在OpenWhisk(IBM Cloud Functions)上运行golang包时遇到了一些麻烦。

我在本地计算机上运行了以下内容,它没有任何问题("PermissionInvokeLambdaRule": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": { "Fn::GetAtt": ["MyLambdaResouce", "Arn"] }, "Action": "lambda:InvokeFunction", "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": ["MyEventsRuleResource", "Arn"] } } }, ):

<NoWarn>1591</NoWarn>

但我没有找到任何方法让它在OpenWhisk上工作。我运行了以下内容:

go run sample.go
  

“错误”:“该操作未返回字典。”

     

“2018-02-21T01:21:05.962244788Z stdout:[Errno 2]没有这样的文件或   目录:'/ action / exec'“

问题与package main import ( "fmt" "encoding/json" "github.com/go-redis/redis" ) func main() { var redisClient *redis.Client = redis.NewClient(&redis.Options{ Addr: "...", Password: "...", DB: 0, }) redisClient.Set("foo", "bar", 0) defer redisClient.Close() msg := map[string]string{"msg": ("Done !")} res, _ := json.Marshal(msg) fmt.Println(string(res)) } 包有关,当我删除它及其代码时,该函数运行良好。我遇到了GOOS=linux GOARCH=amd64 go build -o exec sample.go zip exec.zip exec bx wsk action update myfunction --native exec.zip bx wsk action invoke myfunction -r bx wsk activation logs --last --strip 包(MongoDB)...

的相同问题

我是Golang的新手所以很明显,但是现在我被卡住了:/

2 个答案:

答案 0 :(得分:3)

zip文件中的二进制文件动态链接到平台上不可用的共享库。

使用fileldd确认了这一点:

$ file exec 
exec: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, not stripped 
$ ldd exec
/lib64/ld-linux-x86-64.so.2 (0x7f3f63f10000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f3f63f10000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f3f63f10000)

在平台(openwhisk/dockerskeleton)使用的Docker镜像中构建静态二进制文件或构建动态链接二进制文件。

在执行此问题的文件时,file not found错误会产生误导,但会reported by bash

答案 1 :(得分:-1)

  

“错误”:“该操作未返回字典。”

这是一个打开的wsk错误消息。 这意味着您没有在stdout上返回字典

下面的

是返回json对象的有效返回值

  

{“错误”:“东西坏了!”}

以下将无效

  “有些东西坏了!”

建议:检查构建时是否有任何错误(通常) 你的Dropbox中的文件看起来不像二进制文件...我建议你检查一下你可以先构建二进制文件