【问题标题】:Running Taurus BlazeMeter on AWS Lambda在 AWS Lambda 上运行 Taurus BlazeMeter
【发布时间】:2022-08-14 17:49:22
【问题描述】:

我正在尝试通过 AWS Lambda 运行带有 JMeter 脚本的 BlazeMeter Taurus 脚本。我希望有一种方法可以通过/tmp/bzt 中的本地安装运行 bzt,而不是在系统上寻找自 lambda 以来并不存在的 bzt 安装。

这是我的lambda_handler.py

import subprocess
import json


def run_taurus_test(event, context):
    
    subprocess.call([\'mkdir\', \'/tmp/bzt/\'])
    subprocess.call([\'pip\', \'install\', \'--target\', \'/tmp/bzt/\', \'bzt\'])
    
    # subprocess.call(\'ls /tmp/bzt/bin\'.split())

    subprocess.call([\'/tmp/bzt/bin/bzt\', \'tests/taurus_test.yaml\'])

    return {
        \'statusCode\': 200,
        \'body\': json.dumps(\'Executing Taurus Test hopefully!\')
    }

taurus_test.yaml 在通过 pip 正常安装 bzt 的计算机上进行测试时按预期运行,所以我知道问题不在于测试脚本。如果我从系统中卸载 bzt 并尝试使用以某个目录为目标的本地安装,则会出现与以下相同的回溯。

这是执行结果中的回溯:

Traceback (most recent call last):
File \"/tmp/bzt/bin/bzt\", line 5, in <module>
from bzt.cli import main
ModuleNotFoundError: No module named \'bzt\'

它在/tmp/bzt/bin/bzt 中技术上失败了,这是失败的可执行文件,我认为这是因为它没有使用本地/目标安装。

所以,我希望有一种方法可以告诉 bzt 使用 /tmp/bzt 中的目标安装,而不是在那里调用可执行文件,然后尝试将其传递给其他地方不存在的安装。如果 AWS Fargate 或 EC2 更适合于此,我们也非常感谢您提供反馈。

  • 可能有一个解决方案涉及将路径添加到sys.path,但是,您应该考虑将包安装为layer 并使用它。

标签: amazon-web-services aws-lambda blazemeter taurus


【解决方案1】:

根据bzt 包的大小,解决方案是:

  • 使用 Lambda Docker 最近的feature,这样,你在本地运行的就是你在 Lambda 上得到的。
  • 使用Lambda层(类似于Docker),该层作为btz模块在python目录中描述there
  • 打包 Lambda 时,不要上传简单的 Python 文件,而是创建一个包含以下两者的 ZIP 文件:/path/to/zip_root/lambda_handler.pypip install --target /path/to/zip_root

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多