【发布时间】:2019-04-21 17:09:19
【问题描述】:
我正在尝试从 AWS lambda 中的 s3 下载文件。
有一个将 s3 元数据(密钥、存储桶)推送到 SQS 的 Web 服务。我有一个 lambda 下载文件并将其内容推送到 elasticsearch。这是我的代码:
import config
def push_data(event, context):
try:
_push_data(event, context)
except Exception as e:
print("Exception raised %s" % e)
def _push_data(event, context):
files_data = get_files_data(event)
for file_data in files_data:
is_success, data = push_file(
index=file_data["index"], file_bucket=file_data["file_bucket"],
file_key=file_data["file_key"]
)
if is_success:
call_post_push(file_data[0], data)
def push_file(index, file_bucket, file_key):
start_time = datetime.datetime.now()
print("I have started downloading %s" % start_time)
file_path = '/tmp/a.xlsx'
# download file from s3
client = boto3.client(
's3',
aws_access_key_id=config.AWS_ACCESS_KEY_ID,
aws_secret_access_key=config.AWS_SECRET_ACCESS_KEY,
)
client.download_file(Bucket=file_bucket, Key=file_key, Filename=file_path)
#
# contains code to push file contents to s3
print("Finished")
当 lambda 执行时,它会在打印 I have started downloading .. 后超时。
- Lambda 位于配置了 NAT 网关的 vpc 中。
- Lambda 有权访问 s3。
- 我从中下载文件的 s3 存储桶与 lambda 位于不同的区域。不过我认为这不会引起任何问题。
- 我将超时时间增加到 5 分钟。对于该功能,以便在文件很大的情况下,我不会遇到任何问题
- 我先上传了一个小文件,保证下载时间不会很大。
- 我在本地机器上运行了相同的代码,看看下载是否没有问题。事实证明,下载我正在使用 Lambda 测试的文件不超过 1 秒。
做以上所有事情都没有帮助。请让我知道如何解决这个问题,或者我是否需要检查其他任何事情。
【问题讨论】:
标签: python amazon-web-services amazon-s3 aws-lambda amazon-sqs