Object Storage Best Practices
Pulumi Cloud uses object storage for checkpoint (state) files, policy packs, and other data. This page covers the storage architecture and best practices for production deployments.
You can also use a local filesystem path for storage instead of a cloud object store. See Local storage for configuration details.
Storage architecture
Pulumi Cloud uses multiple storage buckets. The exact set depends on your installer and which features are enabled:
| Bucket | Created by | Purpose |
|---|---|---|
| Checkpoints | All installers | Stack state files. Frequent read/write, versioning critical |
| Policy packs | All installers | Policy package artifacts. Infrequent write, frequent read |
| Service metadata / ESC | EKS, AKS, GKE, ECS | Service metadata and Pulumi ESC (Environments, Secrets, Configuration) data |
| Engine events | EKS | Engine event logs from pulumi up / pulumi destroy operations |
The checkpoints and policy packs buckets are required for all deployments. The service metadata / ESC bucket is required if you use Pulumi ESC. The engine events bucket is optional - engine events are stored in the database if this bucket is not configured.
The BYO Infrastructure installer does not create buckets. You must provide pre-existing S3-compatible buckets via configuration.
For bucket environment variable configuration, see API component - Object storage.
High availability
- Use your cloud provider’s natively redundant storage (S3, Azure Blob, GCS) - these replicate across AZs by default.
- For on-prem deployments with S3-compatible storage (MinIO, Ceph): deploy across multiple nodes with erasure coding.
Cross-region replication
For disaster recovery, enable cross-region replication on your checkpoint and policy pack buckets:
- AWS S3: Enable S3 Cross-Region Replication (CRR) to a bucket in a secondary region.
- Azure Blob Storage: Use object replication or geo-redundant storage (GRS/GZRS).
- GCP Cloud Storage: Use dual-region or multi-region buckets, or configure Turbo Replication for faster RPO.
See Backup and recovery for full disaster recovery procedures.
Versioning and lifecycle
- Enable versioning on the checkpoints bucket. This protects against accidental state corruption.
- Configure lifecycle rules:
- Delete non-current object versions after 30 days.
- Clean up incomplete multipart uploads after 14 days.
- These reduce storage costs while maintaining a recovery window.
Thank you for your feedback!
If you have a question about how to use Pulumi, reach out in Community Slack.
Open an issue on GitHub to report a problem or suggest an improvement.