Schreiben Sie mit Lambda (Python, JavaScript) mehrere Datensätze in DynamoDB.

Einführung

Ich musste mehrere Datensätze in DynamoDB schreiben (aktualisieren), daher habe ich einen Artikel veröffentlicht, weil ich die Ergebnisse der Implementierung und Vorsichtsmaßnahmen aufschreiben wollte. Ich werde auch eine Implementierung in Python und Node.js veröffentlichen

Annahme

Tabelle

Die diesmal zu schreibende Tabelle wird wie folgt angenommen Tabellenname: Benutzer Die Spalten und Typen (das Schema selbst hat keinen Typ, aber es wird als Datentyp festgelegt, der der Einfachheit halber registriert werden soll) sind wie folgt.

Freund nimmt eine Liste von Karten mit ID, Name, Adressschlüssel an Auch wenn es sich um einen komplizierten Typ handelt (Typ wie ein Freund der Benutzertabelle), möchte ich diesmal zeigen, dass er geschrieben werden kann. Daher werde ich ignorieren, ob das Tabellendesign überhaupt das beste ist.

Lambda vorbereiten

Dieses Mal werde ich den Code veröffentlichen, der auf Lambda ausgeführt wird, also gehe ich davon aus, dass Lambda für sich selbst bereit ist

Artikelfluss

Ganzes Codebeispiel → Lichtkommentar Ich werde in der Prozedur von schreiben und am Ende werde ich gemeinsame ergänzende Artikel veröffentlichen

Implementierung in Python

import boto3
from boto3.dynamodb.conditions import Key

def update_users(table, users_friends):
   with table.batch_writer() as batch:
      for n in range(3):
        batch.put_item(
          Item={
				"id": n + 1,
				"name": "user" + str(n + 1),
				"address": "address" + str(n + 1),
				"friends": users_friends[n]
          }
        )

def lambda_handler(event, context):
  try:
    dynamoDB = boto3.resource("dynamodb")
    table = dynamoDB.Table("Users")
	  user1_friends = [
		{ "id": 2, "name": "user2", "address": "address2" },
		{ "id": 3, "name": "user3", "address": "address3" }
	  ]
	  user2_friends = [
		{ "id": 1, "name": "user1", "address": "address1" },
		{ "id": 3, "name": "user3", "address": "address3" }
	  ]
	  user3_friends = [
		{ "id": 1, "name": "user1", "address": "address1" },
		{ "id": 2, "name": "user2", "address": "address2" }
	  ]
	  
	  users_friends = [user1_friends, user2_friends, user3_friends]
    
    update_users(table, users_friends)
    
    return event["message"] #Was zurückzugeben ist angemessen
  except Exception as e:
        print(e)

Leichter Kommentar

Die Art und Weise, wie der Code und die zu schreibenden Daten geschrieben werden, ist nicht unbedingt erforderlich, daher ist es in Ordnung, sie durchzuarbeiten. Wichtig ist, dass der Inhalt der Funktion "update_users" die Methode "batch_write" verwendet, die in der DynamoDB-Modellinstanz wächst. Wenn Sie also mehrmals schreiben möchten, führen Sie im folgenden Block PUT aus.

with table.batch_write() as batch:
	# ...Abkürzung

Wenn beispielsweise "PUT" ausgeführt wird, wird "batch.put_item" aufgerufen. Beschreibe den Inhalt des Schreibens in dem Argument "Item" dieses Typen Ein weiterer zu beachtender Punkt ist, dass selbst wenn es sich um einen Typ namens List [Map] handelt, dieser problemlos geschrieben werden kann. Grundsätzlich kann jeder Typ ordnungsgemäß als angegebener Schlüsselwert in die Datenbank geschrieben werden. Kurz gesagt, es ist kein Problem, wenn Sie das Wörterbuch, das Sie aktualisieren möchten, so wie es ist auf "Item" übergeben. Als kleine Ergänzung drehe ich schließlich die "for" -Anweisung innerhalb des "batch_write" -Blocks, aber natürlich können Sie das "batch.put_item" mehrmals in Solid schreiben, wenn Sie es also nicht mit der "for" -Anweisung schreiben können Manchmal muss man es einfach solide machen Es wird auch gesagt, dass die maximale Anzahl von Elementen, die gleichzeitig geschrieben werden können, 25 beträgt. Wenn jedoch 25 oder mehr Elemente vorhanden sind, werden sie erneut gesendet oder tun, was sie wollen. Sie können also Code schreiben, ohne sich um die Anzahl der Elemente sorgen zu müssen.

Implementierung in Node.js.

const AWS = require("aws-sdk");
const dynamoDB = new AWS.DynamoDB.DocumentClient({
  region: "ap-northeast-1"
});

const tableName = "Users";

exports.handler = (event, context) => {
	  const user1Friends = [
		{ id: 2, name: "user2", address: "address2" },
		{ id: 3, name: "user3", address: "address3" }
	  ];
	  const user2Friends = [
		{ id: 1, name: "user1", address: "address1" },
		{ id: 3, name: "user3", address: "address3" }
	  ];
	  const user3Friends = [
		{ id: 1, name: "user1", address: "address1" },
		{ id: 2, name: "user2", address: "address2" }
	  ];
	  const usersFriends = [user1Friends, user2Friends, user3Friends]

    const params = {
		RequestItems: {
		  [tableName]: usersFriends.map((e, i) => ({
			PutRequest: {
			  Item: {
			    id: i + 1,
			    name: `user${i + 1}`,
			    address: `address${i + 1}`,
			    friends: e
			  }
			}
		  }))
		}
	  };
    
//Rückruf ist angebracht
    dynamoDB.batchWrite(params, (e, data) => {
		if (e) {
		  context.fail(e);
		} else {
		  context.succeed(data);
		}
    });
};

Leichter Kommentar

Wie in der Erklärung in Python erwähnt, sind die Code- und Datenwerte selbst durch. Wichtig ist hier die Eigenschaft (Funktion) "batchWrite" in "AWS.DynamoDB.DocumentClient". Dieses Argument ist ziemlich eigenartig, daher [Klasse: AWS.DynamoDB.DocumentClient - AWS SDK für JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#batchWrite- Eigentum) Wenn ich mir mehrere Schreibvorgänge in Node.js angesehen habe, habe ich häufig batchWriteItem gesehen, aber die neueste Node.js-Ausführungsumgebung, die derzeit in Lambda verfügbar ist (Stand September 2020). Es scheint, dass ich es nicht tun werde, also bewegt es sich nicht und es ist unerwartet schwierig Der große Unterschied zu batchWriteItem besteht darin, dass das Objekt von Item kein DynamoDB-spezifisches typisiertes Objekt sein muss (z. B.name: {"S": "user"}). Kurz gesagt, wenn Sie sich nicht für den Wert interessieren, den Sie schreiben möchten, und ihn einfach in JSON konvertieren und als Wert von "Item" übergeben, funktioniert dies ohne Probleme. Daher kann natürlich auch ein komplizierter Typ namens Map [List] geschrieben werden, indem er so übergeben wird, wie er ist.

Gesamtergänzung

Wenn Sie in der Stapelverarbeitung aktualisieren möchten, müssen Sie "PUT" verwenden Der Grund ist einfach und es gibt kein "UPDATE", daher kann nicht geholfen werden. Daher ist es notwendig, es stetig mit "PUT" zu beschreiben Außerdem habe ich mich diesmal nicht konzentriert, weil ich im Batch-Prozess "LÖSCHEN" ausführen kann, aber ich sage nur, dass es ...

abschließend

Was haben Sie gedacht Ich sehe oft Artikel mit Code und ein oder zwei Erklärungszeilen für mehrere Operationen, aber ich sehe nicht viele Erklärungen speziell zum Schreiben (es ist unklar, ob auch komplizierte Typen verwendet werden können). Erstens wird es zur Laufzeit ein Fehler sein), ich habe es ein wenig gemacht und es war schwierig, also habe ich es als Memorandum niedergeschrieben Es mag ein kleines Nischenfeld sein, aber ich hoffe, Sie finden es nützlich.

Referenz

Amazon DynamoDB — Boto3 Docs 1.14.56 documentation Class: AWS.DynamoDB.DocumentClient — AWS SDK for JavaScript

Recommended Posts

Schreiben Sie mit Lambda (Python, JavaScript) mehrere Datensätze in DynamoDB.
Schreiben Sie mit Python in csv
[Python] Mit Python in eine CSV-Datei schreiben
Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[Python] Zeichnen mehrerer Diagramme mit Matplotlib
[Mit Plotly auf die Karte schreiben] Dynamische Visualisierung mit Plotly [Python]
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.
Schreiben Sie CSV-Daten mit AWS-Lambda + Python in AWS-S3
Laden Sie Dateien mit Lambda (Python) auf Google Drive hoch.
Ich möchte mit Python in eine Datei schreiben
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Verwenden Sie DynamoDB mit Python
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
Ich möchte Lambda mit Python auf Mac AWS!
Für diejenigen, die Python mit vim schreiben möchten
Stellen Sie mit Python eine Verbindung zu BigQuery her
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Schreiben Sie einfach if-elif mit Lambda
Schreiben wir Python mitinema4d.
Schalten Sie Python mit Alternativen auf 2.7 um
Wie benutzt man Python Lambda?
Berücksichtigen Sie bei der Verarbeitung von DynamoDB Stream mit Lambda (Python) die allgemeine Vorverarbeitung.
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Herausforderung Problem 5 mit Python: Lambda ... Ich habe mich entschieden, ohne zu kopieren
[Python] Exportieren Sie regelmäßig mit Lambda aus CloudWatch-Protokollen nach S3
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
Python: So verwenden Sie Async mit
Schreiben Sie Python nicht, wenn Sie es mit Python beschleunigen möchten
Stellen Sie mit SQL Alchemy eine Verbindung zu mehreren Datenbanken her
Schön dich mit Python zu treffen
Versuchen Sie, Facebook mit Python zu betreiben
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python 3.8 ~] Wie man rekursive Funktionen mit Lambda-Ausdrücken intelligent definiert
Ausgabe in eine CSV-Datei mit Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Laden Sie mehrere JavaScript-Dateien mit PyWebView
Konvertieren Sie die Liste mit Python in DataFrame
MP3 → WAV-Konvertierung mit Python
Schwanzrekursion mit Python2 durchführen
Erste Schritte mit Python
Schreiben Sie FW mit TWE-Lite R an TWE-Lite.
Veröffentlichen Sie mehrere Twitter-Bilder mit Python
Was tun mit PYTHON Release?
Animieren Sie mehrere Standbilder mit Python
So berechnen Sie das Datum mit Python
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Mehrfachintegration mit Python und Sympy
Mit Python 3 einfach auf Twitter posten
Ich möchte mit Python debuggen
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)