🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

AWS S3 সম্পূর্ণ গাইড 2026: বালতি, বোটো3 এবং উৎপাদনের ধরণ

⏱️4 min read  ·  675 words

Amazon S3 (সিম্পল স্টোরেজ সার্ভিস) হল ক্লাউড স্টোরেজের ভিত্তি। প্রতিটি গুরুতর AWS কাজের চাপ S3 ব্যবহার করে — স্ট্যাটিক ওয়েবসাইট এবং ব্যাকআপ থেকে ডেটা লেক এবং ML প্রশিক্ষণ ডেটাসেট পর্যন্ত। এই সম্পূর্ণ নির্দেশিকাটি 2026 সালে প্রথম বালতি থেকে উৎপাদন-গ্রেড আর্কিটেকচার পর্যন্ত S3 কভার করে।

S3 কি?

S3 হল অবজেক্ট স্টোরেজ: ফাইল (বস্তু) বালতিতে সংরক্ষিত, HTTP এর মাধ্যমে অ্যাক্সেস করা হয়। মূল ধারণা:

  • বালতি— বস্তুর জন্য ধারক, বিশ্বব্যাপী অনন্য নাম
  • অবজেক্ট— ফাইল + মেটাডেটা, প্রতিটি 5TB পর্যন্ত
  • Key— বালতির মধ্যে বস্তুর সম্পূর্ণ পথ (যেমন,images/2026/photo.jpg)
  • অঞ্চল— বালতি একটি AWS অঞ্চলে বাস করে
  • স্থায়িত্ব— 99.999999999% (11 নাইন) — ডেটা 3+ AZ জুড়ে প্রতিলিপি করা হয়েছে

বালতি তৈরি করা এবং ফাইল আপলোড করা

# AWS CLI setup
pip install awscli
aws configure  # enter Access Key, Secret, region

# Create bucket
aws s3 mb s3://my-bucket-2026 --region us-east-1

# Upload file
aws s3 cp file.jpg s3://my-bucket-2026/images/file.jpg

# Upload directory
aws s3 sync ./dist s3://my-bucket-2026/website/ --delete

# List objects
aws s3 ls s3://my-bucket-2026/
aws s3 ls s3://my-bucket-2026/images/ --recursive

# Download
aws s3 cp s3://my-bucket-2026/data.csv ./data.csv

# Delete
aws s3 rm s3://my-bucket-2026/old-file.txt
aws s3 rm s3://my-bucket-2026/old-folder/ --recursive

Boto3 — S3 এর জন্য Python SDK

import boto3
from botocore.exceptions import ClientError
from pathlib import Path
import json

# Initialize client
s3 = boto3.client('s3', region_name='us-east-1')

# Or use resource (higher-level API)
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket('my-bucket-2026')

# Create bucket
def create_bucket(bucket_name: str, region: str = 'us-east-1') -> bool:
    try:
        if region == 'us-east-1':
            s3.create_bucket(Bucket=bucket_name)
        else:
            s3.create_bucket(
                Bucket=bucket_name,
                CreateBucketConfiguration={'LocationConstraint': region}
            )
        return True
    except ClientError as e:
        print(f"Error: {e}")
        return False

# Upload file
def upload_file(file_path: str, bucket: str, key: str = None) -> bool:
    if key is None:
        key = Path(file_path).name
    try:
        s3.upload_file(file_path, bucket, key,
                       ExtraArgs={'ContentType': 'image/jpeg'})
        return True
    except ClientError as e:
        print(f"Upload failed: {e}")
        return False

# Upload from memory (no temp file needed)
def upload_bytes(data: bytes, bucket: str, key: str, content_type: str = 'application/octet-stream'):
    s3.put_object(Body=data, Bucket=bucket, Key=key, ContentType=content_type)

# Download
def download_file(bucket: str, key: str, dest_path: str):
    s3.download_file(bucket, key, dest_path)

def download_bytes(bucket: str, key: str) -> bytes:
    response = s3.get_object(Bucket=bucket, Key=key)
    return response['Body'].read()

# List objects
def list_objects(bucket: str, prefix: str = '') -> list[dict]:
    paginator = s3.get_paginator('list_objects_v2')
    objects = []
    for page in paginator.paginate(Bucket=bucket, Prefix=prefix):
        objects.extend(page.get('Contents', []))
    return objects

# Delete
def delete_object(bucket: str, key: str):
    s3.delete_object(Bucket=bucket, Key=key)

স্ট্যাটিক ওয়েবসাইট হোস্টিং

# Enable static hosting
aws s3 website s3://my-website-bucket/   --index-document index.html   --error-document 404.html

# Bucket policy for public access
cat > policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::my-website-bucket/*"
  }]
}
EOF

aws s3api put-bucket-policy   --bucket my-website-bucket   --policy file://policy.json

# Deploy website
aws s3 sync ./dist s3://my-website-bucket/   --delete   --cache-control "max-age=31536000"   --exclude "*.html"

# HTML files: no cache
aws s3 sync ./dist s3://my-website-bucket/   --exclude "*" --include "*.html"   --cache-control "no-cache"

# Website URL: http://my-website-bucket.s3-website-us-east-1.amazonaws.com

পূর্ব-স্বাক্ষরিত URL – নিরাপদ অস্থায়ী অ্যাক্সেস

# Generate time-limited URLs for private objects

def get_presigned_url(bucket: str, key: str, expiry_seconds: int = 3600) -> str:
    url = s3.generate_presigned_url(
        'get_object',
        Params={'Bucket': bucket, 'Key': key},
        ExpiresIn=expiry_seconds
    )
    return url

# Upload pre-signed URL — let clients upload directly to S3
def get_presigned_upload_url(bucket: str, key: str, content_type: str, expiry: int = 300) -> dict:
    response = s3.generate_presigned_post(
        bucket,
        key,
        Fields={'Content-Type': content_type},
        Conditions=[
            {'Content-Type': content_type},
            ['content-length-range', 1, 10 * 1024 * 1024]  # max 10MB
        ],
        ExpiresIn=expiry
    )
    return response

# FastAPI endpoint returning upload URL
# @app.get('/upload-url')
# def get_upload_url(filename: str, content_type: str):
#     key = f'uploads/{uuid4()}/{filename}'
#     url_data = get_presigned_upload_url(BUCKET, key, content_type)
#     return {'url': url_data['url'], 'fields': url_data['fields'], 'key': key}

S3 স্টোরেজ ক্লাস (কস্ট অপ্টিমাইজেশান)

ক্লাস কেস ব্যবহার করুন খরচ
স্ট্যান্ডার্ড প্রায়শই অ্যাক্সেস করা হয় $0.023/GB
ইন্টেলিজেন্ট-টিয়ারিং অজানা অ্যাক্সেস প্যাটার্ন অটো-অপ্টিমাইজ করুন
স্ট্যান্ডার্ড-আইএ বিরল প্রবেশাধিকার $0.0125/GB
হিমবাহ তাত্ক্ষণিক আর্কাইভ, এমএস পুনরুদ্ধার $0.004/GB
হিমবাহ গভীর আর্কাইভ সম্মতি সংরক্ষণাগার $0.00099/GB

জীবনচক্র নীতি — স্বয়ংক্রিয় খরচ সঞ্চয়

{
  "Rules": [{
    "ID": "archive-old-logs",
    "Status": "Enabled",
    "Filter": {"Prefix": "logs/"},
    "Transitions": [
      {"Days": 30, "StorageClass": "STANDARD_IA"},
      {"Days": 90, "StorageClass": "GLACIER"}
    ],
    "Expiration": {"Days": 365}
  }]
}

S3 সংস্করণ এবং প্রতিলিপি

# Enable versioning
aws s3api put-bucket-versioning   --bucket my-bucket   --versioning-configuration Status=Enabled

# Cross-region replication (in AWS Console or CloudFormation)
# Requires versioning on both source and destination buckets

# List object versions
aws s3api list-object-versions --bucket my-bucket --prefix data.csv

নিরাপত্তা সর্বোত্তম অভ্যাস

  • পাবলিক অ্যাক্সেস ব্লক করুনডিফল্টরূপে – শুধুমাত্র আপনার যা প্রয়োজন তা খুলুন
  • IAM ভূমিকা ব্যবহার করুনEC2/Lambda অ্যাক্সেসের জন্য — কোনো হার্ডকোডেড কী নেই
  • সার্ভার-সাইড এনক্রিপশন সক্ষম করুন(SSE-S3 বা SSE-KMS)
  • CloudTrail সক্ষম করুন– সমস্ত S3 API কল অডিট করুন
  • VPC এন্ডপয়েন্ট ব্যবহার করুনEC2 থেকে ব্যক্তিগত অ্যাক্সেসের জন্য
  • MFA ডিলিট সক্ষম করুনসমালোচনামূলক ডেটা সহ সংস্করণযুক্ত বালতিগুলির জন্য

S3 অসীমভাবে মাপযোগ্য, প্রতি GB প্রতি পয়সা খরচ করে এবং প্রতিটি AWS পরিষেবার সাথে একীভূত হয়। CLI এবং Boto3 আয়ত্ত করুন, ব্যবহারকারী আপলোডের জন্য পূর্ব-স্বাক্ষরিত URL ব্যবহার করুন, খরচ অপ্টিমাইজেশানের জন্য জীবনচক্র নীতিগুলি ব্যবহার করুন এবং সর্বদা ডিফল্টরূপে সর্বজনীন অ্যাক্সেস ব্লক করুন৷

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা