Theoretically you can install the AWS CLI1 to import JSON files to DynamoDB.
Once you install this, you’ll want to add it to your path.
To connect, do this:
aws configure
To fill out the prompts, you’ll need to create a username/password.2. Then find the region name3.
To use DynamoDB, create a table, then create a policy with rights to add/select from the table4.
The policy will look like this:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:UpdateItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:472846177579:table/talks" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": [ "${www.amazon.com:user_id}" ] } } } ] }
You can save this in the policy editor5, attach policy to the user you made earlier 6. Alternately, there is a permission called AmazonDynamoDBFullAccess that you can add.
Then, this will work:
aws dynamodb list-tables
Theoretically this should work:
aws dynamodb batch-write-item --request-items file://1.json
However, the AWS tool seems to suffer from the disastrous Python unicode problems:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 3747-3748: ordinal not in range(128)
I went through a few dozen blog posts / Github tickets, and nothing solved it.
Rather, I found that once you get this far, it’s worth just writing Python scripts to upload data:
from __future__ import print_function
import boto3
import json
import decimal
# endpoint_url="http://localhost:8000"
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
table = dynamodb.Table('talks')
with open("d:\\projects\\image-annotation\\data\\talks\\json\\1\\1.json") as json_file:
row = json.load(json_file, parse_float = decimal.Decimal)
table.put_item(
Item={
'id_i': str(row['id_i'])
}
)
- http://docs.aws.amazon.com/cli/latest/userguide/installing.html#install-msi-on-windows [↩]
- https://console.aws.amazon.com/iam/home#users [↩]
- http://docs.aws.amazon.com/general/latest/gr/rande.html [↩]
- https://console.aws.amazon.com/dynamodb/home?region=us-east-1#tables:selected=talks [↩]
- https://console.aws.amazon.com/iam/home?#policies [↩]
- https://console.aws.amazon.com/iam/home?#users/gary [↩]