LoginSignup
3
1

More than 5 years have passed since last update.

AWS Cloud9 + Python3 の環境からDynamoDBを利用する

Last updated at Posted at 2018-09-10

概要

AWS Cloud9 + Python3 の環境からDynamoDBを利用するサンプルプログラムです。
DynamoDBに保存されているToDoリストをPython3で表示させます。
※本プログラムを実行するにはIAMにてDynamoDBへのアクセス権限が必要になります。

GitHub

サンプルのプログラムのリポジトリは下記のURLになります。
https://github.com/acecrc/dynamodb_python3_sample

開発環境

開発環境にはAWS Cloud9を利用しています。
pythonとpipのバージョンは下記の通りです。

$ python -V
Python 3.6.5

$ pip -V
pip 18.0 from /home/ec2-user/environment/dynamodb_python3_sample/venv/lib64/python3.6/dist-packages/pip (python 3.6)

IAMの権限確認

AWS Cloud9の開発環境からDynamoDBに接続する場合には、DynamoDBへのアクセス権限が必要になります。AWS Cloud9上で動作するアプリケーションの権限は、ユーザーアカウントの権限に紐付いているので下記の手順で確認を行ってください。

AWSのトップページでIAMで検索を行ってください。

01_IAMの権限確認.png

画面左からユーザーへのリンクをクリックしてください。

 02_IAMの権限確認.png

自分のアカウントのユーザー名をクリックしてください。

03_IAMの権限確認.png

アクセス権限に「AWSDynaomDBFullAccess」を追加する必要があります。
「アクセス権限の追加」を選択して、以降の手順で権限を付与してください。

04_IAMの権限確認.png

「既存のポリシーを直接アタッチ」を選択し、「AWSDynaomDBFullAccess」を選択してDBへのアクセス権限を付与してください。

05_IAMの権限確認.png

仮想環境の構築

下記のコマンドで仮想開発環境を構築してください。

$ python -m venv venv
$ source venv/bin/activate

パッケージのインストール

まず「requirements.txt」というファイル名で下記の内容を保存してください。

requirements.txt
boto3==1.7.71
botocore==1.10.71
docutils==0.14
jmespath==0.9.3
python-dateutil==2.7.3
s3transfer==0.1.13
six==1.11.0

次に下記のコマンドでパッケージをインストールできます。

$ pip install -r requirements.txt
$ pip freeze

DynamoDBの作成

下記のコマンドでDynamoDBに「todos」テーブルを作成してください。

aws dynamodb create-table \
    --table-name todos \
    --attribute-definitions \
        AttributeName=id,AttributeType=N \
    --key-schema AttributeName=id,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1

DynamoDBのドキュメント追加

下記のコマンドで「todos」テーブルにドキュメントを追加してください。

aws dynamodb put-item \
    --table-name todos  \
    --item \
        '{"id": {"N": "1"}, "done": {"BOOL": false}, "task": {"S": "タスク1"}}'

aws dynamodb put-item \
    --table-name todos  \
    --item \
        '{"id": {"N": "2"}, "done": {"BOOL": false}, "task": {"S": "タスク2"}}'

aws dynamodb put-item \
    --table-name todos  \
    --item \
        '{"id": {"N": "3"}, "done": {"BOOL": false}, "task": {"S": "タスク3"}}'

プログラムの作成

下記のようにプログラムを作成してください。
プログラムの内容はDynamoDBからtodosテーブルを指定して一覧を取得するものになります。

dynamodb_python3_sample.py
import boto3
from boto3.session import Session

# DynamoDBを利用するための準備
session = Session()                         #セッションの作成
dynamodb = session.resource('dynamodb')     #リソースにDynamoDBを選択
table = dynamodb.Table('todos')             #テーブルにtodosを指定

# DynamoDBからtodosの一覧を取得
def dynamodb_scan():
    try:
        results = table.scan()  #todosの一覧を取得
    except:
        raise
    return results

# メイン関数
def main():
    results = dynamodb_scan()   #dynamodb_scan()関数を実行
    print(results)              #取得した結果を表示

if __name__ == '__main__':
    main()                      #メイン関数を実行

プログラムの実行

下記のコマンドでプログラムを実行してください。
正常に動作していればtodosテーブルから情報の一覧を取得し表示されます。

$ python dynamodb_python3_sample.py
{'Items': [
{'id': Decimal('3'), 'task': 'タスク3', 'done': False}, 
{'id': Decimal('2'), 'task': 'タスク2', 'done': False}, 
{'id': Decimal('1'), 'task': 'タスク1', 'done': False}], 
'Count': 3, 'ScannedCount': 3, 
'ResponseMetadata': {'RequestId': 'UJ75MEPDEA9M4237TSK0VUE4JFVV4KQNSO5AEMVJF66Q9ASUAAJG', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Mon, 10 Sep 2018 01:56:46 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '233', 'connection': 'keep-alive', 'x-amzn-requestid': 'UJ75MEPDEA9M4237TSK0VUE4JFVV4KQNSO5AEMVJF66Q9ASUAAJG', 'x-amz-crc32': '994443345'}, 'RetryAttempts': 0}}

以上です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1