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.
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
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
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