使用 Boto 将 JSON 数据从 CloudTrail 加载到 DynamoDB

问题描述

我正在开发一个 Boto3 脚本,该脚本可以将 Cloudtrail 中的属性加载到 Dynamodb 中。我的 cloudtrail 日志的格式是 JSON。我对 DynamoDB 还很陌生,我不确定我在哪里犯了错误。我正在尝试存储“S3BucketName”以及“goodbucket3”存储桶的名称。 cloudtrail 的名称是“GoodTrail”。这是我目前想到的。我收到此错误“ResourceNotFoundException:调用 PutItem 操作时发生错误 (ResourceNotFoundException):未找到请求的资源”

import boto3

dynamodb = boto3.resource('dynamodb')

table =dynamodb.create_table(
    TableName='GoodTable',AttributeDeFinitions=[
    {
      "AttributeName": "S3BucketName","AttributeType": "S"
    }
    ],KeySchema=[
    {
      "AttributeName": "S3BucketName","KeyType": "HASH"
    }
  ],ProvisionedThroughput={
    "ReadCapacityUnits": 1,"WriteCapacityUnits": 1
  }
)

table = dynamodb.Table('GoodTable')
response = table.put_item(
    Item= {
        'S3BucketName': 'some-bucket-name','content': f'{path}',}
)

解决方法

你的table只是一本字典。它不是 dynamodb 的 table 对象。

纠正问题:

import boto3

dynamodb_res = boto3.resource('dynamodb')

table = dynamodb_res.Table('GoodTable')

response = table.put_item(
    Item= {
        'S3BucketName': 'some-bucket-name','content': f'{path}',}
)

print(response)

根据您的定义,您没有任何 id。表中的主键是 S3BucketName,而不是 id