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

在AWS Lambda运行Stockfish引擎遇权限拒绝错误,求解决方法

解决AWS Lambda运行Stockfish的权限拒绝问题

1. 修复文件复制逻辑:用shutil.copy替代shutil.copytree

你的代码错误使用了shutil.copytree(用于复制目录)来处理单个可执行文件,这会导致/tmp下生成的不是可执行文件而是目录,直接触发权限拒绝。修改复制逻辑:

# 替换原copytree行
shutil.copy(stockfish_path, stockfish_new_path)

2. 确保复制后的文件拥有执行权限

复制完成后,明确为文件添加执行权限(重点是执行位,0o755比0o777更安全):

os.chmod(stockfish_new_path, 0o755)

3. 检查Stockfish版本与Lambda运行时架构匹配

  • Lambda默认采用x86_64架构,确认你使用的stockfish_14_x64_avx2是对应x86_64的版本;
  • 如果你的Lambda使用ARM架构(Graviton2),必须下载ARM版本的Stockfish,否则会因架构不兼容触发类似权限拒绝的错误。

4. 本地打包时预先设置可执行权限

在本地打包Lambda代码前,先给Stockfish文件添加执行权限:

chmod +x stockfish_14_x64_avx2

打包后上传到Lambda,此时/var/task下的文件本身就有执行权限,甚至可以直接在/var/task运行,无需复制到/tmp。

完整修正后的示例代码

import os, shutil
import json
from stockfish import Stockfish

stockfish_path = '/var/task/stockfish_14_x64_avx2'
stockfish_new_path = '/tmp/stockfish_14_x64_avx2'

def lambda_handler(event, context):
    # 复制单个文件而非目录
    shutil.copy(stockfish_path, stockfish_new_path)
    # 设置可执行权限
    os.chmod(stockfish_new_path, 0o755)

    stockfish = Stockfish(path=stockfish_new_path)

    position = "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2"
    stockfish.set_fen_position(position)

    best_move = stockfish.get_best_move()

    return {
        "statusCode": 200,
        "body": json.dumps({"best_move": best_move})
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:25:01