2023-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ファイルからの一括データ登録】
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
TSUKUMOのマルチGPUパソコンWA9J-X211/XTのUbuntu Server 22.04でMYCOEIROINK作成コードを実行し音声合成モデルをトレーニングする
TSUKUMOのマルチGPUパソコンWA9J-X211/XTにUbuntu Server 22.04とCOEIROINK Engineを導入する
Python venv(仮想環境作成)でError: Command returned non-zero exit status 1のエラー対処法
【Ubuntu】プロジェクトごとに複数のPythonバージョンを使い分ける
【PHP】フォーム入力を受け取り出力する
【Ubuntu】aptでインストールしたapache2にソースコンパイルしたphpをマルチスレッドモードで組み込む
【PHP】HTMLファイルを読み込んで文字列変換して出力する
TSUKUMOのマルチGPUパソコンWA9J-X211/XTにUbuntu Server 22.04とVOICEVOX Engineを導入する
【VOICEBOX Engine】403 Forbidden Origin not allowedの対処法
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows版Google Driveが使用中と言われアンインストールできない場合
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Apache】サーバーに同時接続可能なクライアント数を調整する
Googleスプレッドシートを編集したら自動で更新日時を入れる
size_tとssize_tを使い分けてSegmentation Faultを予防する