Manipulation des données DynamoDB avec Lambda (Node et Python)

introduction

Récemment, je suis exclusivement en charge de projets liés à l'IoT. Depuis que j'utilise AWS, je stocke souvent les données des appareils dans DynamoDB, j'acquiers ces données et je les visualise, et Lambda est très actif dans ce cas. J'utilise principalement Node.js, et je l'ai implémenté en Python en fonction du projet, et je pensais que je l'avais moi-même transformé en modèle, je vais donc le résumer.

Mettre les données dans DynamoDB

Il écrit principalement les données reçues de l'appareil sur DynamoDB. Normalement, il est nécessaire de traiter les données, mais comme il existe différents types en fonction de l'appareil, je vais l'omettre. L'important ici est de spécifier la clé de partition et la clé de tri. Si vous faites une erreur ici, vous obtiendrez une erreur. (Les informations clés sont fausses! Sentiment)

Node.js

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

exports.handler = (event, context, callback) => {
  const params = {
    TableName: "table-name" //Nom de la table DynamoDB
    Item: {
      "PartitionKey": "your-partition-key-data", //Données de la clé de partition
      "SortKey": "your-sort-key-data", //Trier les données clés
      "OtherKey": "your-other-data"  //Autre informations
    }
  }
  
  //Exécution du traitement Put vers 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") #Nom de la table DynamoDB
    
    #Exécution du traitement Put vers DynamoDB
    table.put_item(
      Item = {
        "PartitionKey": "your-partition-key-data", #Données de la clé de partition
        "SortKey": "your-sort-key-data", #Trier les données clés
        "OtherKey": "your-other-data"  #Autre informations
      }
    )
  except Exception as e:
        print e

Obtenir des données DynamoDB (requête)

Nous utilisons principalement la requête pour obtenir les données dans DynamoDB. Si vous avez SortKey dans DynamoDB ainsi que PartitionKey, vous pouvez définir ScanIndexForward sur false et spécifier le nombre d'observations acquises par Limit, et vous pouvez acquérir un nombre fixe à partir des données dans l'ordre décroissant (le plus récent). Un modèle courant est que vous souhaitez obtenir les dernières données envoyées par un certain ID de périphérique (clé de partition).

Node.js

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

exports.handler = (event, context, callback) => {
  const params = {
    TableName: "table-name" //Nom de la table DynamoDB
    KeyConditionExpression: "#PartitionKey = :partition-key-data and #SortKey = :sort-key-data", //Informations clés à obtenir
    ExpressionAttributeNames: {
      "#PartitionKey": "your-partition-key", //Nom d'attribut de la clé de partition
      "#SortKey": "your-sort-key" //Nom d'attribut SortKey
    },
    ExpressionAttributeValues: {
      ":partition-key-data": "your-partition-key-data", //Nom de la clé de partition que vous souhaitez obtenir
      ":sort-key-data": "your-sort-key-data" //SortKey nom que vous souhaitez obtenir
    }
    ScanIndexForward: false //Ordre croissant ou décroissant(La valeur par défaut est true=ordre croissant)
    Limit: 1 //Nombre de données à acquérir
  }
  
  //Exécuter le traitement des requêtes vers DynamoDB
  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") #Nom de la table DynamoDB
    
    #Exécuter le traitement des requêtes vers DynamoDB
    queryData = table.query(
      KeyConditionExpression = Key("your-partition-key").eq("your-partition-key-data") & Key("your-sort-key").eq("your-sort-key-data"), #Informations clés à obtenir
      ScanIndexForward = false, #Ordre croissant ou décroissant(La valeur par défaut est true=ordre croissant)
      Limit: 1 #Nombre de données à acquérir
    )
    return queryData
  except Exception as e:
        print e

à la fin

Étant donné que DynamoDB gère souvent les données avec Put et query, j'ai résumé deux méthodes. Dans certains cas, il doit s'agir de Update au lieu de Put, ou scan est utilisé lorsque vous souhaitez obtenir tous les enregistrements pour le moment. N'oubliez pas d'avoir une politique qui permet à *** Lambda de faire fonctionner DynamoDB correctement! *** *** En outre, cela se produit parfois lors de l'exécution d'une requête, mais parfois je veux voir "DynamoDB ne contient pas de données même si le processus semble être terminé sans aucune erreur." Dans un tel cas, suspectez un *** timeout. *** La valeur par défaut est de 3 secondes, donc si le nombre de données récupérées par requête est important, il expirera. J'ai écrit ceci pour être utilisé dans Lambda, mais comme je n'utilise normalement que le SDK, je pense qu'il peut être utilisé en modifiant le code source ci-dessus même lors du traitement des données d'une application Web ou d'un appareil capable de charger le SDK. ..

En passant, un de mes soucis récents est que si j'écris Node et écris Python, la grammaire, etc. sera confuse ...

(Veuillez me pardonner s'il y a une partie sale dans le code source ...)

à plus!

Recommended Posts

Manipulation des données DynamoDB avec Lambda (Node et Python)
Analyse de données avec python 2
Utiliser DynamoDB avec Python
Analyse de données avec Python
Exemple de données créées avec python
Exploitez TwitterBot avec Lambda, Python
Obtenez des données Youtube avec python
Écrire plusieurs enregistrements dans DynamoDB avec Lambda (Python, JavaScript)
Manipulez diverses bases de données avec Python
Lire des données json avec python
Tenez compte du prétraitement courant lors du traitement du flux DynamoDB avec Lambda (Python)
Scraping avec Node, Ruby et Python
Détection de visage avec Lambda (Python) + Rekognition
[Python] Obtenez des données économiques avec DataReader
Structure de données Python apprise avec la chimioinfomatique
Visualisez facilement vos données avec Python seaborn.
Notifier HipChat avec AWS Lambda (Python)
Traiter les données Pubmed .xml avec python
Analyse de données à partir de python (visualisation de données 1)
Utiliser PostgreSQL avec Lambda (Python + psycopg2)
Analyse de données à partir de python (visualisation de données 2)
Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame
Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda
Obtenez des données supplémentaires vers LDAP avec python
Construction de pipeline de données avec Python et Luigi
Recevoir des données textuelles de mysql avec python
[Note] Obtenir des données de PostgreSQL avec Python
[Automation] Manipulez la souris et le clavier avec Python
Traiter les données Pubmed .xml avec python [Partie 2]
Essayez de travailler avec des données binaires en Python
Générer des données de test japonais avec Python Faker
Convertir des données Excel en JSON avec python
Téléchargez les données de cours des actions japonaises avec Python
Convertissez des données FX 1 minute en données 5 minutes avec Python
Recommandation d'Altair! Visualisation des données avec Python
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Faisons la manipulation des données MySQL avec Python
Connectez-vous à s3 avec AWS Lambda Python
Organisez les données séparées par dossier avec Python
API REST facile avec API Gateway / Lambda / DynamoDB
Essayez d'attribuer ou de changer avec Python: lambda
Traitez le Big Data avec Dataflow (ApacheBeam) + Python3
FizzBuzz en Python3
Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Grattage avec Python
Créez des données de test comme ça avec Python (partie 1)
Statistiques avec python
Grattage avec Python
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
Python avec Go
Analyse de données python
Obtenez une authentification de base avec CloudFront Lambda @ Edge avec Python 3.8
Twilio avec Python
Lire les données de la table dans un fichier PDF avec Python
Intégrer avec Python
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
Jouez avec 2016-Python