PythonでDynamoDBのテーブルをGSIで検索する

f:id:hagaji:20190920231530p:plain

DynamoDBのテーブルに対して、インデックス(GSI)を使って検索するためのスクリプトPythonで書いたので、ザクっとメモっておく。

import sys
import boto3
from boto3.session import Session
from boto3.dynamodb.conditions import Key, Attr

# Search List
id_list = ['29311b1e-360eedfe8098',
           '22ff8c79-e14ccf5800fe',
           '29311b1e-360eedfe8098'
           ]

# Argument
args = sys.argv

# AWS CLI Credential 
session = Session(profile_name=args[1])
credentials = session.get_credentials()
# DynamoDB Session
dynamodb = boto3.resource(
    'dynamodb',
    region_name='ap-northeast-1',
    aws_access_key_id=credentials.access_key,
    aws_secret_access_key=credentials.secret_key,
    aws_session_token=credentials.token
)

DYNAMO_TABLE_NAME = 'UserInfo'
TABLE = dynamodb.Table(DYNAMO_TABLE_NAME)

ret_data = ""

# Search List loop
for id_item in id_list:
    # GSI Search
    response = TABLE.query(
                    IndexName='UserIndex',
                    KeyConditionExpression=Key('ID').eq(id_item),
                    FilterExpression=Attr('Authority').eq(3))
    # Count Check
    if response['Count'] > 0:
        for items in response['Items']:
            ret_data += '"' + items['ID'] + '","' + items['MailAddress'] + '"\n'
    else:
        print(id_item, ' --None--')

print(ret_data)