Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)

Einführung

In letzter Zeit bin ich ausschließlich für IoT-Projekte verantwortlich. Da ich AWS verwende, speichere ich häufig Daten von Geräten in DynamoDB, erhalte diese Daten und visualisiere sie. In diesem Fall ist Lambda sehr aktiv. Ich verwende hauptsächlich Node.js und habe es je nach Projekt in Python implementiert. Ich dachte, ich hätte es selbst zu einer Vorlage gemacht, also werde ich es zusammenfassen.

Daten in DynamoDB ablegen

Es schreibt hauptsächlich die vom Gerät empfangenen Daten in DynamoDB. Normalerweise ist es notwendig, die Daten zu verarbeiten, aber da es je nach Gerät verschiedene Typen gibt, werde ich sie weglassen. Hier ist es wichtig, den Partitionsschlüssel und den Sortierschlüssel anzugeben. Wenn Sie hier einen Fehler machen, erhalten Sie eine Fehlermeldung. (Wichtige Informationen sind falsch! Gefühl)

Node.js

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

exports.handler = (event, context, callback) => {
  const params = {
    TableName: "table-name" //Name der DynamoDB-Tabelle
    Item: {
      "PartitionKey": "your-partition-key-data", //Partitionsschlüsseldaten
      "SortKey": "your-sort-key-data", //Schlüsseldaten sortieren
      "OtherKey": "your-other-data"  //Andere Daten
    }
  }
  
  //Ausführung der Put-Verarbeitung in DynamoDB
  dynamoDB.put(params).promise().then((data) => {
    console.log("Put Success");
    callback(null);
  }).catch((err) => {
    console.log(err);
    callback(err);
  });
}

Python

import boto3

def lambda_handler(event, context):
  try:
    dynamoDB = boto3.resource("dynamodb")
    table = dynamoDB.Table("table-name") #Name der DynamoDB-Tabelle
    
    #Ausführung der Put-Verarbeitung in DynamoDB
    table.put_item(
      Item = {
        "PartitionKey": "your-partition-key-data", #Partitionsschlüsseldaten
        "SortKey": "your-sort-key-data", #Schlüsseldaten sortieren
        "OtherKey": "your-other-data"  #Andere Daten
      }
    )
  except Exception as e:
        print e

DynamoDB-Daten abrufen (Abfrage)

Wir verwenden hauptsächlich Abfragen, um die Daten in DynamoDB abzurufen. Wenn Sie SortKey in DynamoDB sowie PartitionKey haben, können Sie ScanIndexForward auf false setzen und die Anzahl der von Limit erfassten Fälle angeben. Außerdem können Sie eine feste Anzahl aus den Daten in absteigender Reihenfolge (spätestens) abrufen. Ein häufiges Muster ist, dass Sie die neuesten XX-Daten erhalten möchten, die von einer bestimmten Geräte-ID (Partitionsschlüssel) gesendet werden.

Node.js

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

exports.handler = (event, context, callback) => {
  const params = {
    TableName: "table-name" //Name der DynamoDB-Tabelle
    KeyConditionExpression: "#PartitionKey = :partition-key-data and #SortKey = :sort-key-data", //Wichtige Informationen zu erhalten
    ExpressionAttributeNames: {
      "#PartitionKey": "your-partition-key", //Name des Partitionsschlüsselattributs
      "#SortKey": "your-sort-key" //Name des SortKey-Attributs
    },
    ExpressionAttributeValues: {
      ":partition-key-data": "your-partition-key-data", //Name des Partitionsschlüssels, den Sie erhalten möchten
      ":sort-key-data": "your-sort-key-data" //SortKey-Name, den Sie erhalten möchten
    }
    ScanIndexForward: false //Aufsteigende oder absteigende Reihenfolge(Der Standardwert ist true=aufsteigende Reihenfolge)
    Limit: 1 //Anzahl der zu erfassenden Daten
  }
  
  //Führen Sie die Abfrageverarbeitung in DynamoDB aus
  dynamoDB.query(params).promise().then((data) => {
    console.log(data);
    callback(data);
  }).catch((err) => {
    console.log(err);
    callback(err);
  });
}

Python

import boto3
from boto3.dynamodb.conditions import Key

def lambda_handler(event, context):
  try:
    dynamoDB = boto3.resource("dynamodb")
    table = dynamoDB.Table("table-name") #Name der DynamoDB-Tabelle
    
    #Führen Sie die Abfrageverarbeitung in DynamoDB aus
    queryData = table.query(
      KeyConditionExpression = Key("your-partition-key").eq("your-partition-key-data") & Key("your-sort-key").eq("your-sort-key-data"), #Wichtige Informationen zu erhalten
      ScanIndexForward = false, #Aufsteigende oder absteigende Reihenfolge(Der Standardwert ist true=aufsteigende Reihenfolge)
      Limit: 1 #Anzahl der zu erfassenden Daten
    )
    return queryData
  except Exception as e:
        print e

schließlich

Da DynamoDB Daten häufig mit Put und Query verarbeitet, habe ich zwei Methoden zusammengefasst. In einigen Fällen muss es Update statt Put sein, oder Scan wird verwendet, wenn Sie vorerst alle Datensätze abrufen möchten. Vergessen Sie nicht, eine Richtlinie zu haben, die es *** Lambda ermöglicht, DynamoDB ordnungsgemäß zu betreiben! *** *** Außerdem tritt es manchmal beim Ausführen einer Abfrage auf, aber manchmal möchte ich sehen, dass "DynamoDB keine Daten enthält, obwohl der Prozess abgeschlossen zu sein scheint, ohne dass ein Fehler ausgelöst wird!". In einem solchen Fall vermuten Sie eine *** Zeitüberschreitung. *** Der Standardwert beträgt 3 Sekunden. Wenn also die Anzahl der durch die Abfrage abgerufenen Daten groß ist, tritt eine Zeitüberschreitung auf. Ich habe dies geschrieben, um es in Lambda zu verwenden, aber da ich SDK normalerweise nur verwende, denke ich, dass es durch Ändern des obigen Quellcodes verwendet werden kann, selbst wenn Daten von Webanwendungen und Geräten verarbeitet werden, die SDK laden können. ..

Abgesehen davon ist eine meiner jüngsten Sorgen, dass, wenn ich Node schreibe und Python schreibe, die Grammatik usw. verwirrt wird ...

(Bitte verzeihen Sie mir, wenn der Quellcode einen schmutzigen Teil enthält ...)

wir sehen uns!

Recommended Posts

Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Datenanalyse mit Python 2
Verwenden Sie DynamoDB mit Python
Datenanalyse mit Python
Mit Python erstellte Beispieldaten
Betreiben Sie TwitterBot mit Lambda, Python
Holen Sie sich Youtube-Daten mit Python
Schreiben Sie mit Lambda (Python, JavaScript) mehrere Datensätze in DynamoDB.
Bearbeiten Sie verschiedene Datenbanken mit Python
Lesen von JSON-Daten mit Python
Berücksichtigen Sie bei der Verarbeitung von DynamoDB Stream mit Lambda (Python) die allgemeine Vorverarbeitung.
Scraping mit Node, Ruby und Python
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python] Mit DataReader Wirtschaftsdaten abrufen
Python-Datenstruktur mit Chemoinfomatik gelernt
Visualisieren Sie Ihre Daten ganz einfach mit Python Seaborn.
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Verarbeiten Sie Pubmed .xml-Daten mit Python
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Anwendung von Python: Datenbereinigung Teil 2: Datenbereinigung mit DataFrame
Bearbeiten von Kintondaten mit dem Python & C Data ODBC-Treiber von AWS Lambda
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Datenpipeline-Aufbau mit Python und Luigi
Empfangen Sie Textdaten von MySQL mit Python
[Hinweis] Mit Python Daten von PostgreSQL abrufen
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Verarbeiten Sie Pubmed .xml-Daten mit Python [Teil 2]
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Generieren Sie japanische Testdaten mit Python faker
Konvertieren Sie Excel-Daten mit Python in JSON
Laden Sie japanische Aktienkursdaten mit Python herunter
Empfehlung von Altair! Datenvisualisierung mit Python
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Lassen Sie uns MySQL-Daten mit Python bearbeiten
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Organisieren Sie mit Python nach Ordnern getrennte Daten
Einfache REST-API mit API Gateway / Lambda / DynamoDB
Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
Verarbeiten Sie Big Data mit Dataflow (ApacheBeam) + Python3
FizzBuzz in Python3
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Scraping mit Python
Erstellen Sie solche Testdaten mit Python (Teil 1)
Statistik mit Python
Scraping mit Python
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Python mit Go
Datenanalyse Python
Erreichen Sie eine grundlegende Authentifizierung mit CloudFront Lambda @ Edge mit Python 3.8
Twilio mit Python
Lesen Sie Tabellendaten in einer PDF-Datei mit Python
In Python integrieren
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Spielen Sie mit 2016-Python