Wprowadzenie
Wszelkich operacji na tabelach DynamoDB będziemy dokonywać przy wykorzystaniu AWS SDK
dla platformy .NET. W tym i w kolejnych wpisach skupimy się na tworzeniu, aktualizowaniu czy usuwaniu tabel. Będziemy również
mogli wylistować tabele, które utworzyliśmy w ramach swojego konta czy uzyskać informacje dotyczące każdej z nich.
Poniżej lista wspólnych kroków niezbędnych do wykonania powyższych operacji na tabelach DynamoDB:
- utworzenie instancji klasy AmazonDynamoDBClient;
- podanie wymaganych i opcjonalnych parametrów przy tworzeniu obiektu żądania;
-
użycie odpowiedniej metody, np. CreateTableRequest w celu utworzeniu tabeli czy metody
UpdateTableRequest w celu zaktualizowania istniejącej tabeli;
- odpalenie metody przygotowanej w powyższych krokach.
Dodatkowo tym razem nie będziemy używać konsoli AWS - wszystkich operacji będziemy dokonywać wykorzystując
język C#. Jeden z przykładów, gdzie używaliśmy manualnego tworzenia tabeli możecie znaleźć w tym wpisie:
AWS Lambda - Lambda z DynamoDB
Tworzenie tabeli
W celu utworzenia tabeli należy podać nazwę, jej klucz główny oraz wartości przepustowości, tzw. provisioned read/write capacity units o
których więcej możecie przeczytać w tym wpisie: DynamoDB - podstawowe pojęcia
Kroki przez które musimy przejść to odpowiednio: utworzenie instancji klasy AmazonDynamoDBClient, utworzenie instancji
klasy CreateTableRequest w celu przygotowania żądania, określenie nazwy tabeli, zdefiniowanie klucza głównego oraz
ustawienie wartości przepustowości. Ostatni krok to uruchomienie metody AmazonDynamoDBClient.CreateTable wraz z
przekazaniem przygotowanego powyżej obiektu żądania jako parametru tej metody.
Spójrzcie na poniższy, praktyczny, przykład tworzący tabelę samochodów (CarCatalog), która
używa Id jako klucza głównego. Zdefiniowaliśmy dodatkowo write
oraz read capacities, tj. wartości zapisu oraz odczytu dopuszczalne dla naszej tabeli. Wartości te, jak doskonale
pamiętacie z tego wpisu: AWS Lambda - CloudWatch: testowanie i metryki, będziemy analizować na bazie ruchu naszej aplikacji. Jeżeli dojdzie do potrzeby zmiany tych wartości możemy posłużyć się
metodą UpdateTable dostępną w ramach intefejsu API - o tym jednak w kolejnym wpisie.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace DynamoDbLocalUse.Controllers {
public class DynamoDBController: Controller {
private
const string TableName = "CarCatalog";
private readonly IAmazonDynamoDB _amazonDynamoDB;
public DynamoDBController(IAmazonDynamoDB amazonDynamoDB) {
_amazonDynamoDB = amazonDynamoDB;
}
public async Task<ActionResult<string>> InitializeTable() {
// przygotowanie żądania utworzenia tabeli wraz z definicją klucza głównego
// oraz wartości read/write capacities
var request = new CreateTableRequest {
TableName = TableName,
AttributeDefinitions = new List<AttributeDefinition> () {
new AttributeDefinition() {
AttributeName = "Id",
AttributeType = "N"
}
},
KeySchema = new List <KeySchemaElement> () {
new KeySchemaElement() {
AttributeName = "Id",
KeyType = "Hash" // Partition key / klucz partycji
}
},
ProvisionedThroughput = new ProvisionedThroughput() {
ReadCapacityUnits = 15,
WriteCapacityUnits = 10
}
};
var response = await _amazonDynamoDB.CreateTableAsync(request);
var tableDescription = response.TableDescription;
StringBuilder sb = new StringBuilder();
sb.AppendLine($"{tableDescription.TableName} : {tableDescription.TableStatus}, " +
$ "ReadCapacity: {tableDescription.ProvisionedThroughput.ReadCapacityUnits}," +
$ "WriteCapacity: {tableDescription.ProvisionedThroughput.WriteCapacityUnits}");
return sb.ToString();
}
}
}
Musimy poczekać, aż DynamoDB utworzy tabele i ustawi jej status na ACTIVE.
Odpowiedź metody CreateTable zawiera właściwość TableDescription, która
dostarcza niezbędnych informacji o tabeli:
W ramach tego i kolejnych wpisów będziemy obracać się w obrębie jednego projektu. W jednym z poprzednich wpisów utworzyliśmy projekt bazowy,
w tym dodałem nowy kontroler, w którym będziemy dodawać kolejne akcje. Wybaczcie, nie przywiązuje uwagi do
interfejsu użytkownika – nic jednak nie stoi na przeszkodzie utworzenia czegoś w rodzaju biblioteki operacji z czytelnym UI,
który pozwoli na wykonywanie różnych operacji na DynamoDB.
A sam projekt możecie pobrać z poniższej sekcji i rozwijać go wraz z kolejnymi wpisami:
Pliki