2024-12-08
Amazon DynamoDBメモ【1・AWSコマンドでの基本操作】
続きです。DBにデータ登録するのに1行1行打つのは現実的でなく、CSVファイルからインポートしたいのでやってみました。
テンプレートファイルのダウンロード
GitHubから取得します。
git clone https://github.com/aws-samples/csv-to-dynamodb.git
テンプレートファイルの編集
csv-to-dynamodb/CloudFormation/CSVToDynamo.templateを編集します。
新規のDynamoDBテーブルを作ることになるので、テーブルの定義を編集します。
23行目からあたりの、
"Resources": {
"DynamoDBTable":{
"Type": "AWS::DynamoDB::Table",
"Properties":{
"TableName": {"Ref" : "DynamoDBTableName"},
"BillingMode": "PAY_PER_REQUEST",
"AttributeDefinitions":[
{
"AttributeName": "uuid",
"AttributeType": "S"
}
],
"KeySchema":[
{
"AttributeName": "uuid",
"KeyType": "HASH"
}
],
"Tags":[
{
"Key": "Name",
"Value": {"Ref" : "DynamoDBTableName"}
}
]
}
},
を、自分の作成するテーブルに変更します。
"Resources": {
"DynamoDBTable":{
"Type": "AWS::DynamoDB::Table",
"Properties":{
"TableName": {"Ref" : "DynamoDBTableName"},
"BillingMode": "PAY_PER_REQUEST",
"AttributeDefinitions":[
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema":[
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"Tags":[
{
"Key": "Name",
"Value": {"Ref" : "DynamoDBTableName"}
}
]
}
},
保存します。
CloudFormationを開く
スタックの作成→スタックの新規作成
テンプレートの準備完了→テンプレートファイルのアップロードを選択
ファイルの選択で、上記編集したCSVToDynamo.templateを指定して「次へ」
スタックの名前はとりあえず「CSVToDynamo」、パラメータは以下のように
BucketName:CSVファイルをアップロードするs3バケット名(新規作成になる):test338844-csvtodynamo
DynamoDBTableName:対象とするDynamoDBテーブル名(新規作成になる):testtable2
FileName:CSVファイル名:insert.csv
として「次へ」
スタックオプションはひとまずデフォルトのまま「次へ」
「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」にチェックを入れ「送信」
しばらく待って、スタックがCREATE_COMPLETEになれば成功です。
S3を開く
https://s3.console.aws.amazon.com/s3/home?region=ap-northeast-1#
test338844-csvtodynamoが新規作成されているので、ここにinsert.csvをアップロードすればOK。
insert.csvを作成してs3にアップする
insert.csvの中身は
"key, "sval", "nval" "キー1", "文字列1", "1" "キー2", "文字列2", "2" "キー3", "文字列3", "3"
などとして、s3に設置。
aws s3 cp insert.csv s3://test338844-csvtodynamo/
自動インサートされたか確認
aws dynamodb scan --table-name testtable
{
"Items": [
{
"sval": {
"S": "文字列2"
},
"key": {
"S": "キー2"
},
"nval": {
"S": "2"
}
},
{
"sval": {
"S": "文字列1"
},
"key": {
"S": "キー1"
},
"nval": {
"S": "1"
}
},
{
"sval": {
"S": "文字列3"
},
"key": {
"S": "キー3"
},
"nval": {
"S": "3"
}
}
],
"Count": 3,
"ScannedCount": 3,
"ConsumedCapacity": null
}
インサートはされているようだが、nvalが数値でなく当然文字列になってしまっている。
一旦全部消して、
"key", "sval", "nval"
"キー1", {"S":"文字列1"}, { "N":"1" }
"キー2", {"S":"文字列2"}, { "N":"2" }
"キー3", {"S":"文字列3"}, { "N":"3" }
などとして再度アップロードしてみたが、今度は自動インサートされず反応してくれなかった。うーむ。。
と、いうより、その前にたかがCSVインサートなのにめんどくさすぎる。
しかも、1テーブルにつきスタックとS3バケットを常に手動で新規作成しなくてはいけないんじゃ使い物にならない。
やりたいのは、複数テーブルの一括作成とそのそれぞれの中身の一括インサートなわけで。。
調べたところawsコマンドを使ったJSONファイル指定ならデータの一括追加ができるらしいので、次の回ではそれをやってみます↓
Amazon DynamoDBメモ【3・JSONファイルからの一括データ登録】
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
CUDA13環境下でGPU使用版のllama-cpp-pythonを導入する
CUDA13環境下でGPU使用版のPyTorchを導入する
LetsEncrypt/certbotの証明書自動更新がエラーになる場合
Wav2Lipのオープンソース版を改造して外部から呼べるAPI化する
Wav2Lipのオープンソース版で静止画の口元のみを動かして喋らせる
【iOS】アプリアイコン・ロゴ画像の作成・設定方法
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【2】
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【1】
【Xcode】iPhone is not available because it is unpairedの対処法
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
CUDA13環境下でGPU使用版のPyTorchを導入する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
【ひかり電話+VoIPアダプタ】LANしか通ってない環境でアナログ電話とFAXを使う
LinuxからWindowsの共有フォルダをマウントする
Googleスプレッドシートを編集したら自動で更新日時を入れる
size_tとssize_tを使い分けてSegmentation Faultを予防する