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

SharePoint上传文件时如何触发AWS Lambda同步至S3(事件驱动)?

事件驱动同步SharePoint文件到AWS S3(无定时调度)

方案一:通过Power Automate触发Lambda

这是最快速的实现方式,无需额外搭建中间服务:

  • 创建Power Automate云流,触发规则选择「当文件创建或修改时(属性仅)」,绑定目标SharePoint站点和文档库
  • 添加「获取文件内容」动作,拉取刚上传文件的二进制数据
  • 配置AWS连接器(需提前关联AWS账号),添加「调用AWS Lambda」动作,传入文件名、文件内容等参数
  • Lambda代码处理传入的文件内容并上传到S3,示例Python代码:
import boto3
import base64

s3 = boto3.client('s3')
TARGET_BUCKET = 'your-bucket-name'

def lambda_handler(event, context):
    file_name = event['FileName']
    decoded_content = base64.b64decode(event['FileContent'])
    
    s3.put_object(
        Bucket=TARGET_BUCKET,
        Key=file_name,
        Body=decoded_content
    )
    return {"statusCode": 200, "message": "Sync completed"}
  • 权限配置:确保Lambda执行角色拥有s3:PutObject权限,AWS连接器拥有调用该Lambda的权限

方案二:Microsoft Graph Webhooks + API Gateway触发Lambda

适合需要自定义事件处理逻辑的场景:

  1. 在Azure AD注册应用,获取CLIENT_ID、CLIENT_SECRET、TENANT_ID,授予应用Sites.Read.All应用权限并完成管理员同意
  2. 通过Microsoft Graph API注册Webhook订阅,指定目标文档库的文件创建事件,回调URL设为AWS API Gateway的端点
  3. 配置API Gateway,将POST请求转发到Lambda,同时处理Webhook的验证请求(返回传入的validationToken)
  4. Lambda收到事件后,调用Graph API获取文件内容并上传到S3,示例核心代码:
import boto3
import requests
import os

s3 = boto3.client('s3')
TARGET_BUCKET = 'your-bucket-name'
GRAPH_TOKEN_URL = f"https://login.microsoftonline.com/{os.environ['TENANT_ID']}/oauth2/v2.0/token"

def get_graph_token():
    payload = {
        'client_id': os.environ['CLIENT_ID'],
        'client_secret': os.environ['CLIENT_SECRET'],
        'scope': 'https://graph.microsoft.com/.default',
        'grant_type': 'client_credentials'
    }
    res = requests.post(GRAPH_TOKEN_URL, data=payload)
    return res.json()['access_token']

def lambda_handler(event, context):
    # 处理Webhook验证
    if 'validationToken' in event.get('queryStringParameters', {}):
        return {
            'statusCode': 200,
            'body': event['queryStringParameters']['validationToken']
        }
    
    # 解析事件中的文件ID
    file_id = event['body']['value'][0]['resourceData']['id']
    token = get_graph_token()
    
    # 获取文件内容
    file_res = requests.get(
        f"https://graph.microsoft.com/v1.0/sites/root/drives/items/{file_id}/content",
        headers={'Authorization': f'Bearer {token}'}
    )
    file_name = file_res.headers['Content-Disposition'].split('filename=')[1].strip('"')
    
    # 上传到S3
    s3.put_object(Bucket=TARGET_BUCKET, Key=file_name, Body=file_res.content)
    return {"statusCode": 200, "message": "Sync completed"}
  • 注意:Webhook订阅默认有效期3天,需在Lambda中添加续期逻辑;确保API Gateway配置正确的CORS规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:10:25