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

如何构建含文件内容的AWS Lambda调用Payload?

在AWS Lambda中直接调用处理PDF的目标Lambda

核心逻辑

目标Lambda会对event['body']进行Base64解码后存储内容,所以你需要完成三步:从S3读取PDF二进制内容 → 将其转为Base64字符串 → 构造符合目标Lambda要求的Event Payload并调用。

完整代码示例

import boto3
import base64
import os

# 初始化AWS客户端
s3_client = boto3.client('s3')
lambda_client = boto3.client('lambda')

def lambda_handler(event, context):
    # 从环境变量读取配置(避免硬编码)
    bucket_name = os.environ.get('PDF_STORAGE_BUCKET')
    pdf_key = os.environ.get('TARGET_PDF_KEY')
    target_lambda_id = os.environ.get('TARGET_LAMBDA_ARN')

    # 1. 从S3拉取PDF二进制文件
    try:
        s3_response = s3_client.get_object(Bucket=bucket_name, Key=pdf_key)
        pdf_binary = s3_response['Body'].read()
    except Exception as e:
        return {
            'statusCode': 500,
            'body': f'读取S3文件失败: {str(e)}'
        }

    # 2. 将二进制PDF转为Base64字符串(匹配目标Lambda的解码逻辑)
    pdf_base64 = base64.b64encode(pdf_binary).decode('utf-8')

    # 3. 构造目标Lambda的输入Event
    # 若目标Lambda是API Gateway触发的,需对齐APIGatewayProxyEvent结构
    invoke_payload = {
        'body': pdf_base64,
        'httpMethod': 'POST',
        'headers': {
            'Content-Type': 'application/pdf'
        }
        # 可根据目标Lambda的实际需求补充其他字段,比如path、requestContext等
    }

    # 4. 调用目标Lambda
    try:
        lambda_response = lambda_client.invoke(
            FunctionName=target_lambda_id,
            InvocationType='RequestResponse',  # 同步调用,按需改为Event实现异步
            Payload=str(invoke_payload).encode('utf-8')
        )

        # 解析目标Lambda的返回结果
        response_content = lambda_response['Payload'].read().decode('utf-8')
        return {
            'statusCode': 200,
            'body': f'调用成功,目标Lambda返回: {response_content}'
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': f'调用目标Lambda失败: {str(e)}'
        }

关键注意事项

  • 权限配置:当前Lambda的执行角色必须具备:
    • s3:GetObject权限(针对存储PDF的S3桶)
    • lambda:InvokeFunction权限(针对目标Lambda的ARN)
  • 环境变量设置:在Lambda控制台配置PDF_STORAGE_BUCKET、TARGET_PDF_KEY、TARGET_LAMBDA_ARN三个环境变量,避免代码硬编码敏感信息。
  • Event结构匹配:如果目标Lambda原本由API Gateway触发,要确保构造的invoke_payload包含它依赖的字段(比如httpMethod、特定请求头),否则可能导致目标Lambda处理逻辑出错。
  • 调用模式选择:若不需要等待执行结果,可将InvocationType改为Event实现异步调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:35:22