【问题标题】:AWS lambda function errorAWS lambda 函数错误
【发布时间】:2017-08-03 09:48:25
【问题描述】:

我已经使用 python 函数创建了一个部署包,以使用 AWS Lambda 创建一个 google drive 文件夹。然后我尝试测试它,我得到一个错误:

    {
  "errorMessage": "main() takes from 0 to 1 positional arguments but 2 were given",
  "errorType": "TypeError",
  "stackTrace": [
    [
      "/var/runtime/awslambda/bootstrap.py",
      249,
      "handle_event_request",
      "result = request_handler(json_input, context)"
    ]
  ]
}

我的 .zip 中有 2 个主要文件。第一个文件包含主要功能,另一个文件具有安全凭证,另一个文件夹和文件是 lib。名为 lambda_function.py 的主文件,代码为:

from __future__ import print_function

import httplib2
import os

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

try:
    import argparse

    flags=argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags=None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/drive-python-quickstart.json
SCOPES='https://www.googleapis.com/auth/drive.file'
CLIENT_SECRET_FILE='client_secret.json'
APPLICATION_NAME='Drive API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir=os.path.expanduser('~')
    credential_dir=os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path=os.path.join(credential_dir,
                                 'drive-python-quickstart.json')

    store=Storage(credential_path)
    credentials=store.get()
    if not credentials or credentials.invalid:
        flow=client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent=APPLICATION_NAME
        if flags:
            credentials=tools.run_flow(flow, store, flags)
        print('Storing credentials to ' + credential_path)
    return credentials

def main(drive_service=None):
    """Shows basic usage of the Google Drive API.

    Creates a Google Drive API service object and outputs the names and IDs
    for up to 10 files.
    """
    credentials=get_credentials()
    http=credentials.authorize(httplib2.Http())
    service=discovery.build('drive', 'v3', http=http)

    file_metadata={
        'name': 'Invoices',
        'mimeType': 'application/vnd.google-apps.folder'
    }
    file=service.files().create(body=file_metadata,
                                      fields='id').execute()
    print('Folder ID: %s' % file.get('id'))

if __name__ == '__main__':
    main()

我在 AWS Lambda 中的处理程序是 lambda_function.main ,如果我尝试测试我会收到错误。如果我在控制台上执行此操作,我会成功执行此代码并在 google drive api 中创建一个文件夹。所以也许谁知道我做错了什么?请帮忙。

【问题讨论】:

    标签: python amazon-web-services lambda google-drive-api aws-lambda


    【解决方案1】:

    AWS Lambda 处理程序有两个参数事件和上下文,例如:

    def lambda_handler(event, context):
    

    【讨论】:

    • 感谢您的回复,看,现在我修复了它,但我得到了下一个错误,“errorMessage”:“模块初始化错误”,在日志中它看起来像:模块初始化错误:[Errno 30] 阅读-only 文件系统:'/home/sbx_user1078'
    • 你需要用你正在使用的库创建一个部署包,阅读:docs.aws.amazon.com/lambda/latest/dg/…
    • 我已经创建了它!所有模块都在 .zip 文件中。我使用 virualenv 创建它,步骤是: 1. virtualenv -p /usr/bin/python3.5 google 2. 安装 google drive api 模块: pip install --upgrade google-api-python-client 3. 添加到 zip 文件站点包中的所有模块
    • 错误:[Errno 30] 只读文件系统:我不确定,但这可能是 tmp 路径的问题,请阅读此处:stackoverflow.com/questions/39383465/…
    猜你喜欢
    • 2018-07-11
    • 2018-06-09
    • 2020-09-03
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多