> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cloud Storage

> Cloud Storage APIs with Cloud Adapter.

This page describes how Cloud Storage maps to services in the environment where the application runs. Some profiles adapt origin API calls; others translate infrastructure or document target-native behavior.

## Supported environments

| Environment | Mapping |
| ----------- | ------- |
| AWS         | API     |
| Azure       | API     |

API means the profile adapts origin API behavior. Infrastructure means the profile changes provisioned resources or documents a target-native alternative without promising an origin API endpoint. Check the operation and capability tables for the behavior your application depends on.

## How the targets compare

Each row compares a capability of Cloud Storage with its adaptation on each target.
A dash means this profile does not state the capability for that target.

### Cloud Adapter

| Capability   | Cloud Storage | AWS  | Azure   |
| ------------ | ------------- | ---- | ------- |
| API coverage | full          | high | partial |

## On AWS

### S3

| Operation                                 | Area    | Support      | Depth        | Notes                                                                                                                                                                                     |
| ----------------------------------------- | ------- | ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bucket lifecycle                          | Buckets | Supported    | Common       | The bucket becomes an S3 bucket, preserving lifecycle rules and versioning.                                                                                                               |
| Retention policy / bucket lock            | Buckets | Out of scope | Full surface | Retention policies are flagged at build time. S3 Object Lock provides the target capability, but this mapping does not configure it.                                                      |
| Uniform bucket-level access               | Buckets | Partial      | Most usage   | Uniform access becomes a bucket policy. The build identifies per-object ACLs that cannot be preserved under that policy.                                                                  |
| Object change notifications               | Events  | Out of scope | Full surface | Object-change notifications are flagged at build time. The target has S3 event notifications, but this mapping does not configure them.                                                   |
| Generation / metageneration preconditions | Objects | Partial      | Most usage   | Preconditions use S3 conditional writes. The returned identifier derives from an S3 versionId; clients that parse generation identifiers must use the translated form.                    |
| Object read / write / delete              | Objects | Supported    | Common       | The adapter translates Cloud Storage JSON API reads, writes, deletes and lists to S3 object operations. XML API requests are re-signed for the target.                                    |
| Storage classes (ARCHIVE / COLDLINE)      | Objects | Partial      | Most usage   | Cloud Storage archival objects can be read immediately; the corresponding S3 archival class requires restoration. Storage classes are selected per bucket to account for this difference. |
| compose                                   | Objects | Partial      | Most usage   | Uses S3 multipart upload. This mapping rejects small source parts rather than re-uploading them. S3 requires at least 5 MiB for each multipart part except the last.                      |

Cloud Storage buckets and objects map to Amazon S3. The adapter handles the Cloud Storage JSON API, so the application keeps its client library.

### Object identities and conditional writes

The adapter maps source object identifiers to the target version or ETag. Keep the returned identifier with later conditional requests rather than treating it as a provider-independent number. Verify rejection of stale writes and concurrent metadata changes as well as successful reads.

### Moving content and readers

Copy the required object bodies, metadata, and historical versions before switching readers. Coordinate writers during the final transfer so later source changes are not lost. Review externally shared links separately: the endpoint that receives a signed URL must understand its signature format.

### Compatibility differences

This mapping rejects compose operations with small source parts rather than re-uploading them. S3's minimum multipart part size is 5 MiB, with an exception for the final part. Storage classes are chosen per bucket: Cloud Storage ARCHIVE and COLDLINE objects can be read synchronously, while their archival S3 counterparts require restoration. Retention policies and object-change notifications are not covered by this mapping, even though S3 provides Object Lock and event notifications.

## On Azure

### Blob Storage

| Operation                                 | Area    | Support      | Depth        | Notes                                                                                                                                                                      |
| ----------------------------------------- | ------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Client-computed V4 signed URLs            | Access  | Out of scope | Most usage   | Rejected at build time: Azure cannot validate a Google V4 signature generated by your application. Supporting these URLs would require the adapter at the public endpoint. |
| Bucket lifecycle                          | Buckets | Supported    | Common       | Each bucket becomes a container. Tensor9 also provisions its parent storage account.                                                                                       |
| Retention policy / bucket lock            | Buckets | Out of scope | Full surface | Retention policies are flagged at build time. The target supports immutability policies, but this mapping does not configure them.                                         |
| Uniform bucket-level access               | Buckets | Partial      | Most usage   | Uniform access applies at container level. The build identifies per-object ACLs that cannot be preserved.                                                                  |
| Generation / metageneration preconditions | Objects | Partial      | Most usage   | Preconditions use Blob Storage ETags. Clients that parse generation identifiers must use the translated form of the returned ETag.                                         |
| Object read / write / delete              | Objects | Supported    | Common       | Object operations use the Blob Storage API. Each bucket becomes a container inside a storage account.                                                                      |
| Storage classes (ARCHIVE)                 | Objects | Out of scope | Most usage   | Rejected at build time: Azure archive-tier blobs require rehydration, without Cloud Storage's immediate archival reads.                                                    |
| compose                                   | Objects | Supported    | Most usage   | Uses Put Block List to assemble the object.                                                                                                                                |

Each Cloud Storage bucket becomes an Azure Blob Storage container inside a storage account provisioned by Tensor9.

### Object identities and conditional writes

The adapter maps source object identifiers to the target version or ETag. Keep the returned identifier with later conditional requests rather than treating it as a provider-independent number. Verify rejection of stale writes and concurrent metadata changes as well as successful reads.

### Moving content and readers

Copy the required object bodies, metadata, and historical versions before switching readers. Coordinate writers during the final transfer so later source changes are not lost. Review externally shared links separately: the endpoint that receives a signed URL must understand its signature format.

### Compatibility differences

Archived reads are rejected because Azure requires rehydration before reading archive-tier blobs. Client-computed Google V4 signed URLs are rejected by this mapping. Azure SAS tokens use a different signature and authorization format; Azure cannot validate the Google signature.

## Existing data and credentials

Selecting a backend does not copy existing data, credentials or access policies. Plan and verify migration separately before changing an application's endpoint. Do not assume an identifier, credential or encrypted value from the origin service works unchanged on the target.

## Configure, tune and debug

Start with [setup](/cloud-adapter/getting-started/overview) and [configuration](/cloud-adapter/configuration/overview). Use [tuning](/cloud-adapter/tuning/overview) to understand supported request tags, [debugging](/cloud-adapter/debugging/overview) to investigate a request, and [High Fidelity Cloud Emulators](/cloud-adapter/local-testing/overview) to validate a bounded reproduction.
