benbjohnson/litestream · error
invalid s3 access point arn: %s
Error message
invalid s3 access point arn: %s
What it means
splitS3AccessPointARN rejected the string: it does not contain the ':accesspoint/' marker, so it is not a parseable S3 Access Point ARN even though the URL was routed here as one. Malformed or truncated ARN in the replica URL.
Source
Thrown at replica_url.go:148
// Parse query string if present
if queryStr != "" {
query, err = url.ParseQuery(queryStr)
if err != nil {
return "", "", "", nil, fmt.Errorf("parse query string: %w", err)
}
}
return "s3", bucket, CleanReplicaURLPath(key), query, nil
}
// splitS3AccessPointARN splits an S3 Access Point ARN into bucket and key components.
func splitS3AccessPointARN(s string) (bucket, key string, err error) {
lower := strings.ToLower(s)
const marker = ":accesspoint/"
idx := strings.Index(lower, marker)
if idx == -1 {
return "", "", fmt.Errorf("invalid s3 access point arn: %s", s)
}
nameStart := idx + len(marker)
if nameStart >= len(s) {
return "", "", fmt.Errorf("invalid s3 access point arn: %s", s)
}
remainder := s[nameStart:]
slashIdx := strings.IndexByte(remainder, '/')
if slashIdx == -1 {
return s, "", nil
}
bucketEnd := nameStart + slashIdx
bucket = s[:bucketEnd]
key = remainder[slashIdx+1:]
return bucket, key, nil
}View on GitHub (pinned to 4ed7a308f6)
Solutions
- Use the full ARN format arn:aws:s3:us-east-1:ACCOUNT:accesspoint/NAME in the replica URL
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at replica_url.go:148 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of benbjohnson/litestream@4ed7a308f6 (2026-09-06).
Data as JSON: /api/errors/1252a652494436c7.
Report an issue: GitHub.