6

本教程展示了如何通过传递单个参数的 CodePipeline 调用 Lambda:

http://docs.aws.amazon.com/codepipeline/latest/userguide/how-to-lambda-integration.html

我已经构建了一个需要获取 2 个参数的 slackhook lambda:

  • webhook_url
  • 信息

通过 CodePipeline 编辑器传入 JSON 会导致 JSON 块以“ ”形式发送,因此无法直接解析。

传入的用户参数:

{
  "webhook":"https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho",
  "message":"Staging build awaiting approval for production deploy"
}

事件负载中的用户参数

UserParameters: '{
  "webhook":"https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho",
  "message":"Staging build awaiting approval for production deploy"
}'

当尝试像这样直接在 CLoudFormation 中应用多个 UserParameters 时:

Name: SlackNotification
  ActionTypeId:
    Category: Invoke
    Owner: AWS
    Version: '1'
    Provider: Lambda
  OutputArtifacts: []
  Configuration:
    FunctionName: aws-notify2
    UserParameters:
       - webhook: !Ref SlackHook
       - message: !Join [" ",[!Ref app, !Ref env, "build has started"]]
  RunOrder: 1

创建错误 - 配置只能包含简单的对象或字符串。

任何关于如何将多个 UserParameters 从 CloudFormation 模板传递到 Lambda 的猜测都将不胜感激。

这是供参考的 lambda 代码: https ://github.com/byu-oit-appdev/aws-codepipeline-lambda-slack-webhook

4

1 回答 1

10

您应该能够将多个UserParameters作为单个 JSON 对象字符串传递,然后在收到时在您的 Lambda 函数中解析 JSON。

这正是文档中的Python 示例处理这种情况的方式:

try:
    # Get the user parameters which contain the stack, artifact and file settings
    user_parameters = job_data['actionConfiguration']['configuration']['UserParameters']
    decoded_parameters = json.loads(user_parameters)

同样,JSON.parse在 Node.JS 中使用应该可以很好地将 JSON 对象字符串(如您的事件有效负载示例中所示)解析为可用的 JSON 对象:

> JSON.parse('{ "webhook":"https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho", "message":"Staging build awaiting approval for production deploy" }')
{ webhook: 'https://hooks.slack.com/services/T0311JJTE/3W...W7F2lvho',
  message: 'Staging build awaiting approval for production deploy' }
于 2017-01-26T17:31:15.823 回答