簡體   English   中英

Amazon AWS - S3 到 ElasticSearch (Python Lambda)

[英]Amazon AWS - S3 to ElasticSearch (Python Lambda)

我想將數據從 S3 目錄復制到 Amazon ElasticSearch 服務。 我試過遵循指南,但不幸的是我正在尋找的部分丟失了。 我不知道 lambda 函數本身應該是什么樣子(指南中有關此的所有信息是:“將您的應用程序源代碼放在 eslambda 文件夾中。”)。 我希望 ES 自動索引文件。

目前我正在嘗試

for record in event['Records']:
    bucket = record['s3']['bucket']['name']
    key = urllib.unquote_plus(record['s3']['object']['key'])
    index_name = event.get('index_name', key.split('/')[0])
    object = s3_client.Object(bucket, key)

    data = object.get()['Body'].read()

    helpers.bulk(es, data, chunk_size=100)

但我得到了一個巨大的錯誤,說明elasticsearch.exceptions.RequestError: TransportError(400, u'action_request_validation_exception', u'Validation Failed: 1: index is missing;2: type is missing;3: index is missing;4: type is missing;5: index is missing;6: type is missing;7: ...

任何人都可以向我解釋,我該如何設置以便我的數據從 S3 移動到自動映射和自動索引的 ES? 顯然這是可能的,正如參考資料中提到的herehere

雖然可以在 Elasticsearch 中自動分配映射,但不會自動生成索引。 您必須在 POST 請求中指定索引名稱和類型。 如果該索引不存在,則 Elasticsearch 將自動創建索引。

根據您的錯誤,您似乎沒有通過索引和類型。

例如,這里是一個簡單的 POST 請求如何將記錄添加到索引MyIndex並鍵入MyType ,如果它不存在,它將首先創建索引和類型。

curl -XPOST 'example.com:9200/MyIndex/MyType/' \ 
    -d '{"name":"john", "tags" : ["red", "blue"]}'

我寫了一個腳本從 S3 下載一個 csv 文件,然后將數據傳輸到 ES。

  1. 使用 boto3 制作 S3 客戶端並從 S3 下載文件
  2. 制作了一個 ES 客戶端來連接到 Elasticsearch。
  3. 打開 csv 文件並使用 elasticsearch 中的 helpers 模塊將 csv 文件內容插入到彈性搜索中。

主文件

import boto3
from elasticsearch import helpers, Elasticsearch
import csv
import os
from config import *


#S3
Downloaded_Filename=os.path.basename(Prefix)
s3 = boto3.client('s3', aws_access_key_id=awsaccesskey,aws_secret_access_key=awssecretkey,region_name=awsregion)
s3.download_file(Bucket,Prefix,Downloaded_Filename)

#ES
ES_index = Downloaded_Filename.split(".")[0]
ES_client = Elasticsearch([ES_host],http_auth=(ES_user, ES_password),port=ES_port)

#S3 to ES
with open(Downloaded_Filename) as f:
    reader = csv.DictReader(f)
    helpers.bulk(ES_client, reader, index=ES_index, doc_type='my-type')

配置文件

awsaccesskey = ""
awssecretkey = ""
awsregion = "us-east-1"
Bucket=""
Prefix=''
ES_host = "localhost"
ES_port = "9200"
ES_user = "elastic"
ES_password = "changeme"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM