You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3将CloudTrail日志导入DynamoDB时遇资源未找到错误求助

解决DynamoDB PutItem时的ResourceNotFoundException问题

嘿,我来帮你搞定这个问题!你遇到的ResourceNotFoundException其实是个很常见的新手坑——DynamoDB创建表不是即时可用的,它需要花一点时间完成初始化(比如分配存储、配置吞吐量等),你刚调用完create_table就立刻执行put_item,这时候表还处于创建中的状态,自然会提示找不到资源。

另外我也帮你把代码调整成符合你需求的样子:存储桶名设为goodbucket3,加上CloudTrail名称GoodTrail的字段。

修正后的完整代码

import boto3

# 初始化DynamoDB资源
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
    }
)

# 关键步骤:等待表创建完成,直到状态变为ACTIVE
table.wait_until_exists()
print("表GoodTable已创建完成并可用")

# 获取表对象(其实上面的table变量已经可用,这一步可省略,保留也没问题)
table = dynamodb.Table('GoodTable')

# 注意:这里要确保path变量已定义,替换成你实际的路径值
path = "/cloudtrail/logs/path"

# 插入符合你需求的Item
response = table.put_item(
    Item= {
        'S3BucketName': 'goodbucket3',  # 你要存储的目标桶名
        'CloudTrailName': 'GoodTrail',  # 添加CloudTrail名称字段
        'content': f'{path}'
    }
)

print("数据插入成功,响应信息:", response)

关键说明

  • 等待表就绪:table.wait_until_exists()是核心修复点,它会阻塞程序直到表状态变为ACTIVE,这时候再执行put_item就不会报错了。
  • 变量定义:你原来的代码里path变量没有定义,运行时会触发NameError,我给它加了示例赋值,记得替换成你的实际路径。
  • 匹配需求的Item:按照你的要求把S3BucketName设为goodbucket3,并新增CloudTrailName字段存储你的CloudTrail名称GoodTrail。

额外提醒

如果你的脚本可能重复运行(比如再次执行时表已经存在),create_table会抛出ResourceInUseException,可以用try-except块处理这个情况:

try:
    table = dynamodb.create_table(...)
    table.wait_until_exists()
except dynamodb.meta.client.exceptions.ResourceInUseException:
    table = dynamodb.Table('GoodTable')
    print("表GoodTable已存在,直接使用")

内容的提问来源于stack exchange,提问作者user14226172

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:25:11