AMAZON S3 → STACKIT OBJECT STORAGE
Amazon S3 to STACKIT Object Storage
STACKIT Object Storage speaks the S3 API, so your applications keep their S3 clients. StackToIT writes the bucket and its keys in Terraform, turns versioning and lifecycle rules into S3 API documents, and hands your team a runbook for the data copy.
A versioned, encrypted bucket with a lifecycle rule
A small estate written for this page and assessed by StackToIT on 4 November 2026. Left: the input. Right: the resource blocks of the STACKIT Terraform the engine wrote; the review comments that sit above each block in the file are left out here.
resource "aws_s3_bucket" "documents" {
bucket = "acme-customer-documents"
}
resource "aws_s3_bucket_versioning" "documents" {
bucket = aws_s3_bucket.documents.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "documents" {
bucket = aws_s3_bucket.documents.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_public_access_block" "documents" {
bucket = aws_s3_bucket.documents.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_lifecycle_configuration" "documents" {
bucket = aws_s3_bucket.documents.id
rule {
id = "expire-old-versions"
status = "Enabled"
filter {}
noncurrent_version_expiration {
noncurrent_days = 90
}
}
}resource "stackit_objectstorage_credentials_group" "consumers" {
for_each = var.objectstorage_consumers
project_id = var.project_id
name = each.key
}
resource "stackit_objectstorage_credential" "consumers" {
for_each = var.objectstorage_consumers
project_id = var.project_id
credentials_group_id = stackit_objectstorage_credentials_group.consumers[each.key].credentials_group_id
}
resource "stackit_objectstorage_bucket" "documents" {
project_id = var.project_id
name = "acme-customer-documents"
}Bucket and keys in Terraform
The bucket keeps its name, and a credentials group with a key is written for each consumer you list.
Versioning and lifecycle through the S3 API
The STACKIT provider has no attributes for them, but STACKIT’s S3 API takes them. StackToIT writes the exact documents for that step.
Encryption at rest
The AES256 default encryption needs no setting: a STACKIT bucket applies it anyway.
Public access guardrail named
STACKIT has no public access block. The code says so and asks you to confirm that no bucket policy makes the bucket public.
The S3 API documents StackToIT wrote
Applied to the new bucket through STACKIT’s S3 API, before any data is copied.
{
"Status": "Enabled"
}{
"Rules": [
{
"ID": "expire-old-versions",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 90
}
}
]
}The data copy runbook
Written beside the bucket for your team, step by step.
Decide and prepare
Check the open decisions, create the bucket and apply the S3 API documents.
Copy while the writers run
A first copy with checksums, including the version history, while the applications keep writing to S3.
Cutover window
Stop the writers, copy what changed, and switch the consumers to the STACKIT endpoint and keys.
Verify and accept
Compare counts, key lists and content, check with the application, and retire the source after acceptance.
The decisions recorded for this bucket
The assessment of this one bucket names who answers what before the data moves.
| Decision | Owner | What it settles |
|---|---|---|
| Allow calls to the Object Storage S3 API | Platform Architect | The S3 API of STACKIT Object Storage carries no version label, and its product documentation does not establish it as generally available. The plan makes no call to such an API until you allow it, so the versioning and lifecycle steps wait for this answer. |
| Choose the copy method | Data Architect | The AWS CLI, rclone, or a tool of your own. The choice depends on the size of the data, the write rate and the downtime the business accepts, and the source states none of them. |
| Confirm versioning and lifecycle | Storage Architect | Two settings the draft carries through the S3 API. Versioning, once enabled on STACKIT, can only be suspended, not disabled. |
| Confirm that no policy makes the bucket public | Identity Architect | The public access block has no counterpart, so the bucket policy alone decides who can read. |
Source: the StackToIT assessment of this bucket, 4 November 2026.
What the plan knows about the move
Beyond the Terraform, the plan holds the steps of the copy for both tools and the checks that end it.
Wave 1, no dependencies
The bucket sits in the first wave of the dependency order and depends on no other unit, so it can move first.
Two copy tools, no replication
The plan holds initial copy, delta sync, write freeze, final sync, reconcile and cleanup steps for the AWS CLI and for rclone. S3 Replication is not offered, because it copies between Amazon S3 buckets.
Checks after the transfer
Object count and bytes, key lists, content, versions, an application check and a rollback limit. Three manual reconcile steps compare source and target with the writers stopped.
The way back
On a no-go the clients still point at the source, which is current to the freeze. The owner records the point after which a rollback loses data before the window.
Nine work packages
They run from the service-gap steps through copy, consumer switch and the go-or-rollback record to retiring the source.
Unknowns stay named
Data size, change rate, tolerated downtime, recovery point and data classification are not in the source. The plan lists them as not known and assumes no default.
Proven on a real AWS estate
The AWS Retail Store Sample App, a public Terraform project from AWS, assessed by StackToIT and published in full, exactly as the run wrote it.
View Case Study- 282
- Terraform resource declarations analyzed
- 44
- migration units identified
- 38
- target units generated, from 52 considered
- 331
- plan steps written
Questions storage teams ask
Do our applications need a new SDK?
No. STACKIT Object Storage implements the S3 API, so S3 clients keep working with a new endpoint and new keys. StackToIT checks the configuration of each bucket against what STACKIT supports.
Does StackToIT copy the data?
No. StackToIT changes nothing in any cloud. It writes the runbook, and your team runs the copy with the tool it prefers.
What about buckets encrypted with KMS?
STACKIT answers aws:kms encryption with 501 Not Implemented, so StackToIT names buckets that use it and asks for a decision on their encryption.
Can we use S3 Replication for the copy?
No. The plan does not offer it, because S3 Replication copies between Amazon S3 buckets. It holds the steps for two copy tools instead, the AWS CLI and rclone, and leaves room for a tool of your own.
Can we switch versioning off again on STACKIT?
No. Once enabled, versioning can only be suspended. StackToIT says so beside the versioning document, so you decide before you apply it.
What happens to expiry until the lifecycle rule is applied?
Until then nothing expires, and data is kept longer than the source’s retention allows. After the rule is applied, the run notes that STACKIT removes expired objects by deletion routines within about 10 days.
Sources
Your next move: STACKIT.
Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.