Skip to main content
This quickstart keeps the AWS S3 API at the application boundary while Cloud Adapter stores object data in Azure Blob Storage.
AWS API requests pass through Tensor9 Cloud Adapter to Azure services.AWS API requests pass through Tensor9 Cloud Adapter to Azure services.

Outcome

You will upload one S3 object through Cloud Adapter, read it back through S3, verify the corresponding Azure blob, test a missing-object response, and delete the object. Review S3 on Azure first. Common object CRUD is supported. Azure’s flat listing does not reproduce every S3 delimiter and CommonPrefixes behavior. Copy downloads and re-uploads the object, multi-delete becomes multiple backend calls, and one PutObject is limited to 5,000 MiB in this profile. Bucket policy, ACL, retention, and legal-hold behavior remain outside the object endpoint.

Prerequisites

  • an installed AWS-origin Cloud Adapter endpoint;
  • an S3 to Blob Storage service adapter;
  • an origin-side AWS test identity;
  • an Azure runtime identity for the adapter and a separate read-only verification identity;
  • an existing test storage account and container;
  • AWS CLI v2 and Azure CLI.

Set test values

AWS_REQUEST_CHECKSUM_CALCULATION=WHEN_REQUIRED keeps this smoke test on the required S3 checksum path. Validate optional flexible-checksum behavior separately if your application enables it. The commands below use an explicit --endpoint-url. To route every S3 client in the process instead, set AWS_ENDPOINT_URL_S3="$T9_CLOUD_ADAPTER_ENDPOINT" and omit the command-level override.

Verify the native target

If this fails, repair the verification identity or target selection before testing adaptation.

Write through S3

Read it back through the origin API:

Verify the Azure blob

Check the content type and metadata in both views. Do not assume S3 version IDs, delete markers, ETags, or account-level settings have identical Azure representations.

Verify the error path

Request a missing key through S3 and retain the command timestamp, AWS error code, and message. The normal AWS CLI output does not expose arbitrary response headers; use an SDK with structured, redacted response metadata when a support workflow requires them. A target-side authorization failure should not be mistaken for not found.
S3 can return permission denied instead of not found when the caller lacks permission to establish that the object is missing.

Clean up

The native check should show that the current blob is no longer readable. Versioned or soft-delete-enabled targets can retain prior versions or recovery state; use an unversioned disposable target for this quickstart or remove the created version explicitly. Keep container deletion separate from object cleanup.

Production readiness

Test listing prefixes and pagination, copy sizes, batch-delete failure handling, metadata, conditional requests, retries, and any versioning behavior the application depends on. Plan existing-object migration separately. Record which Azure account settings are shared across adapted buckets, and establish an uncertain-write check before enabling automatic retries. Use Debugging Your Adapters when the S3 response and Azure state disagree.