Supercharge Your AWS S Write Operations with Conditional Requests (With TypeScript Example!)

Listen to this Post

AWS recently introduced Conditional Writes for S3, a powerful feature that enhances data integrity and cost efficiency when working with S3 objects. This prevents accidental overwrites and redundant writes, especially in distributed systems where multiple processes might attempt to modify the same object simultaneously.

You Should Know:

1. How Conditional Writes Work

Conditional writes in S3 allow you to specify conditions (like If-Match, If-None-Match, If-Modified-Since, or If-Unmodified-Since) before an object is written. If the condition fails, the write operation is rejected.

2. TypeScript Example

Here’s a practical TypeScript example using AWS SDK v3:

import { S3Client, PutObjectCommand, PutObjectCommandInput } from '@aws-sdk/client-s3';

const client = new S3Client({ region: 'us-east-1' });

async function uploadWithCondition( 
bucket: string, 
key: string, 
body: string, 
expectedETag?: string 
) { 
const params: PutObjectCommandInput = { 
Bucket: bucket, 
Key: key, 
Body: body, 
};

if (expectedETag) { 
params.Conditional = { 
IfMatch: expectedETag, // Only overwrite if ETag matches 
}; 
}

try { 
const response = await client.send(new PutObjectCommand(params)); 
console.log('Upload successful:', response.ETag); 
return response.ETag; 
} catch (error) { 
console.error('Conditional write failed:', error); 
throw error; 
} 
}

// Usage 
await uploadWithCondition('my-bucket', 'data.json', JSON.stringify({ key: 'value' })); 
  1. Linux Command for S3 Conditional Uploads (AWS CLI)
    You can use AWS CLI to conditionally upload files:

    aws s3api put-object \ 
    --bucket my-bucket \ 
    --key data.json \ 
    --body data.json \ 
    --if-none-match ""  Only upload if file doesn’t exist 
    

4. Checking Object Metadata Before Upload

Use `head-object` to verify metadata before writing:

aws s3api head-object --bucket my-bucket --key data.json 

5. Automating with Bash Script

!/bin/bash 
ETAG=$(aws s3api head-object --bucket my-bucket --key data.json --query 'ETag' --output text 2>/dev/null)

if [ -z "$ETAG" ]; then 
echo "File does not exist, uploading..." 
aws s3api put-object --bucket my-bucket --key data.json --body data.json 
else 
echo "File exists, skipping upload." 
fi 

What Undercode Say:

Conditional writes in AWS S3 are a game-changer for ensuring data consistency and cost optimization in cloud storage. By leveraging If-Match, If-None-Match, and other conditions, developers can prevent race conditions and redundant operations.

Additional Useful Commands:

  • Check S3 Object Versioning Status:
    aws s3api get-bucket-versioning --bucket my-bucket 
    
  • Force Overwrite in S3 (Disable Checks):
    aws s3 cp data.json s3://my-bucket/data.json --no-progress --acl bucket-owner-full-control 
    
  • Windows PowerShell S3 Upload with Conditions:
    Write-S3Object -BucketName my-bucket -Key data.json -File .\data.json -ConditionalHeader @{ "If-None-Match" = "" } 
    

Expected Output:

A secure, race-condition-free S3 upload system that ensures no duplicate writes and reduced storage costs.

Reference:

References:

Reported By: Darryl Ruggles – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅

Join Our Cyber World:

💬 Whatsapp | 💬 TelegramFeatured Image