Skip to main content
These examples connect installation configuration, client endpoint configuration, resource-level choices and native target verification. Each example uses a disposable resource and checks the result through both the origin API and the target cloud.
Use dedicated test resources. Do not run these commands against a production bucket, table, database or Cosmos DB account without an approved test and cleanup plan.

S3 to Google Cloud Storage

This example keeps the S3 API at the application boundary and stores object bytes in Google Cloud Storage.

What belongs in each layer

There is no service row whose only purpose is to say S3 maps to Cloud Storage.

1. Write the installation configuration

Before applying it, review S3 on Google Cloud. Confirm that the application operations, multipart behavior, metadata, checksums and error paths are covered.

2. Confirm target access

Use the native verification identity to confirm that the target bucket exists:
This proves only that the verification path can see the bucket. The adapter runtime identity is configured separately and should have only the permissions required by the mapping.

3. Start a local adapter or use the installed endpoint

For a local configuration check, start the directed mapping:
Copy the listening endpoint printed by the command:
The explicit --backend is a property of this single-service local command. A provisioned origin-and-target installation derives the same normal mapping from the catalog.

4. Route only S3

Set the AWS SDK’s service-specific endpoint for the current process:
Or construct one Python client with an explicit endpoint:
Do not set a general AWS endpoint. STS, DynamoDB and other clients should keep their own routes.

5. Write one object

Choose an origin-facing bucket name, a disposable key and a small body:
If you did not set AWS_ENDPOINT_URL_S3, pass --endpoint-url "$T9_CLOUD_ADAPTER_ENDPOINT" to each AWS CLI command instead.

6. Verify both interfaces

Read through S3:
Read the native object:
The S3 ETag and Cloud Storage generation are different identifiers. Compare bytes and the application-visible metadata instead of assuming those identifiers are interchangeable.

7. Clean up the test object

The native describe should report that the current object is no longer readable. A target with versioning or soft delete can retain recoverable data, so inspect those settings before treating deletion as physical erasure.

What this proves

This bounded test proves that the selected client can reach the adapter, the tested S3 operations are served by the selected mapping, and the expected object bytes appear in the target bucket. It does not prove compatibility for untested S3 operations, migrate existing objects or validate production throughput.

DynamoDB to provisioned Azure Cosmos DB

This example creates an orders table through the DynamoDB API, selects the provisioned Cosmos DB mapping and gives the target container an autoscale maximum of 40,000 RU/s.

What belongs in each layer

The capacity choice belongs to the table. It is not a global installation setting.

1. Write the installation configuration

Review DynamoDB on provisioned Cosmos DB. Pay particular attention to numeric precision, transaction scope, index planning, stream ownership and table lifecycle.

2. Set endpoint and native target values

AWS_ENDPOINT_URL_DYNAMODB affects DynamoDB clients in this process. It does not redirect S3 or STS.

3. Build a complete CreateTable request

Save it as create-orders-table.json. BillingMode remains part of the DynamoDB-facing description. The tuning tag controls the effective Cosmos DB autoscale maximum. A later DynamoDB UpdateTable does not automatically resize the Cosmos container. 40,000 RU/s is an example. Choose a supported value for the target region and workload. The documented tuning field accepts a minimum of 1,000 RU/s in 1,000-RU/s increments.

4. Create the table through DynamoDB

Keep the command timestamp and response. Table creation can return before every target-side action is ready, so poll the origin API instead of assuming the first response is final:

5. Verify the Cosmos DB container and size

Inspect the target container:
Read its effective autoscale maximum:
Expect 40000. If the container exists but the throughput differs, preserve the create response and use Explain before changing capacity.

6. Exercise the key schema

Write one disposable item:
Read it back through DynamoDB:
This verifies one point write and strongly consistent point read through the origin API. It does not test conditional writes, queries, transactions, secondary indexes, streams or sustained throughput.

7. Measure before accepting the capacity

Run a representative workload and record:
  • request rate and item-size distribution;
  • consumed RUs and throttled requests;
  • p50, p95 and p99 latency at the application;
  • partition-key distribution;
  • adapter CPU, memory and target-call latency;
  • Cosmos DB cost at the selected maximum;
  • retries and origin-shaped errors.
Do not infer production capacity from a successful PutItem. The autoscale maximum defines a cost and throttling envelope, not a performance guarantee.

8. Clean up deliberately

Delete the test item first:
Delete the table only if this example created a dedicated disposable table and the resource owner approved deletion:
Logical DeleteTable and native physical cleanup are separate in this mapping. Confirm target state and billing through Azure rather than assuming the DynamoDB response deleted the Cosmos DB account or shared database.

What this proves

This test proves that the table request selected the provisioned Cosmos DB mapping, the key schema was accepted, the effective autoscale maximum matches the tuning tag, and one item can round-trip through the DynamoDB API. It does not prove compatibility for every expression, transaction, index or stream behavior.

Promote a tested configuration

Before moving either example beyond development:
  1. save the reviewed installation file without secrets;
  2. record the exact service profile and adapter version tested;
  3. replace disposable identities with dedicated least-privilege runtime identities;
  4. repeat the operation matrix the application actually uses;
  5. establish native backup, recovery, quota and alerting procedures;
  6. document endpoint rollout and rollback;
  7. retain a redacted Explain example for the service;
  8. test cleanup and uncertain-write recovery.
Use configuration files for review and promotion rules, and Tuning Your Adapters before adding any other target-native directive.