处理AWS详细账单报告的工具
项目描述
详情
处理AWS详细账单报告的实用程序。
安装
安装详情最简单的方法是使用pip
$ pip install details
背景
详情包解析AWS生成的详细账单报告。您可以在[此处](http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/detailed-billing-reports.html)了解更多关于这些报告以及如何为您的AWS账户启用它们。迄今为止的所有测试都使用的是[详细账单报告(包含资源和标签)],但代码应该可以与任何详细账单报告一起使用。
一旦您在账户上启用了详细账单,AWS将开始将配置的S3存储桶中保存这些CSV报告。详情库假设您已将报告从S3复制到本地文件系统,并在必要时解压缩。使用[AWS CLI](https://aws.amazon.com/cli)从S3复制文件是一个好方法。
详细账单文件包含每笔账单的记录(行项),具有按小时细分的粒度。这些文件可能会变得非常大。这些工具目前将整个月份的数据加载到内存中,因此如果账单非常大,这可能变得不切实际。但是,已经证明它可以在包含数百万行项记录的详细账单报告上合理地工作。
用法
一旦您在本地有可用的详细账单CSV文件,您可以像这样将其加载到详情中
>>> import details >>> total = details.load('../../bills/123456789012-aws-billing-detailed...')
变量costs现在指向一个包含整个账单文件所有行项数据的Cost对象。请注意,根据您的详细账单报告的大小,此操作可能需要一些时间。
现在您拥有了Cost对象,您可以开始请求它以获取详细账单报告的总费用。
>>> total.cost Decimal('1035.7549984289') >>>
这个数字应该与您的账单总额相匹配(或者非常接近,有时会有一些舍入误差)。需要注意的是,返回的值是一个Python Decimal类型数字。Decimal类型用于避免在details包内部出现进一步的舍入误差。您可以将这些Decimal数字当作普通的int或float来使用。有关Decimal类型的更多信息,请参阅[此处](https://docs.pythonlang.cn/2/library/decimal.html)。
除了告诉您总费用外,Cost对象还有一些其他有用的方法。
用于查找CSV数据中的所有列
>>> total.columns ['InvoiceID', 'PayerAccountId', 'LinkedAccountId', 'RecordType', 'RecordId', 'ProductName', 'RateId', 'SubscriptionId', 'PricingPlanId', 'UsageType', 'Operation', 'AvailabilityZone', 'ReservedInstance', 'ItemDescription', 'UsageStartDate', 'UsageEndDate', 'UsageQuantity', 'BlendedRate', 'BlendedCost', 'UnBlendedRate', 'UnBlendedCost', 'ResourceId', 'user:Name', 'user:Role']
用于查找特定列中出现的所有可能值
>>> total.values('ProductName') ['Amazon Simple Storage Service', 'Amazon DynamoDB', 'Amazon Route 53', 'Route 53 Domain Registration Service', 'AWS Data Pipeline', 'Amazon Elastic MapReduce', 'Amazon RDS Service', 'Amazon Zocalo', 'Amazon Simple Queue Service', 'AWS Support (Business)', 'Amazon Simple Notification Service', 'Amazon CloudFront', 'AWS Support (Developer)', 'Amazon WorkSpaces', 'Amazon Redshift', 'Amazon Elastic Compute Cloud', 'Amazon ElastiCache', 'Amazon Kinesis', 'Amazon CloudSearch', 'Amazon SimpleDB', 'Amazon Simple Email Service']
此列表将仅包括在此账户中实际使用的服务。
如果这份报告是为一个汇总账户准备的,您可以像这样找到此报告中包含的所有账户
>>> total.values('LinkedAccountId') ['012345678901', '123456789012'] >>>
上述总金额代表此账户中所有服务的费用。如果您想找到仅针对EC2服务的费用,可以使用filter方法。该方法接受一个过滤器列表,其中每个过滤器由一个列名和一个正则表达式组成。该列名中的每个值都会与正则表达式进行比较,如果匹配,则将其收集并返回,与另一个Costs对象中的其他匹配项一起返回。
>>> ec2 = total.filter([('ProductName', '.*Compute Cloud.*')]) >>> ec2.cost Decimal('315.88505363') >>>
因此,此账户中EC2的总费用为$315.89。然而,如果您将其与您的账单进行比较,您可能会发现它们并不匹配。原因(可能是)这个数字包括了作为EC2使用的一部分产生的所有数据传输费用,但您的月度账单将数据传输费用作为一个单独的项目列出。为了分摊数据传输费用
>>> data_transfer = ec2.filter([('UsageType', '.*DataTransfer.*')]) >>> data_transfer.cost Decimal('35.45916220') >>>
因此,如果您从EC2费用中减去数据传输费用,您应该会看到账单上的数字。
项目详情
details-0.2.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c767226f01c65a752e5bf750200f6101fff7b25a128d686b6af58f694d7a7aa4 |
|
MD5 | 03832bf2ca3b15ab577ef653029e69fc |
|
BLAKE2b-256 | 6c387d3efb9e661add4f31f938807ee24746f0948c5aa25a59a29a81d2b75bbf |