Jak indexovat nový a existující obsah Amazon DynamoDB pomocí Amazon Elasticsearch Service.

Diagram vytvořený v cloudcraft.co

Co mám: Tabulka „prvků“ Amazon DynamoDB s ~ 49 kB objektů.

Co potřebuji: Amazon Elasticsearch Service se všemi stávajícími položkami v tabulce a všemi novými příchozími položkami.

Co budu používat: Amazon Elasticsearch Service, Amazon DynamoDB, Amazon Lambda, skripty Python.

Nejprve byste měli pro svůj stůl vytvořit proud typu zobrazení obrazu (Služby> DynamoDB> Tabulky> Vyberte tabulku> Karta Přehled).

Zkopírujte ARN proudu, budete jej potřebovat později.

Přejděte na Elasticsearch Service (Services> Elasticsearch Service) a vytvořte novou doménu. Podle potřeby zadejte takové parametry, jako je název domény Elasticsearch, cluster, konfigurace uzlů / úložišť.

Nastavil jsem zásady přístupu k doméně jako veřejné pouze pro testování, měli byste zvolit bezpečnější možnost.

Zkopírujte ARN domény, budete ji potřebovat později.

Dále byste měli vytvořit novou roli a specifikovat pro ni přístupové zásady, které chcete přejít do rolí (Služby> IAM> Role) a vytvořit novou.

Vyberte typ role služby AWS a službu Lambda jako službu, která bude tuto roli používat.

Jako zásady oprávnění vyberte AWSLambdaBasicExecutionRole a klikněte na Další.

Pojmenujte svou roli, v mém případě je to dynamodb-to-es.

Nyní je čas přidat do role zásady, je třeba pro přístup k doméně DB, stream a Elasticsearch.

Klikněte na „Přidat vloženou zásadu“ a vyberte „Vlastní zásada“.

Přidejte Access-to-the-DynamoDB (nahraďte prostředek tabulkou ARN, najdete ji v podrobnostech tabulky):

Mělo by to vypadat takto:

Přidejte Access-to-the-DynamoDB-stream (nahraďte zdroj tabulkou ARN, kterou jsme zmínili při vytváření proudu):

Mělo by to vypadat takto:

Přidejte Lambda-to-Amazon-ES (nahraďte zdroj tabulkou ARN, kterou jsme zmínili při vytvoření domény Elasticsearch):

Všimněte si, že za názvem domény je *.

Mělo by to vypadat takto:

Dalším krokem je vytvoření Amazon Lambda. Vytvořte novou funkci od nuly (Služby> Lambda).

Přidejte spouštěč DynamoDB s vybranou vhodnou tabulkou a počáteční pozici Trim horizont. V tomto okamžiku můžete aktivovat spouště.

Pojmenujte svou funkci a vyberte runtime Python 2.7.

Do oblasti kódu funkce Lambda vložte dynamodb-to-es.py skript a zadejte koncový bod domény Elasticsearch.

Jako existující roli vyberte roli dynamodb-to-es.

V podnabídce Pokročilá nastavení můžete vybrat delší časový limit, pokud jsou vaše záznamy obrovské nebo pokud chcete vložit více než jeden záznam najednou.

Nyní můžete vložit / upravit několik položek v tabulce a poté přejít na stránku domény, abyste se ujistili, že jsou vytvořeny indexy.

V zásadě můžete požádat o svůj Elasticsearch, ale budou existovat pouze položky, které jste přidali / smazali po vytvoření Elasticsearch Service a Lambda funkce.

Příklad požadavku s prázdným dotazem:

https://search-elementsdomain-bsbkhmwsd2u7zm2cukbmht2eqm.us-east-1.es.amazonaws.com/elements/_search?size=10&pretty=true&q=*

Všimněte si, že za koncový bod byste měli určit index tabulky.

Druhá část tohoto příspěvku je o tom, jak přidat existující obsah do Elasticsearch Service z DynamoDB.

Přejděte na Role (Služby> IAM> Role) a vytvořte novou zásadu. Nastavit nová oprávnění jako na obrázcích níže:

Do pole Amazon Resource Field vložte ARN vaší funkce Lambda:

Zkopírujte tuto zásadu, budete ji potřebovat pro oprávnění uživatele:

Přejděte k uživateli, který provede skript (Služby> IAM> Uživatelé) a přidejte vlastní vlastní zásady inline (nezapomeňte změnit zdroje na své):

Pokud nemáte přístupový klíč - vytvořte jej:

Zkopírujte zabezpečené ID vašeho přístupového klíče a tajného přístupového klíče na bezpečné místo:

Zvyšte kapacitu čtecí jednotky pro váš stůl (je to pouze čas spuštění skriptu).

Chcete-li na Amazonu vyvolat Lambdu, měli byste spustit skript post_to_es_from_dynamodb.py.

Tip: Pokud chcete spustit tento skript jako Amazon Lambda, měli byste pamatovat, že maximální časový limit je 5 minut a obvykle nestačí zpracovat velké množství záznamů.

Před provedením ruční změny parametru regionu ve skriptu:

Chcete-li zaúčtovat dříve existující data z DynamoDb do Elasticsearch, spusťte tento příkaz s příslušnými argumenty:

python post_to_es_from_dynamodb.py --tn "" --ak "" --sk "" --esarn "" --lf ""

Příklady parametrů:

esarn: arn: aws: dynamodb: us-east-1: XXXXXXXXXXX: tabulka / elements / stream / 2017-09-14T14: 16: 12.788
lf: arn: aws: lambda: us-east-1: XXXXXXXXXXX: function: dynamostream-to-es

Chcete-li zobrazit definici parametrů - spustit:

python post_to_es_from_dynamodb.py --help

Tip: Pokud neexistuje modul s názvem boto3, můžete spustit:

pip install boto3

Tip: Pokud jste do svého počítače nainstalovali Amazon CLI, musíte nakonfigurovat místní parametry AWS (AWS secret / access / region) jako v argumentech, které jste použili výše v příkazu „aws configure“.

Nyní můžete provést požadavek:

https://search-elementsdomain-bsbkhmwsd2u7zm2cukbmht2eqm.us-east-1.es.amazonaws.com/elements/_search?size=10&pretty=true&q=*

Jak vidíte na obrázku níže, počet položek byl zvýšen:

Nakonec můžete nastavit jednotky s nižší kapacitou pro snížení nákladů.

Takže to je vše, nyní můžete používat službu Elasticsearch s DynamoDB!

Inspirováno tímto a tímto. Vyrobeno pouze pro vzdělávací účely.

Všechny skripty a zásady najdete zde. Neváhejte se ptát!