[英]AWS lambda: Invoking locally a python lambda function with access to s3
[英]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? 顯然這是可能的,正如參考資料中提到的here和here 。
雖然可以在 Elasticsearch 中自動分配映射,但不會自動生成索引。 您必須在 POST 請求中指定索引名稱和類型。 如果該索引不存在,則 Elasticsearch 將自動創建索引。
根據您的錯誤,您似乎沒有通過索引和類型。
例如,這里是一個簡單的 POST 請求如何將記錄添加到索引MyIndex
並鍵入MyType
,如果它不存在,它將首先創建索引和類型。
curl -XPOST 'example.com:9200/MyIndex/MyType/' \
-d '{"name":"john", "tags" : ["red", "blue"]}'
我寫了一個腳本從 S3 下載一個 csv 文件,然后將數據傳輸到 ES。
主文件
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.