CLI কেন কনসোলের চেয়ে আলাদা, একটা কমান্ডের পাঁচটা অংশ, `aws configure` আসলে কোথায় কী লেখে, profile দিয়ে একাধিক অ্যাকাউন্ট, output ফরম্যাট চারটে, `--filters` আর `--query`-র আসল পার্থক্য, আর দলিল মুখস্থ না করে কমান্ড খুঁজে বের করার পদ্ধতি।
এই কোর্সে আমরা শুরু থেকেই CLI ব্যবহার করেছি, কিন্তু কখনো থেমে প্রশ্নটা করিনি: কনসোল যখন আছে, তখন টার্মিনালে কমান্ড লেখার দরকার কী?
উত্তরটা "CLI দ্রুত" নয় — অনেক কাজে কনসোল দ্রুত। আসল পার্থক্যটা অন্য জায়গায়, আর তিনটে জিনিসে:
১. CLI পুনরাবৃত্তিযোগ্য।
কনসোলে একটা কাজ করা মানে কয়েকটা ক্লিক, যেগুলোর কোনো রেকর্ড থাকে না। একটা CLI কমান্ড একটা লেখা — কপি করা যায়, একটা ফাইলে রাখা যায়, একটা pull request-এ পাঠানো যায়, আর ছ-মাস পরে আবার চালানো যায়।
পর্ব ৮-এর launch template-এর যুক্তিটাই, কিন্তু আরো সাধারণ রূপে: ক্লিক একটা ঘটনা, কমান্ড একটা নথি।
২. CLI-তে প্রশ্ন করা যায়।
এটা কম আলোচিত কিন্তু রোজকার কাজে সবচেয়ে কাজের। কনসোল তোমাকে যা দেখায়, সেটাই দেখায় — একটা তালিকা, কয়েকটা কলাম, কিছু ফিল্টার। কিন্তু "কোন instance-গুলোতে Environment tag নেই?" বা "কোন ডিস্কগুলো কোথাও লাগানো নেই আর ২০ GiB-র বেশি?" — এই প্রশ্নগুলোর জন্য কনসোলে কোনো ঘর নেই।
CLI-তে আছে, আর এটাই এই পর্বের দ্বিতীয়ার্ধের বিষয়।
৩. CLI স্ক্রিপ্ট করা যায়।
একটা কমান্ড একটা লুপে বসানো যায়, একটা শর্তে বসানো যায়, আর তার আউটপুট আরেকটা কমান্ডে পাঠানো যায়। কনসোলে এর কোনো সমতুল্য নেই।
তাহলে কখন কোনটা? একটা সৎ ভাগ:
আর একটা পরামর্শ যেটা অনেক সময় বাঁচায়: নতুন কোনো সেবা শেখার সময় কনসোলে একবার করো, তারপর CLI-তে একবার করো। কনসোল তোমাকে শেখায় কী কী সিদ্ধান্ত আছে; CLI তোমাকে দেয় সেটা আবার করার উপায়। উল্টো ক্রমে শুরু করলে কমান্ডের flag-গুলো অর্থহীন মনে হয়, কারণ তুমি জানো না ওগুলো কোন ঘরের প্রতিরূপ।
AWS CLI-র প্রতিটা কমান্ড একই আকৃতির, আর সেটা জানা থাকলে অপরিচিত একটা কমান্ডও পড়া যায়। ছবিতে ভাগটা আছে:
aws ec2 describe-instances --filters ... --output table │ │ │ │ │ १ २ ३ ४ ५
২ আর ৩ নম্বরের নামকরণে একটা নিয়ম আছে, আর সেটা জানলে অনেক কমান্ড আন্দাজ করা যায়:
describe- আর list--এর পার্থক্যটা ঐতিহাসিক, যুক্তিসঙ্গত নয় — EC2 describe- ব্যবহার করে, IAM list-। মনে রাখার কিছু নেই; দরকার হলে পরের সেকশনের পদ্ধতি দিয়ে খুঁজে নাও।
আর ৫ নম্বর অংশটা — global option — আলাদা করে জানা দরকার, কারণ এগুলো সব কমান্ডে কাজ করে:
শেষ দুটো আলাদা করে বলার মতো।
--no-cli-pager — CLI v2-তে লম্বা আউটপুট ডিফল্টে একটা pager-এ খোলে, আর স্ক্রিপ্টে সেটা আটকে যায়। স্ক্রিপ্টে এটা সবসময় দেওয়া উচিত (বা AWS_PAGER="" বসানো)।
১২৫টি অংশের ২৫টি দেখানো হয়েছে, ১০০টি বাকি