尝试在python lambda函数上使用boto连接到S3存储桶时超时
我试图编写一个相当简单的AWS lambda函数,它接收S3存储桶上的创建事件,对照数据库交叉引用该文件,如果发现该文件属于某种类型,则将其复制到另一个存储桶。通过配置我的VPC并为lambda函数中使用的角色分配适当的权限,我可以顺利导出包含尝试在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环境提供的环境变量来获得相
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')