【问题标题】:Kong lambda plugin - Correlation id being droppedKong lambda 插件 - 关联 ID 被删除
【发布时间】:2021-05-05 14:14:16
【问题描述】:

所以我使用 kong 作为 API 网关。我在 aws 返回标头上有一个简单的 lambda 函数。我能够看到来自 aws lambda 函数的响应,但是没有相关 ID。我已将相关 ID 插件设置为全局。希望澄清一下为什么 lambda 插件没有在原始响应的标头中添加相关 ID。

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify(event.request_headers),
    };
    return response;
};

我的 kong.yaml

_format_version: "1.1"
routes:
- name: lambda1
  paths:
  - /lambda1
  path_handling: v0
  preserve_host: false
  protocols:
  - http
  - https
  regex_priority: 0
  strip_path: true
  https_redirect_status_code: 426
  plugins:
  - name: aws-lambda
    config:
      aws_key: XXXXXXXXXXXXXXXXXXXXXXX
      aws_region: us-east-1
      aws_secret: XXXXXXXXXXXXXXXXXXXXXXXXx
      awsgateway_compatible: false
      forward_request_body: true
      forward_request_headers: true
      forward_request_method: false
      forward_request_uri: false
      function_name: kong-lambda-plugin
      host: null
      invocation_type: RequestResponse
      is_proxy_integration: false
      keepalive: 60000
      log_type: Tail
      port: 443
      proxy_scheme: null
      proxy_url: null
      qualifier: null
      skip_large_bodies: true
      timeout: 60000
      unhandled_status: null
    enabled: true
    protocols:
    - grpc
    - grpcs
    - http
    - https
plugins:
- name: correlation-id
  config:
    echo_downstream: false
    generator: uuid#counter
    header_name: correlation-id
  enabled: true
  protocols:
  - grpc
  - grpcs
  - http
  - https

【问题讨论】:

  • 你能分享一个最小的配置来检查你做了什么吗?
  • 我添加了我的kong.yaml,我的假设是aws lambda插件的优先级在correlation-id插件之前
  • 不要分享你的秘密

标签: aws-lambda kong


【解决方案1】:

所以对我有用的是

https://github.com/Kong/priority-updater

  1. 我创建了上面脚本生成的 .rock 文件。
  2. 由于我使用的是 Kong 的 docker 化版本,因此我将文件复制到了 Kong docker 主机。
  3. 使用 luarocks 命令在我的 Kong docker 主机中安装了插件。
  4. 将插件添加到我的“kong.conf”文件中。
  5. 将其添加到 lambda 路线中,效果很好。

【讨论】:

    【解决方案2】:

    你是对的,问题来自插件优先级

    CorrelationIdHandler.PRIORITY = 1
    AWSLambdaHandler.PRIORITY = 750
    

    Aws Lambda 插件正在中断插件链,就像它在处理程序阶段所做的那样

      return kong.response.exit(status, content, headers)
    

    所以其他插件无法使用。

    您可以创建一个自定义的 correlationId 插件并更改 PRIORITY 有一个工具可以为您处理 https://github.com/Kong/priority-updater

    您还可以创建一个路由来添加关联 id,调用另一个路由进行 lambda 调用

    【讨论】:

    • 啊,谢谢,这是有道理的。我会试一试,然后告诉你进展如何!
    • 成功了!所以我使用了priority-updater来更新correlation-id插件。它执行得很漂亮。谢谢
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2015-05-26
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多