繁体   English   中英

您使用哪个 Golang Lambda 处理程序来访问无服务器框架输入键值 Map?

Which Golang Lambda Handler do you use to access Serverless Framework Input Key Value Map?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我从另一个问题复制了多个示例,以尝试使用无服务器框架将输入参数传递给 AWS Lambda GoLang function。 function 定义如下:

functions:
  schedule:
    handler: bin/schedule
    package:
      artifact: bin/schedule.zip
    events:
      - schedule:
          rate: rate(1 minute)
          enabled: true
          input:
            key: first
      - schedule:
          rate: rate(1 minute)
          input: '{"key": "second"}'
          enabled: true
      - schedule:
          rate: rate(1 minute)
          input:
            key: 'third'
          enabled: true

但是标准的 Lambda Context 似乎没有传递我正在寻找的任何input值。

那么在调用 function 时,我应该使用哪个 lambda 处理程序 function 来访问firstsecondthird值?

我正在尝试通过schedule function 运行多个 CRON 作业,并且我希望能够区分每晚、每月和每年的作业。 我想使用input无服务器参数来区分调用。

这是我到目前为止所拥有的:

func Handler(ctx context.Context) error {
    fmt.Println(fmt.Sprintf("ctx is [%+v]", ctx))
    fmt.Println(fmt.Sprintf("ctx value is [%+v]", ctx.Value("schedule")))
    lambdaContext, exists := lambdacontext.FromContext(ctx)
    if exists {
        fmt.Println(fmt.Sprintf("lambdaContext is [%+v]", lambdaContext))
        fmt.Println(fmt.Sprintf("lambdaContext.ClientContext is [%+v]", lambdaContext.ClientContext))
        fmt.Println(fmt.Sprintf("lambdaContext.ClientContext.Client is [%+v]", lambdaContext.ClientContext.Client))
        fmt.Println(fmt.Sprintf("lambdaContext.ClientContext.Custom  is [%+v]", lambdaContext.ClientContext.Custom))
        fmt.Println(fmt.Sprintf("lambdaContext.ClientContext.Env is [%+v]", lambdaContext.ClientContext.Env))

    } else {
        fmt.Println("no lambda context")
    }
    return nil
}

这是它产生的 output:

2022-09-27T11:39:16.137-05:00   ctx is [context.Background.WithDeadline(2022-09-27 16:39:22.135397493 +0000 UTC [5.998625784s]).WithValue(type *lambdacontext.key, val <not Stringer>).WithValue(type string, val Root=1-63332733-1ebfc3d83a8de600668c194d;Parent=28a5686a7181409c;Sampled=0)]

2022-09-27T11:39:16.137-05:00   ctx value is [<nil>]

2022-09-27T11:39:16.137-05:00   lambdaContext is [&{AwsRequestID:914686cf-e4eb-4e04-a0d8-58f5ea60247b InvokedFunctionArn:arn:aws:lambda:us-east-2:631520639713:function:laguna-seca-staging-schedule Identity:{CognitoIdentityID: CognitoIdentityPoolID:} ClientContext:{Client:{InstallationID: AppTitle: AppVersionCode: AppPackageName:} Env:map[] Custom:map[]}}]

2022-09-27T11:39:16.137-05:00   lambdaContext.ClientContext is [{Client:{InstallationID: AppTitle: AppVersionCode: AppPackageName:} Env:map[] Custom:map[]}]

2022-09-27T11:39:16.137-05:00   lambdaContext.ClientContext.Client is [{InstallationID: AppTitle: AppVersionCode: AppPackageName:}]

2022-09-27T11:39:16.137-05:00   lambdaContext.ClientContext.Custom is [map[]]

2022-09-27T11:39:16.137-05:00   lambdaContext.ClientContext.Env is [map[]]

如您所见,没有提到firstsecondthird 我希望能够在.Env .Custom中看到值,但它们都是空的。

1 个回复

好吧,几个小时后我终于想通了。 如果您想了解更多关于此的信息,这是我的思考过程。

  1. 谷歌搜索
  2. 相应的帮助结果: 无服务器事件常量输入
  3. 它引用的用于将 static JSON 发送到您的 Lambda 事件的AWS 文章

Once I saw that it was trigged by CloudWatch to have manual JSON that got me thinking that I need to have a value of json or string or map in one of the AWS Lambda GoLang Event handlers . 问题是没有一个 cloudwatch 事件正确解组了我需要的值。 这让我想到:为什么不试试我自己的处理程序 function 的值呢? 这是AWS Lambda GoLang 处理程序文档中批准的处理程序调用之一。 所以我创建了我自己的 object 并且效果很好。 这是每晚和每月 CRON 计划的无服务器框架 AWS Lambda GoLang function 的最终实现:

无服务器。yaml:

functions:
  ...
  schedule:
    handler: bin/schedule
    package:
      artifact: bin/schedule.zip
    events:
      - schedule:
          rate: rate(1 day)
          input:
            key: 'nightly'
          enabled: true
      - schedule:
          rate: rate(30 days)
          input:
            key: 'monthly'
          enabled: true
   ...

main.go:

package main

import (
    ...
)

func init() {
    // connect to your database here
}

func main() {
    lambda.Start(Handler)
}

type MyObject struct {
    Key string `json:"key"`
}

func Handler(_ context.Context, myObject MyObject) error {
    fmt.Println(fmt.Sprintf("event is [%+v]", myObject))
    return nil
}

并在调用时打印: nightly按分钟计划, monthly按小时计划。

2 AWS Lambda 的导出处理程序 function 与无服务器框架

我创建了一个处理程序 function应该可以通过无服务器设置中的 API 网关(getRecommendation)访问到目前为止,我已经通过 这工作得很好出于测试目的,我想让这个 function 也可供 Jest 访问,并定义了一个不同的导出语句,从我的角度来看,它应该以相同的方式工作: 但是 ...

4 使用无服务器框架,如何定义驻留在相对于父目录相对的目录中的函数处理程序

我正在使用针对AWS Lambda的无服务器框架。 我的用例是这样的: 我想引用自定义授权者的通用处理程序 我不希望额外花费维护单独的软件包或git子存储库 我不想使用符号链接,因为这需要为下一个使用此存储库的开发人员设置额外的步骤,并提供额外的文档 我还 ...

6 您使用哪个JavaScript的BDD框架?

我正在使用ExtJS框架开发大型应用程序。 因为它增长得太快,我意识到这可能是开始做测试的时候了。 我想选择BDD技术,我发现了几个用于JavaScript的BDD框架(Screw.Unit,JSpec,JSSpec),但我仍然不确定选择哪一个。 有一些关于这个主题的文章,但我对你自己 ...

7 Golang map 值未由键检索

需要确保我不会在这里发疯。 记录实例 map 按预期显示 map 但是从 map 检索值不起作用,如下所示。 serverStates 初始化为: serverStates: make(map[string](string)) Function: 控制台 Output: 有人可以解释为什么sv. ...

2020-05-26 12:55:32 1 44   go/ maps
9 使用 lambda 表达式通过可选键访问映射中的值

我需要从地图M&lt;X,Y&gt;访问一个值M&lt;X,Y&gt;并且我有一个Optional&lt;X&gt; key类型的Optional&lt;X&gt; key 。 我需要使用 lambda 表达式,以便我可以检查键是否存在,如果存在,则使用它访问值,否则返回空。 我在做: retur ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM