1. はじめに
こんにちは!株式会社Definerのライターチームです!
今回は、DynamoDBへのCRUD処理の方法について気になりますよね。
実際の画面や、資源を見ながら詳しく解説していきましょう。
2. 目的・ユースケース
この記事は、Amazon DynamoDBにおけるCRUD処理を理解するという目的に向けて執筆しております。
ITの現場で、NoSQLであるDynamoDBを使った開発を行いたい時に、参考になる情報やプラクティスをまとめています。
3. DynamoDBとは
DynamoDBは、AWSが提供するフルマネージドなNoSQLデータベースサービスです。
DynamoDBはシンプルなキーバリュー型であり、高速なパフォーマンスが実現可能です。
ハッシュキーとソートキーからなる主キーが一意であれば、テーブルの項目は自由に設定することができます。
ここで、NoSQLについてもRDBMSと比較しつつおさらいします。
・データの保存形式はRDBMSの行列テーブル形式だけでなく、キーバリュー型やドキュメント型など、様々な形式がある。
・RDBMSと比較してデータの正確性(ACID特性:[不可分性、一貫性、独立性、永続性])は劣りますが、パフォーマンスが高くスケールが容易な点がメリットです。
・データ操作はRDBMSはSQLで実行するのに対し、オブジェクトベースのAPIで実行する場合が多いです。
4. LambdaとDynamoDBのセットアップ
早速、DynamoDBに対するCRUD処理を実行していきます。
①テスト用のLambdaの作成
Lambdaのコンソールへアクセスし、「関数の作成」をクリック
ランタイムはPython3.9を選択しました。
注意点として、DynamoDBにアクセスできるIAMロールのアタッチが必要です。
②DynamoDBの作成
DynamoDBのコンソールへアクセスし、「テーブルの作成」をクリックします。
テーブル名は「employee」、パーティションキーは「id」とし、テーブルを作成します。
DynamoDBのコンソールから「項目を探索」をクリックし、「項目を作成」から項目とサンプルデータを作成します。
以下の様なテーブルが作成できました。
5. DynamoDBテーブルに対するRead処理
早速、CRUD処理を実行していきます。
まずはRead処理から実行します。
以下をLambdaにコピペし、実行します。
「get_item」で、特定のデータを取得します。
import json
import boto3
from boto3.dynamodb.conditions import Key,Attr
def lambda_handler(event,context):
__TableName__ = "employee"
Primary_Column_Name = 'id'
Primary_Key="1"
columns=["LastName","FirstName","Gender"]
client = boto3.client('dynamodb')
DB=boto3.resource('dynamodb')
table=DB.Table(__TableName__)
## Read
response=table.get_item(
Key={
Primary_Column_Name:Primary_Key
}
)
print(response["Item"])
以下の様な結果が得られ、Readが成功しました。
{'Gender': 'man', 'id': '1', 'FirstName': 'Taro', 'LastName': 'Tanaka'}
6. DynamoDBテーブルに対するCRUD処理
続いて、Create・Update・Delete処理を実行してみます。
以下のコードをLambdaにデプロイし、実行してみます。
id=4のデータを追加し、id=2のデータを削除する処理を記載しています。
「put_item」がデータのCreate/Update、「delete_item」がデータの削除です。
import json
import boto3
from boto3.dynamodb.conditions import Key,Attr
def lambda_handler(event,context):
__TableName__ = "employee"
Primary_Column_Name = 'id'
columns=["LastName","FirstName","Gender"]
client = boto3.client('dynamodb')
DB=boto3.resource('dynamodb')
table=DB.Table(__TableName__)
## Create / Update
Primary_Key="4"
response=table.put_item(
Item={Primary_Column_Name:Primary_Key,
columns[0]:"Saburo",
columns[1]:"Ito",
columns[2]:"man"
})
## Delete
Primary_Key="2"
response=table.delete_item(
Key={
Primary_Column_Name:Primary_Key
})
## Print All Data
response=table.scan(
FilterExpression = Attr('id').gte("0")
)
for item in response["Items"]:
print(item)
以下の様な結果が表示され、CRUD処理が実行できていることが確認できました!
{'Gender': 'man', 'id': '1', 'FirstName': 'Taro', 'LastName': 'Tanaka'}
{'Gender': 'man', 'id': '5', 'FirstName': 'Itoa', 'LastName': 'Saburo'}
{'Gender': 'man', 'id': '4', 'FirstName': 'Ito', 'LastName': 'Saburo'}
{'Gender': 'woman', 'id': '3', 'FirstName': 'Hanako', 'LastName': 'Takahashi'}
7. 引用・参考記事
8. 独自ソリューション「PrismScaler」について
PrismScalerは、開発・運用を要さずにたった3ステップで、AWSやAzure、GCPなどのマルチクラウド基盤構築を実現するWebサービスです。
エンジニアの大変な作業を肩代わり
・自動構築
・自動監視
・構成可視化
クラウド基盤に関わる作業を以上のように効率化します。
SRE/DevOpsエンジニアが行う大変な作業を肩代わりします。
高品質な汎用クラウド基盤の実現
・クラウド基盤構築/クラウド移行
・クラウドの保守運用・コスト最適化
など幅広い利用シーンを想定しています。IaaSやPaaSを適切に組み合わせた数百を超える高品質な汎用クラウド基盤を容易に実現できます。
興味を持たれた方には、無料で資料を提供しております。
お気軽にご相談ください。
9. お問合せ
株式会社Definerでは、
・ITの上流から下流まで一気通貫のワンストップソリューションをご提供。
・AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミット。
・少ないエンジニアで事業が成長する仕組みづくりの実現。
・エンジニアが喜ぶ、採用しやすい環境づくりの実現。
・高速なアジャイル開発環境の実現。
・自社プロダクトとしてPrismScalerを展開。
上記事業内容を進行しております。
※「開発者ブログ」では、エンジニアの入門編として有益な情報を無料公開しています。
ご相談やお問い合わせは「株式会社Definer」へ。
10. Definerに関して。
・ Definer Incは、ITの上流から下流まで一気通貫のワンストップソリューションをご提供しております。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。