尝试在python lambda函数上使用boto连接到S3存储桶时超时

尝试在python lambda函数上使用boto连接到S3存储桶时超时,python,boto,aws-lambda,boto3,Python,Boto,Aws Lambda,Boto3,我试图编写一个相当简单的AWS lambda函数,它接收S3存储桶上的创建事件,对照数据库交叉引用该文件,如果发现该文件属于某种类型,则将其复制到另一个存储桶。通过配置我的VPC并为lambda函数中使用的角色分配适当的权限,我可以顺利导出包含pymysql并允许我与DB对话的部署文件。我真正感到困扰的是与S3的沟通。以下代码在超时前一直运行,直到打印“基本s3连接成功”。无论我将超时阈值设置为30秒还是5分钟,它都会超时 我已经尝试过手动创建连接,以及依赖lambda环境提供的环境变量来获得相

我试图编写一个相当简单的AWS lambda函数,它接收S3存储桶上的创建事件,对照数据库交叉引用该文件,如果发现该文件属于某种类型,则将其复制到另一个存储桶。通过配置我的VPC并为lambda函数中使用的角色分配适当的权限,我可以顺利导出包含
pymysql
并允许我与DB对话的部署文件。我真正感到困扰的是与S3的沟通。以下代码在超时前一直运行,直到打印“基本s3连接成功”。无论我将超时阈值设置为30秒还是5分钟,它都会超时

我已经尝试过手动创建连接,以及依赖lambda环境提供的环境变量来获得相同的结果。我的问题是否与使用
boto
而不是
boto3
有关

我该如何解决这个问题

干杯

亚伦


如果您在VPC中使用Lambda,则必须配置S3 VPC端点,或使用NAT网关。您能否快速向我解释如何为S3配置VPC端点?这对于RDS来说很简单,但对于S3,我昨天真的很难做到。非常有帮助,谢谢。我将等到一天结束再配置端点,因为它看起来可能会影响现有流程和S3资源之间的通信,但我非常确定这会满足我的需要@MarkB,如果你想写一个简短的回答,我会接受的。如果你在VPC中使用Lambda,你必须配置S3 VPC端点,或者使用NAT网关。你能快速向我解释如何为S3配置VPC端点吗?这对于RDS来说很简单,但对于S3,我昨天真的很难做到。非常有帮助,谢谢。我将等到一天结束再配置端点,因为它看起来可能会影响现有流程和S3资源之间的通信,但我非常确定这会满足我的需要@马克,如果你想把这个写下来作为一个简短的回答,我会接受的。
from __future__ import print_function

import os
import json
import urllib
import boto3

import boto
from boto.s3.key import Key
import pymysql

print(os.environ)

import credentials
CRM_HOST = credentials.CRM_HOST
CRM_USER = credentials.CRM_USER
CRM_PASS = credentials.CRM_PASS
AWS_ACCESS_KEY_ID = credentials.AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY = credentials.AWS_SECRET_ACCESS_KEY

try:
    conn = pymysql.connect(host=CRM_HOST, user=CRM_USER,\
        passwd=CRM_PASS, db='oro_crm')
    print('SQL connection successful')
except Exception, e:
    print('SQL connection failed')
    print(str(e))

try:
    # s3 = boto.connect_s3(aws_access_key_id=AWS_ACCESS_KEY_ID,\
    #     aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
    s3 = boto.connect_s3()
    print('base S3 connection successful')
    src = s3.get_bucket('s3-crm-dev')
    print('got ocr source bucket')
    dst = s3.get_bucket('s3-crm-input')
    print('got ocr input bucket')
    out_dst = s3.get_bucket('s3-crm-output')
    print('got ocr output bucket')