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

如何在AWS Lambda日志中打印CLI Payload的执行结果?

问题:如何让Lambda执行传入的CLI命令并将结果输出到日志?

我通过aws lambda invoke的--payload参数传递一条CLI命令给Lambda函数my_func,但现在只能得到{"status":"OK"}的返回结果,想知道怎么把这条CLI命令的执行结果打印到Lambda的日志里。

当前使用的本地调用脚本如下:

set -x 
 ls
 aws sts get-caller-identity 
 aws lambda invoke \
    --function-name my_func \
    --cli-binary-format raw-in-base64-out \
    --payload '{"command":"/opt/awscli/aws sts decode-authorization-message --encoded-message '$1' --output text"}' \
    --output text \
    response.json

解决方案

1. 修改Lambda函数逻辑,捕获并输出命令执行结果

你的Lambda函数my_func目前只返回了状态,需要改成执行传入的命令、捕获输出、将结果写入日志的逻辑。以下是Python示例:

import subprocess
import json
import logging

# 配置日志级别
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    # 从payload中提取要执行的命令
    command = event.get('command')
    if not command:
        logger.error("未收到要执行的命令")
        return {"status": "ERROR", "message": "No command provided"}
    
    try:
        # 执行命令并捕获标准输出/错误
        result = subprocess.run(command, shell=True, capture_output=True, text=True)
        # 将输出写入Lambda日志
        logger.info(f"命令执行结果:\n{result.stdout}")
        if result.stderr:
            logger.error(f"命令执行错误:\n{result.stderr}")
        
        # 同时可以把结果返回给调用端
        return {"status": "OK", "stdout": result.stdout, "stderr": result.stderr}
    except Exception as e:
        logger.error(f"执行命令时发生异常:{str(e)}")
        return {"status": "ERROR", "message": str(e)}

2. 修复本地调用脚本的payload格式问题

原脚本中--payload的单引号嵌套可能导致shell解析异常,建议用文件传递payload避免转义问题:

set -x 
ls
aws sts get-caller-identity 
# 生成JSON格式的payload文件
echo "{\"command\":\"/opt/awscli/aws sts decode-authorization-message --encoded-message '$1' --output text\"}" > payload.json
# 用文件传递payload调用Lambda
aws lambda invoke \
    --function-name my_func \
    --cli-binary-format raw-in-base64-out \
    --payload file://payload.json \
    --output text \
    response.json

3. 查看Lambda日志

修改完成后,你可以通过两种方式查看日志:

  • 登录AWS控制台,进入Lambda函数页面,点击「监控」→「日志」查看CloudWatch日志
  • 使用AWS CLI命令实时查看:aws logs tail /aws/lambda/my_func --follow

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:39:56