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ファイルからの一括データ登録】
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
オープンソースリップシンクエンジンSadTalkerをDebianで動かす
ファイアウォール内部のOpenAPI/FastAPIのdocsを外部からProxyPassで呼ぶ
Debian 12でsshからshutdown -h nowしても電源が切れない場合
【Windows&Mac】アプリのフルスクリーンを解除する方法
Debian 12でtsコマンドが見つからないcommand not found
Debian 12でsyslogやauth.logが出力されない場合
Debian 12で固定IPアドレスを使う設定をする
Debian 12 bookwormでNVIDIA RTX4060Ti-OC16GBを動かす
【Debian】apt updateでCD-ROMがどうのこうの言われエラーになる場合
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Apache】サーバーに同時接続可能なクライアント数を調整する
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Intel Macbook2020にBootCampで入れたWindows11 Pro 23H2のBluetoothを復活させる
【PHP】Mail/mimeDecodeを使ってメールの中身を解析(準備編)
【ひかり電話+VoIPアダプタ】LANしか通ってない環境でアナログ電話とFAXを使う
Windows11のコマンドプロンプトでテキストをコピーする