在lambda执行函数的开头连接到必需的AWS资源之后,我有一个lambda_handler
函数,如下所示:
def lambda_handler(event, context, dst):
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key'].encode('utf8'))
print('Bucket: %s' % bucket)
print('Object key: %s' % key)
crm_file_name = key.split('/')[-1]
crm_query = make_crm_db_query(crm_file_name)
cur = conn.cursor()
status = cur.execute(crm_query)
if status == 1:
details = cur.fetchone()
opportunity_id = details[0]
tmp = dst.get_key('%s/%s' % (opportunity_id, crm_file_name))
print('starting API request...')
s = requests.Session()
r = s.post('http://link/to/endpoint/',\
files={'pdf': tmp}, data={'opportunity_id': opportunity_id})
print(r)
print(r.content)
else:
print('not the right file type')
在我的开发环境中,这将返回以下结果,表示发布成功:
^{pr2}$但是,在AWS Cloud Watch日志中,当尝试执行post请求时,进程会挂起。下面是一个日志示例:
starting API request...
END RequestId: beedb0c4-ce07-11e6-a715-53b3bd8edccc
REPORT RequestId: beedb0c4-ce07-11e6-a715-53b3bd8edccc Duration: 30002.89 ms Billed Duration: 30000 ms Memory Size: 128 MB Max Memory Used: 22 MB
2016-12-29T20:46:24.356Z beedb0c4-ce07-11e6-a715-53b3bd8edccc Task timed out after 30.00 seconds
S3 bucket、API endpoint、RDS都属于同一个VPC。该过程在dev中工作,但在生产中挂起。关于如何调试这个有什么建议吗?在
我检查了this post,它说连接到外部internet资源需要一个NAT网关,但是我们的API端点运行在同一VPC内的EC2实例上。AWS是否认为我们仍在尝试建立一个外部连接,因为我们正在处理API调用?如何调试这个?在
我遇到了相同的timeout problem,原因如下。在
AWS document:
马克B的评论是对的。在
我建议您可以按照这个blog来构建NAT。在
相关问题 更多 >
编程相关推荐