You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda无返回值问题:Slack交互式响应场景排查

AWS Lambda处理Slack交互式响应无返回日志问题排查

我在开发Slack应用时,用AWS Lambda处理Slack的交互式响应(要求3秒内返回结果)。代码里用Event类型调用另一个Lambda,并且明确返回return {"statusCode": 200},但CloudWatch日志里看不到返回值记录——Lambda执行无异常,就是找不到返回内容。

主Lambda函数代码

import logging
from urllib.parse import parse_qs

import utils.slack.client as slack
from functions.flows.update_zendesk_ticket import pass_to_pso
from lambda_warmer.lambda_warmer import lambda_warmup

from utils.common import invoke_lambda, PSO_NOC_ALERTS

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


@lambda_warmup()
def lambda_handler(event, context):
    logger.info(f'this is the event: {event}')
    logger.info(f'this is the context: {context}')
    params = dict(parse_qs(event['body'], keep_blank_values=False))
    if "payload" in params:
        payload = eval(params["payload"][0].replace('false', 'False').replace('null', 'None').replace('true', 'True'))
        if payload["type"] == "message_action":
            logger.info(f'{payload["user"]["username"]} clicked on {payload["view"]["callback_id"]}')
        elif payload["type"] == "view_submission":
            logger.debug(payload)
            logger.info(f'{payload["user"]["username"]} submitted {payload["view"]["callback_id"]}')
            submitted_data = payload["view"]["state"]["values"]
            logger.info(submitted_data)
            if payload["view"]["callback_id"] == "pass_to_pso":
                result = pass_to_pso_handler(submitted_data)
                return result
    return {"statusCode": 200}


def pass_to_pso_handler(submitted_data):
    pso_slack_id = submitted_data["pso"]["pso_select-action"]["selected_user"]
    slack_client = slack.SlackClient()
    pso_email = slack_client.get_email_from_slack(pso_slack_id)
    zd_ticket_id = submitted_data["ticket_id"]["ticket_id-action"]["value"]
    thread_link = submitted_data["thread_link"]["thread_link-action"]["value"]
    reply_language = submitted_data["reply_language"]["reply_language-action"]["selected_option"][
        "value"]
    reply_type = submitted_data["reply_type"]["reply_type-action"]["selected_option"]["value"]
    pass_to_pso(pso_email=pso_email, ticket_id=zd_ticket_id, thread_link=thread_link,
                reply_language=reply_language, reply_type=reply_type)
    pso_name = pso_email.split('@')[0]
    invoke_lambda({
        "pso": pso_name,
        "ticket id": zd_ticket_id,
        "channel_id": PSO_NOC_ALERTS
    }, "Event")
    return {"statusCode": 200}

Lambda调用工具函数代码

def invoke_lambda(payload, invocation_type):
    client = boto3.client('lambda', 'us-east-1')
    response = client.invoke(
        FunctionName=SLACK_MESSAGE_LAMBDA,
        InvocationType=invocation_type,
        Payload=bytes(json.dumps(payload), encoding='utf8'))

CloudWatch日志截图

CloudWatch日志截图

问题原因及解决办法

  • Lambda默认不记录返回值:AWS Lambda不会自动把函数返回值写入CloudWatch日志,只有通过logger显式输出的内容才会被记录。你代码里仅返回了响应对象,但没打印它,所以日志里看不到。
  • 添加日志语句输出返回值:在两个返回响应的位置,先打印再返回,比如:
    在lambda_handler末尾修改为:
    response = {"statusCode": 200}
    logger.info(f"主函数返回响应: {response}")
    return response
    
    在pass_to_pso_handler末尾修改为:
    response = {"statusCode": 200}
    logger.info(f"Pass-to-PSO处理函数返回响应: {response}")
    return response
    
  • 异步调用额外提醒:用Event类型调用的Lambda是异步执行,主函数不会等待其完成,若被调用Lambda出问题,需单独查看它的CloudWatch日志,这和当前返回值日志缺失无关,但需注意排查逻辑。
  • 确认日志级别:当前日志级别设为DEBUG,info级别的打印会被记录,后续若调整日志级别,要确保返回值的日志语句级别不会被过滤。

内容的提问来源于stack exchange,提问作者Tomer Oszlak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:50:24