Рубрики
Uncategorized

Dynamodb Круд с узлами и лямбда

AWS определяет DynamoDB как «Amazon DynamoDB-это база данных и документов, которая обеспечивает Single-DI … Tagged с узлом, DevOps, DynamoDB, Restapi.

AWS определяет DynamoDB как «Amazon DynamoDB-это база данных ключей и документов, которая в любом масштабе обеспечивает однозначную миллисекундную производительность. Это полностью управляемая, многорегионная, многомастерная база данных со встроенной безопасностью, резервным копированием и восстановлением и кэшированием в памяти для приложений интернет-масштаба ». Таким образом, по определению, ясно, что DynamoDB-это без сервера, полностью управляемой миллисекундной производительности и очень масштабируемая база данных NOSQL, которая была объявлена в начале 2012 года.

В этой статье мы выполним основные операции CRUD с использованием AWS Lambda и Nodejs. Чтобы начать, мы сначала должны определить следующую структуру файла:

Мы назовуте наш корень динамический, однако не стесняемся называть это всем, что вам нравится. В нашей корневой папке мы создадим папку с именем ресурсов, в котором будет содержаться файл с именем Dynamo-table.yml, содержащий наш код для создания таблицы DynamoDB. Кроме того, поскольку мы будем использовать Framework без сервера для развертывания нашего стека CloudFormation, я предполагаю, что вы уже установили и настроили программный доступ к вашей учетной записи AWS без сервера. Если нет, вы можете обратиться к Без сервера документация Анкет После создания папки, называемой ресурсами, мы сгенерируем шаблон, используя Framework без сервера с помощью команды:

sls create -t aws-nodejs

Это генерирует файл Serverless.yml, файл handler.js и .gitignore, и, наконец, наша структура файла будет завершена.

Теперь давайте начнем с нашего файла Serverless.yml. Наш файл serversless.yml будет выглядеть следующим образом:

service: DynamoCRUD

provider:
  name: aws
  runtime: nodejs12.x
  profile: default
  timeout: 30

  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "dynamodb:*"
      Resource: "*"

functions:
  addItem:
    handler: handler.addItem

  getAllItem:
    handler: handler.getAllItem

  updateItem:
    handler: handler.updateItem

  deleteItem:
    handler: handler.deleteItem

resources:
  - ${file(resources/dynamo-table.yml)}

Таким образом, в основном мы делаем то, что мы создаем таблицу DynamoDB, используя раздел «Ресурсы» и создаем 4 основные функции для выполнения операции CRUD и предоставления разрешения DynamoDB на наши функции Lambda.

Теперь мы создадим таблицу DynamoDB, то есть нашу папку Dynamo-table.yml в разделе «Ресурсы». Это будет выглядеть как:

Resources:
  myDynamoDBTable:    # Logical Id of the resource
    Type: AWS::DynamoDB::Table

    Properties:
      AttributeDefinitions:
        - 
          AttributeName: "year"
          AttributeType: "N"
        - 
          AttributeName: "title"
          AttributeType: "S"

      KeySchema:
        - AttributeName: "year"    # Partition Key
          KeyType: "HASH"
        - AttributeName: "title"    # Sort Key
          KeyType: "RANGE"

      TableName: "Movies"     

      ProvisionedThroughput:   # Optional, can be skipped
        ReadCapacityUnits: 10
        WriteCapacityUnits: 10

Таким образом, в основном мы создаем таблицу с вышеуказанными определениями атрибутов.

Теперь давайте напишем наш файл handler.js. Это будет иметь код для всей операции CRUD, определенной в файле Serverless.yml.

"use strict";
const AWS = require('aws-sdk');

const docClient = new AWS.DynamoDB.DocumentClient();

// Function to Create an Item to DB
module.exports.addItem = async (event) => {
  try {

    let table = "Movies";
    let year = 2015;
    let title = "The Big New Movie";

    let params = {
      TableName: table,
      Item: {
        "year": year,
        "title": title,
        "info": {
          "plot": "Nothing happens at all",
          "rating": 0
        }
      }
    }

    let result = await docClient.put(params).promise();
    if (result) {
      console.log(">>>>>>>>>", result);
    }

    console.log("hello world")
    return {
      statusCode: 200,
      body: JSON.stringify({
        message: "Go Serverless v1.0! Your function executed successfully!",
        data: result
      }),
    };
  } catch (error) {
    console.log(error);
    return error;
  }
};

// Function to getAllItems from DB
module.exports.getAllItem = async () => {
  let table = "Movies";
  let year = 2015;

  let title = "The Big New Movie";

  let params = {
    TableName: table,
    Key: {
      "year": year,
      "title": title
    }
  }

  try {
    let result = await docClient.get(params).promise();

    console.log(result);

    return {
      body: JSON.stringify({
        message: "Executed succesfully",
        data: result
      })
    }
  } catch (error) {
    console.log(error);
  }
}

// Function to update an Item in DB
module.exports.updateItem = async () => {
  let table = "Movies";
  let year = 2015;

  let title = "The Big New Movie";

  let params = {
    TableName: table,
    Key: {
      "year": year,
      "title": title
    },
    UpdateExpression: "set info.rating = info.rating + :val",
    ExpressionAttributeValues: {
      ":val": 1
    },
    ReturnValues: "UPDATED_NEW"
  };

  try {
    let result = await docClient.update(params).promise();
    return {
      body: JSON.stringify({
        message: "updated succesfully",
        data: result
      })
    }
  } catch (error) {
    console.log(error);
  }
}

// Function to Delete an item
module.exports.deleteItem = async () => {

  let table = "Movies";
  let year = 2015;

  let title = "The Big New Movie";

  let params = {
    TableName: table,
    Key: {
      "year": year,
      "title": title
    }
  }

  let result = await docClient.delete(params).promise();

  return {
    body: JSON.stringify({
      message: "deleted succesfully",
      data: result
    })
  }

}

Здесь следует отметить, что я жестко кодирую данные, которые будут созданы в ББ ради простоты. Не стесняйтесь менять метод Additem в Post и проанализировать тело из события. Тела, вы можете полностью это сделать. То же самое касается обновления и удаления метода. Я просто стараюсь держать вещи максимально простыми.

Теперь последнее, что нужно сделать, это развернуть наш стек для AWS, и мы будем готовы проверить наши функции, работающие или нет. Чтобы развернуть стек, просто введите следующую команду:

sls deploy -v

Это вернет все функции конечной точки. Вы можете использовать почтальона, чтобы нажать на конечные точки и проверить ответы.

Спасибо за чтение

Оригинал: «https://dev.to/rajandmr/dynamodb-crud-with-nodejs-and-lambda-inn»