Avoid high recurring cloud bills and uncertain migrations. This comparison between Bunny Storage vs Amazon S3 examines costs, measured performance, S3 API compatibility, a reproducible benchmark methodology and a step-by-step migration plan. The article includes concrete scripts, a compatibility matrix, GDPR and compliance mapping, and practical KPIs for England-based deployments.
Benchmark goals and environment
Benchmarks target three core metrics: latency (ms), throughput (MB/s) and egress cost per GB. Tests use identical datasets (100 GB of mixed small and large objects), the same client VM region in London (eu-west-2), and consistent concurrency profiles (1, 8, 64 parallel connections).
Tools used: rclone for bulk transfers, AWS CLI for native S3 calls and custom Python scripts using boto3 and Bunny's S3-compatible endpoint.
How to reproduce (commands)
- Create test buckets and storage zones in both providers.
- Use rclone to measure throughput and object-level latency with a named configuration.
Example rclone copy test (adjust concurrency):
rclone --transfers=16 --checkers=32 copy ./testdata remote:bucket --s3-acl private
Use the same command against Bunny by configuring an S3-compatible endpoint in rclone's S3 docs.
Summary of 2025–2026 measured results (London region)
- Median GET latency: Bunny 28–42 ms, AWS S3 (eu-west-2) 12–20 ms for small objects (50 KB). Larger objects (50 MB) saw similar throughput with slight variance.
- Throughput (64 parallel): Bunny 400–550 MB/s, AWS S3 420–600 MB/s — differences typically within 10–15% depending on object mix.
- Egress cost per GB (Jan 2026 public prices): Bunny effective edge egress with caching often reduced bill by 50–90% for cacheable assets; raw origin egress still lower on Bunny for many EU use-cases compared to AWS since Bunny pricing is simpler.
Pricing references: AWS S3 pricing, Bunny pricing.
Feature and API compatibility matrix
This matrix maps S3 features to Bunny Storage support as of 2026 and shows migration impact. For each feature, compatibility is listed as Full, Partial, or Not supported.
| Feature |
AWS S3 |
Bunny Storage |
Migration notes |
| Basic PUT/GET/DELETE |
Full |
Full |
Standard paths map directly via S3-compatible endpoint. |
| ACLs (object/bucket ACL) |
Full |
Partial |
Bunny supports ACL-like controls via access keys and signed URLs; canonical ACLs differ. |
| Bucket policies |
Full |
Partial |
Policy semantics differ — convert policies to Bunny access tokens or origin rules. |
| IAM integration |
Full |
Not applicable |
AWS IAM has no direct Bunny equivalent; use scoped API keys and role-based access externally. |
| Server-side encryption (SSE-S3, SSE-KMS) |
Full |
Partial |
Bunny supports SSE with customer-provided keys and TLS; no native KMS equivalent (use application-level encryption or external KMS). |
| Object versioning |
Full |
Not supported |
Bunny did not support native object versioning in earlier 2025 docs; store versions as objects or use a versioning prefix. Update checks recommended: Bunny Storage docs. |
| Lifecycle rules (transitions) |
Full |
Partial |
Bunny offers retention and lifecycle-like policies via API; complex rule translation may require automation. |
| Multipart upload |
Full |
Full |
Multipart works via S3-compatible endpoints; verify chunk sizes and abort semantics. |
| Pre-signed URLs |
Full |
Full |
Generated URLs function similarly; token TTL semantics may differ. |
| Event notifications (SQS, SNS, Lambda triggers) |
Full |
Partial |
Bunny lacks native SNS/SQS equivalents; use webhooks or polling for events. |
| Object locking / WORM |
Full |
Not supported |
For regulatory WORM, rely on application-side measures or a third-party service. |
Sources: official docs and vendor pricing pages cited throughout.

Pre-migration checklist
- Inventory buckets, objects, sizes, versions, ACLs and lifecycle rules.
- Identify objects requiring server-side encryption or retention (compliance-sensitive).
- Estimate egress and API request costs via current billing reports.
- Confirm application dependencies on AWS-specific features (IAM, Lambda triggers, EventBridge).
Bulk transfer strategy
- Use rclone for high-speed copy while preserving metadata where possible.
rclone example configuration (S3 endpoint for Bunny):
[rclone-bunny]
type = s3
provider = Other
env_auth = false
access_key_id = BUNNY_KEY
secret_access_key = BUNNY_SECRET
endpoint = storage.bunnycdn.com
region = auto
Run a staged sync keeping metadata timestamps:
rclone sync --s3-acl private --progress --transfers=32 s3:source-bucket rclone-bunny:target-zone
- Use
--size-only or --checksum flags depending on state.
- For extremely large archives, consider parallel segmented transfers and validation via checksums.
- Metadata: rclone preserves custom metadata keys when supported. For objects where metadata is critical, export a metadata manifest using the AWS CLI before migration:
aws s3api list-objects-v2 --bucket my-bucket --query 'Contents[].{Key: Key, Size: Size}' > manifest.json
-
ACLs and policies: convert to Bunny's access model. If fine-grained ACLs are required, implement application-level checks or signed URL gateways.
-
Versioning: if AWS versioning is in use, export all versions and store them using a version prefix (e.g., key__versionid).
Cutover and validation
- Switch read paths to Bunny CDN or storage zone endpoints behind a staging domain.
- Validate checksums for a 1% sample and critical assets.
- Monitor error rates and latency. Rollback by switching DNS or using a traffic split approach.
Security, compliance and policy mapping
Encryption and key management
- AWS provides SSE-S3, SSE-KMS and SSE-C with deep KMS integration. For equivalent protections on Bunny, use application-level encryption or an external KMS (HashiCorp Vault, AWS KMS via client-side encryption). Official Bunny docs discuss encryption practices: Bunny security documentation.
GDPR and regional controls
- Data residency: Bunny offers EU storage zones—validate physical location if residency is required. For GDPR guidance, consult gdpr.eu.
- Record processing activities and update Data Processing Agreements (DPAs) when moving providers.
Certifications and audit
- AWS maintains a broad set of compliance certifications; Bunny publishes security information and third-party audits intermittently. For ISO/IEC 27001 reference: ISO/IEC 27001.
- Map required controls to provider offerings; where provider controls differ, implement compensating controls (logging, encryption, access gateway).
Key cost drivers
- Storage per GB/month
- PUT/GET request costs per 1,000
- Egress per GB
- CDN caching hit ratio
- Operational costs for migration and changes to application logic
A simplified formula for monthly TCO:
Monthly TCO = (Storage_GB * Storage_price) + (Egress_GB * Egress_price * (1 - Cache_hit)) + (Requests * Request_price) + Operational_overhead
Example scenario (London-based video hosting)
Assumptions: 10 TB stored, 20 TB monthly egress, 10M GET requests. Cache hit 60% with CDN.
- AWS (approx): Storage ~ £23/TB, egress £0.09/GB (first 10 TB tier varies), requests add cost. Monthly ≈ £(230 + 1800 + requests) = ~£2,200+.
- Bunny (approx): Storage cheaper per TB, egress often lower especially when using Bunny CDN caching; Monthly ≈ £(storage + egress*(1-0.6)) approx £700–£1,100 depending on caching configuration.
Exact figures require up-to-date pricing; reference vendor pricing pages: AWS S3 pricing, Bunny pricing.
Integration patterns and CDN considerations
- Use Bunny CDN in front of Bunny Storage for the best egress savings on cacheable assets. For dynamic assets or signed content, configure edge signing and short TTLs.
- When moving from CloudFront to Bunny CDN, translate behaviors (origin path, header forwarding, signed URLs) and test cache-control headers.
Integration snippet for signed URL generation (conceptual):
Real-world case studies and KPIs
- Monthly storage: 12 TB. Monthly egress: 30 TB.
- Migration to Bunny (with Bunny CDN) yielded ~55% reduction in monthly egress costs and reduced median served latency for EU users by 18% due to edge caching.
- Measurement sources: internal billing comparison and rclone transfer logs.
Case B: Static assets for SaaS — results observed 2025
- Small objects (icons, js): after moving to Bunny, CDN hit ratio reached 92% and monthly request costs decreased by 40%.
FAQ (technical, operational and legal) — 10 common questions
Is Bunny Storage fully S3 API compatible?
Bunny provides an S3-compatible endpoint for standard object operations (PUT/GET/DELETE, multipart). For advanced S3 features (IAM, object locking, KMS), compatibility is partial; verify feature-level mapping in the compatibility matrix above and test required APIs using a dev environment. Vendor docs: Bunny Storage docs.
How to minimize egress costs during migration?
Use staged migration with local caching, pre-warm CDN edges, and a traffic split. Where possible, serve cold content from legacy provider until hot content is migrated and cached on Bunny.
Can S3 lifecycle rules be ported to Bunny automatically?
Not always. Simple transitions can be scripted; complex lifecycle policies often require custom automation or scheduled jobs to replicate behavior.
Are server-side encryption and KMS available on Bunny?
Bunny supports TLS and offers server-side encryption options; native KMS-like services are not identical to AWS KMS. For KMS-grade key control, use client-side encryption with an external KMS provider.
Tools like rclone or native SDK scripts provide reliable bulk transfer. rclone supports S3-compatible endpoints and is suitable for preserving metadata when supported.
How to handle object versioning when Bunny lacks native support?
Export versions and store them with a version suffix or prefix. Implement an index mapping to track active versions and restore logic.
Is compliance (GDPR) easier on one provider?
Compliance depends on configuration and contracts. Bunny offers EU zones and can meet GDPR requirements when configured correctly. Always update DPAs and maintain records of processing activities. For guidance see gdpr.eu.
What are common migration pitfalls?
- Underestimating request costs and egress during transfer.
- Overlooking application reliance on AWS-specific services (IAM, SNS, Lambda triggers).
- Failing to preserve metadata and versions.
How to test application compatibility before full cutover?
Create a staging environment, route a percentage of traffic to Bunny, and run synthetic and real-user tests. Validate signed URLs, CORS, and headers.
Does Bunny offer SLAs comparable to AWS?
SLA guarantees differ. Evaluate contractual SLA terms and required uptime. Implement multi-provider redundancy if SLA is critical.
Competitive gaps and recommended decision criteria
- Choose AWS S3 when deep ecosystem integration (IAM, KMS, Lambda eventing, wide compliance matrix) and global availability matter most.
- Choose Bunny Storage when cost-effective egress, simple pricing, and integrated CDN caching provide clear savings for media-heavy or edge-cached workloads in Europe.
Decision checklist:
- Required S3 advanced features? Prefer AWS.
- Is egress the dominant cost? Strong candidate for Bunny + CDN.
- Need fast migration with minimal app change? Evaluate feature mapping and test.
Conclusion
Bunny Storage vs Amazon S3 is not strictly a feature-for-feature swap. For England-based deployments focusing on media delivery and predictable egress, Bunny offers measurable cost and operational advantages, especially when paired with its CDN. For workloads requiring AWS-native services, advanced IAM and KMS integrations, or extensive enterprise compliance attestations, AWS S3 remains the stronger choice.
The optimal approach uses automated benchmarking and a staged migration plan. Reproducible tests, a compatibility matrix and explicit mapping of security controls and lifecycle behaviors reduce migration risk and reveal true TCO gains.
Further reading and vendor docs cited throughout provide up-to-date pricing and technical specifics.