OOAAOWOOAAOW
LinuxNetworkingGitPythonDockerKubernetesHelmAWS
YouTube
কোর্সসমূহ
আমার লাইব্রেরি
LinuxNetworkingGitPythonDockerKubernetesHelmAWS
YouTube
OOAAOW YouTube Channel
Sponsor OOAAOW

DevOps Lab — Bangladeshi learner-দের জন্য তৈরি

সাবস্ক্রিপশনসাবস্ক্রিপশন নীতি

হোম/aws/মডিউল ১৪
১৪

S3 — অবজেক্ট স্টোরেজ, আর যা ফাইলসিস্টেম নয়

ব্লক আর অবজেক্ট স্টোরেজের আসল পার্থক্য, bucket ও key, নাম বিশ্বব্যাপী অনন্য হওয়ার ফল, ছ-টা storage class আর তাদের দুটো অক্ষ, lifecycle rule দিয়ে খরচ নিয়ন্ত্রণ, এগারোটা নয়-এর সৎ ব্যাখ্যা, আর S3-কে ফাইলসিস্টেম ভাবার পাঁচটা ফাঁদ।

s3object storagebucketstorage classlifecycleversioningdurability⏱ ~৩৮ মিনিট
💡 ধারণা

ব্লক আর অবজেক্ট — পার্থক্যটা মাপে নয়

পর্ব ৫-এ আমরা একটা সার্ভারে একটা ডিস্ক পেয়েছি, আর পর্ব ৪-এ একটা বিচ্ছিন্ন ডিস্ক খুঁজে বের করেছি। এবার সম্পূর্ণ আলাদা একটা জিনিস: S3, যেটা স্টোরেজ, কিন্তু ডিস্ক নয়।

পার্থক্যটা অনেকে "S3 বড়, সস্তা" বলে বোঝায় — সেটা সত্যি কিন্তু মূল কথা নয়। আসল পার্থক্যটা হলো তুমি জিনিসটাকে কীভাবে ঠিকানা দাও, আর তার থেকেই বাকি সব কিছু বেরিয়ে আসে।

ব্লক স্টোরেজ (EBS, অর্থাৎ একটা ডিস্ক): তুমি ব্লক নম্বর দিয়ে ঠিকানা দাও। "১,২০,৪৫৬ নম্বর ব্লক থেকে ৪ কিলোবাইট পড়ো।" নাম নেই, ফাইল নেই — শুধু সংখ্যা।

তাহলে ফাইলগুলো কোথা থেকে আসে? একটা filesystem উপরে বসে, যেটা ওই ব্লকগুলোকে ফাইল আর ডিরেক্টরিতে সাজায়। আর ওই সাজানোটা জানে শুধু ওই একটা সার্ভার, যেটায় ডিস্কটা mount করা।

অবজেক্ট স্টোরেজ (S3): তুমি একটা নাম দিয়ে ঠিকানা দাও, HTTP-র উপরে। "devops-lab-logs bucket থেকে logs/app-2026-10-31.log দাও।" কোনো mount নেই, কোনো filesystem নেই, কোনো সার্ভার নেই।

ছবিতে দুটো পাশাপাশি আছে। আর এই এক পার্থক্য থেকে তিনটে ফল বেরোয়, আর তিনটেই ব্যবহারিক:

ফল ১ — ব্লকে এক বাইট বদলানো যায়, অবজেক্টে যায় না।

এটাই সবচেয়ে গুরুত্বপূর্ণ। একটা ডিস্কে তুমি একটা ফাইলের মাঝখানে লিখতে পারো — একটা বাইট বদলাও, বাকিটা অপরিবর্তিত। S3-তে এটা অসম্ভব। একটা অবজেক্টের একটা অক্ষর বদলাতে চাইলে পুরো অবজেক্টটা আবার আপলোড করতে হবে।

আর এটা থেকেই পরিষ্কার হয়ে যায় কোনটা কোথায়:

কীকোন স্টোরেজকেন
একটা ডেটাবেসব্লকসে প্রতি সেকেন্ডে পাতার মাঝখানে লেখে
অপারেটিং সিস্টেমব্লকওখান থেকে boot করতে হয়
লগ, ব্যাকআপ, আপলোডঅবজেক্টএকবার লেখা হয়, আর কখনো সম্পাদিত হয় না
ছবি, ভিডিও, static ফাইলঅবজেক্টঅনেক ক্লায়েন্ট একসাথে পড়ে

ফল ২ — ব্লক একটা সার্ভারে, অবজেক্ট সবার জন্য।

একটা EBS volume একসাথে একটাই instance-এ লাগানো যায়, আর সেটা একটা availability zone-এ সীমিত (পর্ব ৩-এর কথা)। একটা S3 bucket সব জায়গা থেকে পৌঁছানো যায়, আর হাজারটা ক্লায়েন্ট একসাথে পড়তে পারে।

ফল ৩ — দামের পার্থক্য বিরাট।

অবজেক্ট স্টোরেজ প্রতি গিগাবাইটে অনেক সস্তা — আর তার কারণ এই নকশাটাই। কোনো ডিস্ক বরাদ্দ রাখতে হয় না, কোনো filesystem রক্ষণাবেক্ষণ করতে হয় না।

আর পর্ব ৪-এর সেই গুরুত্বপূর্ণ পার্থক্যটা এখানে ফিরে আসে: EBS-এ তুমি বরাদ্দের দাম দাও, S3-তে যা আছে তার দাম দাও। একটা ১০০ GiB ডিস্ক খালি থাকলেও ১০০ GiB-র দাম; একটা bucket-এ ২ GiB থাকলে ২ GiB-র দাম।

তাই প্রশ্নটা মাপের নয়, একটা বাক্যের: "এই জিনিসটার মাঝখানে কিছু কি লিখবে?" উত্তর হ্যাঁ হলে ব্লক, না হলে অবজেক্ট।
দুটো প্যানেলে ব্লক আর অবজেক্ট স্টোরেজের তুলনা। বাঁদিকে একটা ডিস্ক ঠিক একটা সার্ভারে লাগানো, ব্লক নম্বর দিয়ে ঠিকানা দেওয়া, filesystem হিসেবে mount করা, আর সার্ভার যেকোনো বাইট জায়গামত বদলাতে পারে। ডানদিকে একটা অবজেক্ট স্টোর HTTP-র উপরে key দিয়ে পৌঁছানো যায়, যত খুশি ক্লায়েন্ট একসাথে, কোনো mount ছাড়া আর আংশিক লেখা ছাড়া — এক বাইট বদলাতে পুরো অবজেক্ট আবার আপলোড করতে হয়। নিচের একটা ছকে দেখানো ডেটাবেস, অপারেটিং সিস্টেম, লগ, ব্যাকআপ আর static ফাইলের জন্য কোনটা বাছতে হবে
নিচের ছকটাই সিদ্ধান্ত নেওয়ার নিয়ম — "এই জিনিসটার মাঝখানে কিছু লিখবে কি?" ওই এক প্রশ্নে উত্তরটা পাওয়া যায়।
💡 ধারণা

Bucket, key, আর ফোল্ডারের ভ্রম

S3-এর শব্দভান্ডার ছোট — মাত্র তিনটে জিনিস:

শব্দকীউদাহরণ
Bucketএকটা পাত্র, আর নামটা বিশ্বব্যাপী অনন্যdevops-lab-logs
Keyঅবজেক্টের পুরো নামlogs/2026/app-10-31.log
Objectডেটা নিজে, সাথে কিছু metadataফাইলটার বাইটগুলো

আর এখন সবচেয়ে কাজের তথ্যটা, যেটা অনেকে কখনো জানে না:

S3-তে ফোল্ডার নেই।

কনসোলে ফোল্ডার দেখা যায়, aws s3 ls ফোল্ডারের মতো দেখায়, আর সব কিছু ফোল্ডারের মতো আচরণ করে। কিন্তু ওগুলো নেই। যা আছে তা হলো একটা সমতল তালিকা, যেখানে প্রতিটা অবজেক্টের একটা লম্বা নাম:

logs/2026/app-10-31.log
logs/2026/app-09-02.log
logs/2025/app-12-15.log

ওই / চিহ্নগুলো নামের অংশ, কোনো গঠন নয়। কনসোল / দেখে ফোল্ডারের ভ্রম তৈরি করে, কারণ সেটা মানুষের জন্য সুবিধাজনক।

এটা জানা কেন দরকার — তিনটে ব্যবহারিক ফল:

১. "খালি ফোল্ডার" বলে কিছু নেই। একটা ফোল্ডারের ভেতরের শেষ অবজেক্টটা মুছলে ফোল্ডারটা অদৃশ্য হয়ে যায়, কারণ ওটা কখনো ছিলই না।

২. একটা ফোল্ডারের নাম বদলানো সস্তা নয়। একটা filesystem-এ ফোল্ডারের নাম বদলানো একটা তাৎক্ষণিক কাজ — শুধু একটা এন্ট্রি বদলায়। S3-তে ওটা মানে প্রতিটা অবজেক্ট নতুন নামে কপি করা আর পুরোনোগুলো মোছা। হাজারটা ফাইল হলে হাজারটা কপি, আর প্রতিটার জন্য একটা অনুরোধের দাম।

৩. Prefix দিয়ে খোঁজা দ্রুত, মাঝখান দিয়ে খোঁজা নয়। logs/2026/ দিয়ে শুরু হওয়া সব কিছু চাওয়া দ্রুত, কারণ তালিকাটা নাম অনুযায়ী সাজানো। কিন্তু "যেসব নামে error আছে" — এটা পুরো তালিকা পড়া ছাড়া সম্ভব নয়।

🔒

বাকি অংশটা সাবস্ক্রাইবারদের জন্য

১৪৯টি অংশের ৩০টি দেখানো হয়েছে, ১১৯টি বাকি

←

আগের module

AWS CLI — কনসোল থেকে টার্মিনালে

পরের module

Boto3 — Python থেকে AWS চালানো

→