Skip to content

winterbaume-costandusagereport

AWS Cost and Usage Report service implementation for winterbaume.

Coverage

MetricValue
ServiceCost and Usage Report Service
AWS modelcost-and-usage-report-service
ProtocolawsJson1.1
winterbaume coverage7/7 operations (100.0%)
stubs (routed, returns empty/default)0/7 operations (0.0%)
moto coverage0/7 operations (0.0%)
floci coverage0/7 operations (0.0%)
kumo coverage0/7 operations (0.0%)
Coverage report date2026-05-13

Server-mode usage

Start winterbaume-server and point the AWS CLI at it:

sh
cargo run -p winterbaume-server -- --host 127.0.0.1 --port 5555
sh
export AWS_ENDPOINT_URL=http://localhost:5555
aws costandusagereport help

Example

rust
use aws_sdk_costandusagereport::config::BehaviorVersion;
use aws_sdk_costandusagereport::types::{
    AdditionalArtifact, CompressionFormat, ReportFormat, SchemaElement, TimeUnit,
};
use winterbaume_core::MockAws;
use winterbaume_costandusagereport::CostAndUsageReportService;

#[tokio::main]
async fn main() {
    let mock = MockAws::builder()
        .with_service(CostAndUsageReportService::new())
        .build();

    let config = aws_config::defaults(BehaviorVersion::latest())
        .http_client(mock.http_client())
        .credentials_provider(mock.credentials_provider())
        .region(aws_sdk_costandusagereport::config::Region::new("us-east-1"))
        .load()
        .await;

    let client = aws_sdk_costandusagereport::Client::new(&config);
    let definition = aws_sdk_costandusagereport::types::ReportDefinition::builder()
        .report_name("daily-cur")
        .time_unit(TimeUnit::Daily)
        .format(ReportFormat::Csv)
        .compression(CompressionFormat::Gzip)
        .additional_schema_elements(SchemaElement::Resources)
        .s3_bucket("my-bucket")
        .s3_prefix("reports/")
        .s3_region("us-east-1".into())
        .additional_artifacts(AdditionalArtifact::Athena)
        .build()
        .expect("definition");
    client
        .put_report_definition()
        .report_definition(definition)
        .send()
        .await
        .expect("put_report_definition should succeed");
    let resp = client
        .describe_report_definitions()
        .send()
        .await
        .expect("describe");
    for d in resp.report_definitions() {
        println!("Report: {}", d.report_name());
    }
}

Implemented APIs (7)

  • DeleteReportDefinition
  • DescribeReportDefinitions
  • ListTagsForResource
  • ModifyReportDefinition
  • PutReportDefinition
  • TagResource
  • UntagResource

Released under the Apache-2.0 License. This project is not affiliated with or endorsed by Amazon Web Services.