Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 已将压缩的S3数据存储到ElasticSearch Aws_Amazon Web Services_Amazon S3_<img Src="//i.stack.imgur.com/A3TTx.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">amazon Elasticsearch - Fatal编程技术网 amazon-elasticsearch,Amazon Web Services,Amazon S3,amazon Elasticsearch" /> amazon-elasticsearch,Amazon Web Services,Amazon S3,amazon Elasticsearch" />

Amazon web services 已将压缩的S3数据存储到ElasticSearch Aws

Amazon web services 已将压缩的S3数据存储到ElasticSearch Aws,amazon-web-services,amazon-s3,amazon-elasticsearch,Amazon Web Services,Amazon S3,amazon Elasticsearch,我一直在研究如何将压缩的S3数据移动到Elasticsearch。在Aws网站上有一些信息,您可以创建一个lambda,将文件解压并重新上传,然后将其移动到ES。现在,由于我没有太大的数据集,我正在将数据下载到本地计算机中,并以正确的格式发送到ElasticSearch。这两种方法似乎效率都很低,我想知道是否有办法解压文件,然后将其移动到Elasticsearch,而不下载或重新上传数据 现在这是我的代码: s3 = boto3.resource('s3') s3.Bucket(bucket).

我一直在研究如何将压缩的S3数据移动到Elasticsearch。在Aws网站上有一些信息,您可以创建一个lambda,将文件解压并重新上传,然后将其移动到ES。现在,由于我没有太大的数据集,我正在将数据下载到本地计算机中,并以正确的格式发送到ElasticSearch。这两种方法似乎效率都很低,我想知道是否有办法解压文件,然后将其移动到Elasticsearch,而不下载或重新上传数据

现在这是我的代码:

s3 = boto3.resource('s3')
s3.Bucket(bucket).download_file(key, 'download_path')
ip_pattern = re.compile('(\d+\.\d+\.\d+\.\d+)')
time_pattern = re.compile('\[(\d+\/\w\w\w\/\d\d\d\d:\d\d:\d\d:\d\d\s\+\d\d\d\d)\]')
message_pattern = re.compile('\"(.+)\"')

with gzip.open('download_path') as files:
    data = ""

    document = {}
    for line in files:
        line = line.decode("utf-8") # decode byte to str

        ip = ip_pattern.search(line).group(0)
        timestamp = time_pattern.search(line).group(0)
        message = message_pattern.search(line).group(0)

        document = { "ip": ip, "timestamp": timestamp, "message": message }
如果没有更好的方法,我将使用上面的代码

在Aws网站上,有可以创建lambda的信息 解压文件并重新上传,然后将其移动到ES

您不需要将分解后的数据重新上传回S3,除非出于其他目的需要

在最大lambda执行时间内,无法将从zip提取的文件中的数据解压缩和索引发送到elasticcache

我相信提取它们并将其推到单独的S3存储桶的原因可能是在lamda的一次执行中扫描一个存储桶,使其成为逻辑执行单元,这将适合lambda的最大可用执行时间


elasticsearch实例在哪里?也在AWS上?我假设lambda可以在不下载和重新加载的情况下工作,不是吗,因为它将在相同的AWS区域内运行?你为什么认为这是低效的?或者您可以创建一个临时EC2实例,如果不需要,可以在那里运行脚本;我不想使用lambda。是的,ES托管在AWS上。lambda在发生事件时工作,因此我无法找到使用lambda移动以前存储的文件的方法,而只能移动新来的数据。1.我认为重新上传然后将其移动到es 2是低效的。下载我将要删除的所有文件似乎效率低下。现在可以从AWS控制台触发lambdas运行。我认为你必须给他们假数据,但有一个“hello world”JSON示例你可以发布。好的,但我的意思是,如果您使用lambda或从EC2实例运行脚本,那么您将不会从AWS区域下载数据或重新加载数据。我已经阅读了AWS网站上的资源,但是它似乎可以处理新输入的数据,而不是以前添加的数据。@makewhite您可以使用任何sdk读取lambda中的s3文件。你指的是什么?我找不到任何关于现有数据的资源,但这里是流式数据。我添加了一个带有代码的链接,用于从S3存储桶解压数据,你可以从你提到的amazon链接获取代码,以在elasticsearch中推送数据。它需要一点编码,而不是一个地方的所有解决方案