Chapter13 boto3(後半)

今回は、boto3を用いたAWS APIの操作を行った。前半では、S3のオペレーションを行ったので、後半ではDynamoDBのオペレーションを行う。

デプロイ

まずは、デプロイを行う。/dojo/dynamodbディレクトリにて、デプロイの手順を行う。

デプロイが終了すれば、TableName(本記事では※1とする。)が出力されたため、この文字列を記録。

Basic Read and Write

では、早速前半と同じ方法でjupyter notebookを開き、コードを入力してみる。

まずは、boto3、pprint、datetimeをインポートし、sessionにboto3のセッション、ddbにセッションのリソース(今回はdynamodb)を格納し、table_nameには、デプロイ時に出力された※1の内容を、tableにddbのテーブルを格納しておく。

これで準備は整ったので、アイテムを追加していく(In [5])。まずは、respを定義し、そこにput_item()メソッドでデータを書き込む。それぞれのデータを格納し終われば、get_item()とpprintで確認してみた。すると、入力したデータがすべて返ってきた。これで、追加できたことが確認できた。

次は、要素の内容の更新を行ってみる。update_item()メソッドで、prefectureの内容をAomoriと変化してみる。この際、prefecture属性を:val1とし、それを用いて更新を行っている。更新が終われば、["prefecture"]を呼び出し、確認してみる。すると、Tokyo→Aomoriに更新されていることが確認できた。

次に、statusの内容を更新してみる。前のprefectureのように、直接SET statusとはできないため、#at1という変数を定義し、そこにstatusを対応させている。これで、resercedからcompletedに書き換えられた。

さて、最後にdelete_item()メソッドでデータを削除しておく。そして、再度get_item()で削除されていることを確認した。すると、以下のように表示された。これで、削除されていることを確認できた。

Query and Scan

次は、データベースに検索をかけ、データを取得してみる。まずは、jsonをインポートし、data.jsonを読み込み形式で開く。そして、batch_writer()メソッドを使い、jsonファイルをテーブルに書き込んでいく。

準備が整ったので、早速queryで検索をかけてみる。KeyConditionExpressionに検索内容を格納し、pprintで検索結果を表示させてみる。すると、二つの検索結果が帰ってきた。これは、ワクチンを一回目と二回目に打ったときのデータを返している。

そこで、一回目のデータのみを参照にするため、&で検索を更にかけてみた。doseの値が1の場合のみ出力するようにしてみる。すると、一回目のデータのみが表示された。

次は、Queryの実行を行う。ageの値が11、つまり、歳が11歳であるユーザーのみを出力するようにしてみる。すると、ageが11であるIsonoKatsuoというユーザーのワクチン接種データが確認できた。

次は、prefectureを検索してみる。prefectureの値がTokyoの人のみを出力する。すると、HugutaTaraoとHugutaMasuoの二人の出力結果が得られた。

次に、条件を満たすアイテムの個数を検索してみた。scan()メソッドで検索をかけることができる。itemsにアイテムの個数を格納し、表示してみると、Number of items 8と出力された。

また、1MB以上の文字列を出力するためには、何度かScanを繰り返す必要があるため、whileで繰り返しScanを行う方法も実行した。こちらもNumber of items 8と出力された。

次は検索もかけてみる。27歳以下の人数を検索してみた。すると、以下のような出力結果が得られた。27歳以下の人物は3名いることがわかった。

次に、ある日時の予約一覧を見てみる。すると、IsonoNamiheiというユーザーが2021年7月25日に予約したことが確認できた。

続いて、ある属性のみを抜き出してみる。ProjectionExpressionで、取り出したい属性を入力し、表示させると、この二つのみがこのように横に表示された。

Backing up a Table

続いては、バックアップを作成してみる。まずは、clientにdynamodbのクライアントを格納し、create_backupで、バックアップの作成を行う。

これで、バックアップの作成は完了したので、実際にバックアップの情報を取得し、確認した。

AWSからも確認してみる。DynamoDB/テーブルから、バックアップタブをクリックし、バックアップが一つあるのを確認した。

続いては、バックアップの復元を行ってみた。まず、アップデートの手順で情報を書き換える。

次に、バックアップの復元を行う。restore_table_from_backup関数を用いることで、バックアップの復元を行った。

ここで、復元したテーブルを見てみる。すると、最初はCREATINGと表示されたままだが、少し待ってから再度実行すると、ACTIVEに変化した。早速、復元されたテーブルの情報を取得する。すると、Decimal('4')だったデータがDecimal('3')に復元されたことが確認できた。

これで一通りやることは終わったので、テーブルとバックアップを削除した。更に、スタックも削除しておいた。

こうして、AWSをboto3で操作した。