使用 pyaudio 的 AWS Lambda 函数

AWS Lambda function using pyaudio

我的梦想:)

我想将 pyaudio 用于将在 AWS Lambda 上 运行ning 的函数。但是,当 运行ning sam build --use-container

时出现 PythonPipBuilder:ResolveDependencies 错误

我的设置

我已经成功地构建了我的项目。

requirements.txt

pyaudio

app.py

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': 'Hello World'
    }

template.yaml(相关作品至少)

Resources:
  MyFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: my_app/
      Handler: app.lambda_handler
      Runtime: python3.6
      Events:
        MyEvent:
          Type: Api 
          Properties:
            Path: /test
            Method: get

我的问题

当 运行ning sam build --use-container --debug 我看到这个输出:

Traceback (most recent call last): File "/var/lang/lib/python3.6/site-packages/aws_lambda_builders/workflows/python_pip/actions.py", line 42, in execute requirements_path=self.manifest_path, File "/var/lang/lib/python3.6/site-packages/aws_lambda_builders/workflows/python_pip/packager.py", line 137, in build_dependencies self._dependency_builder.build_site_packages(requirements_path, artifacts_dir_path, scratch_dir_path) File "/var/lang/lib/python3.6/site-packages/aws_lambda_builders/workflows/python_pip/packager.py", line 201, in build_site_packages raise MissingDependencyError(packages_without_wheels) aws_lambda_builders.workflows.python_pip.packager.MissingDependencyError: {pyaudio==0.2.11(sdist)}

...

Build inside container returned response {"jsonrpc": "2.0", "id": 1, "error": {"code": 400, "message": "PythonPipBuilder:ResolveDependencies - {pyaudio==0.2.11(sdist)}"}}

我的理论

我的理论是这失败了,因为 PortAudio 没有安装在 运行ning sam build --use-container

时使用的 Docker 容器镜像中

如果我 运行 pip install -r requirements.txt 在我 安装了 PortAudio 的本地计算机上,一切都按预期工作。

我怀疑我需要以某种方式在 AWS Lambda 环境中安装 PortAudio...但是如何安装?图层?如果是这样,我从哪里得到我需要的二进制文件?

TL;DR;

如何在 AWS Lambda 环境中安装 PortAudio?

测试 lambda 的快速方法是在包含 lambda 代码的文件夹中安装包(例如 pyaudio),然后将其全部压缩并上传。查看更多信息 https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-dependencies

如果您在安装软件包时遇到任何问题,则可能是依赖性问题,您可能需要添加一层。

一旦你的 lambda 开始工作,你就可以删除它并使用 buildspec.yml 安装 python 包。 AWS 将在 运行 代码管道时安装这些包。更多详情 https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html