8.2
CNAME বনাম Alias
zone apex-এ কেন CNAME রাখা যায় না, তার বদলে Alias কী করে, আর Alias কোন কোন জিনিসের দিকে দেখাতে পারে।
16 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- Load balancer-এর মতো AWS resource কেন তোমাকে স্থির IP address না দিয়ে একটা hostname দেয়, আর তোমার DNS record-এর জন্য এর মানে কী, সেটা বুঝিয়ে বলতে।
- DNS-এর নিয়ম দিয়ে ব্যাখ্যা করতে, zone apex (
example.com) কেন কখনো CNAME হতে পারে না। - Alias record কী, Route 53 কীভাবে এর উত্তর দেয়, আর type, TTL, খরচ ও health-এর দিক থেকে CNAME-এর সাথে এর তফাত কোথায়, বলতে।
- Alias কোন কোন AWS resource-এর দিকে দেখাতে পারে, প্রত্যেকটার জন্য কী শর্ত লাগে, আর কোথায় দেখাতে পারে না (EC2-এর DNS নাম, RDS endpoint), তার list মুখস্থ বলতে।
- যেকোনো নাম আর target দেখে ঠিক record বেছে নিতে: Alias, Elastic IP দিয়ে A, নাকি CNAME; আর পরীক্ষার “গ্যারান্টিড” প্রশ্নটার উত্তর কয়েক সেকেন্ডে দিতে।
#এই প্রশ্ন পরীক্ষায় আসবেই কেন
Note-এ সোজাসুজি লেখা আছে: CNAME বনাম Alias থেকে একটা প্রশ্ন প্রায় নিশ্চিত। কখনো আলাদা করে আসে, আর তার চেয়েও বেশি আসে load balancer বা CloudFront-এর কোনো প্রশ্নের ভেতরে লুকিয়ে। মূল ধারণাটা ছোট, তাই একবার ঠিকঠাক বুঝে নাও।
#AWS তোমাকে দেয় একটা নাম, address না
তুমি যখন একটা Application Load Balancer বানাও (লেসন ৬.৩), AWS তোমার হাতে কোনো IP address দেয় না। দেয় একটা DNS নাম, এরকম:
my-alb-1234.us-east-1.elb.amazonaws.com
CloudFront দেয় d111111abcdef8.cloudfront.net, API Gateway দেয় …execute-api.us-east-1.amazonaws.com, S3 website দেয় …s3-website-us-east-1.amazonaws.com। প্রতিবার কারণ একটাই: এসব service-এর পেছনের IP address AWS-এর, আর সেগুলো বদলায়। Traffic বাড়লে load balancer নতুন node যোগ করে, কমলে সরিয়ে দেয়, আর কোনো node নষ্ট হলে বদলে ফেলে। প্রতিটা নতুন node আসে নতুন address নিয়ে। AWS নামটাকে সবসময় তখনকার address-গুলোর দিকে রাখে, ছোট TTL দিয়ে (load balancer-এর জন্য ৬০ সেকেন্ড), কিন্তু address নিয়ে কোনো কথা দেয় না।
অথচ তোমার user টাইপ করতে চায় তোমার নাম: example.com বা app.example.com। তাই তোমার hosted zone-এ এমন একটা record লাগবে, যেটা বলে “আমার এই নাম মানে AWS-এর ওই নাম”। এর জন্য DNS-এ একটা standard record আছে, CNAME; আর Route 53 নিজের একটা যোগ করেছে, Alias। কোনটা চলবে, সেটা নির্ভর করে নামটা কোথায় বসে আছে তার ওপর।
#CNAME: আরেকটা নামের দিকে ইশারা
CNAME (canonical name) record একটা hostname-কে আরেকটা hostname-এর সাথে জোড়ে, কোনো address-এর সাথে না। সাধারণভাবে এটা DNS লেসনে আছে; AWS-এ যেটুকু জরুরি, সেটা এখানে।
- Resolver যখন
www.example.comজিজ্ঞেস করে CNAME পায়, উত্তরটা হয় “এই নামটা আসলেmy-alb-1234…elb.amazonaws.com”। তখন IP পেতে resolver-কে ওই দ্বিতীয় নামটাও খুঁজতে হয়। Cache খালি থাকলে মানে আরেকবার যাওয়া-আসা। - Target হতে পারে ইন্টারনেটের যেকোনো hostname: AWS-এর নাম, কোনো blogging company-র
blog.example.net, কোনো SaaS shop। Target-টা Route 53-এ থাকার দরকার নেই। - CNAME ওই নামের সব type-এর query (A, AAAA, MX, TXT…) অন্য দিকে পাঠিয়ে দেয়, কারণ সে বলছে পুরো নামটাই অন্য কোথাও থাকে।
- TTL তুমি ঠিক করো, আর CNAME query-র জন্য Route 53 টাকা নেয় (public hosted zone-এ প্রতি ১০ লাখে প্রায় $0.40)। CNAME যদি এমন record-এর দিকে দেখায় যেটাও Route 53-এ আছে, তাহলে প্রতিটা lookup-এর বিল হয় দুটো query হিসেবে: একটা CNAME-এর, আরেকটা যেটার দিকে দেখাচ্ছে তার।
#Zone apex কেন CNAME হতে পারে না
Zone apex (একে root domain বা naked domain-ও বলে) হলো hosted zone-এর নিজের নাম: example.com zone-এ example.com। ওখানে দুটো নিয়ম মুখোমুখি ধাক্কা খায়:
১. CNAME একা থাকে। DNS-এর standard (RFC 1034, section 3.6.2) বলে, কোনো নামে CNAME থাকলে সেখানে আর কোনো record থাকতে পারবে না। CNAME-এর মানে থেকেই এটা আসে: “এই নামের সবকিছু অন্য জায়গায়।” Resolver CNAME পেলে সব প্রশ্নের জন্যই সেটা অনুসরণ করে, ফলে একই নামের অন্য কোনো record-এ কেউ পৌঁছাতেই পারত না, আর দুটো কথা পরস্পরবিরোধী হয়ে যেত।
২. Apex কখনো খালি থাকে না। প্রতিটা zone-এর apex-এ থাকে একটা SOA record (zone-এর settings) আর NS record (তার name server)। Hosted zone বানানোর সাথে সাথেই Route 53 দুটো বানিয়ে দেয়, আর তুমি মুছতে পারো না। বেশিরভাগ zone-এ ওখানে MX (mail) আর TXT (verification, SPF) record-ও থাকে।
তাহলে apex-এ CNAME বসালে তাকে SOA আর NS-এর সাথে একই নাম ভাগ করতে হতো, যেটা standard মানা করে। কোনো DNS server তবুও বসতে দিলে example.com-এর MX বা NS-এর প্রশ্নও চলে যেত load balancer-এর নামের দিকে, mail আর delegation দুটোই ভেঙে পড়ত। Route 53 সোজা না বলে দেয়: hosted zone-এর নামের সাথে একই নামের CNAME বানানো যায় না। একই “একা থাকে” নিয়মের কারণেই www-এর CNAME-এর পাশে একটা TXT record-ও রাখা যায় না।
Zone apex কী মেনে নেয়
example.com-এ record যোগ করার চেষ্টা করো, আর দেখো Route 53 কোনটা নেয়, কোনটা ফিরিয়ে দেয়। নিচের table-এ ওই নামে আগে থেকে যে record আছে সেগুলো দেখানো।
পরিস্থিতি
example.com-এ যা আছে
| Name | Type | Value |
|---|---|---|
| example.com | NS | ns-1.awsdns-01.org … |
| example.com | SOA | ns-1.awsdns-01.org … |
| example.com | MX | 10 mail.example.com |
প্রতিটা hosted zone জন্ম থেকেই তার apex-এ একটা NS আর একটা SOA record নিয়ে আসে; এখানে mail-এর জন্য একটা MX record-ও আছে। তুমি example.com-এ ALB-র দিকে একটা CNAME চাইলে।
#Alias: target-এর হয়ে উত্তর দেয় Route 53 নিজেই
Alias record হলো DNS-এর ওপর Route 53-এর নিজস্ব একটা সংযোজন। তুমি সাধারণ type-এর একটা record বানাও, প্রায় সবসময় A (IPv4) বা AAAA (IPv6), “Alias” চালু করো, আর IP address টাইপ না করে target হিসেবে একটা AWS resource বেছে নাও।
Query এলে Route 53 নিজেই AWS-এর ভেতরে target-এর এই মুহূর্তের address খুঁজে নেয়, আর সাধারণ A বা AAAA record দিয়ে উত্তর দেয়। Resolver জানতেই পারে না যে Alias বলে কিছু আছে:
- বাড়তি lookup নেই। Client প্রথম উত্তরেই IP address পায়, খোঁজার জন্য আরেকটা নাম না।
digদেখায় শুধু A-র লাইন; Alias যে, সেটা দেখা যায় শুধু Route 53 console বা API-তে (list-resource-record-sets)। - Apex-এ চলে। বাইরের দুনিয়ার কাছে এটা একটা A record, তাই SOA, NS, MX আর TXT-এর পাশে দিব্যি বসতে পারে। Alias বানানোর মূল কারণই এটা।
- Target বদলালে নিজে থেকে বদলে যায়। Load balancer-এর IP বদলালে Route 53 নতুনগুলো দিয়ে উত্তর দিতে শুরু করে। কাউকে record হাতে বদলাতে হয় না।
- TTL তুমি ঠিক করতে পারো না। AWS resource হলে Route 53 নেয় resource-এর নিজের TTL (load balancer-এর জন্য ৬০ সেকেন্ড)। অন্য record-এর দিকে Alias হলে নেয় ওই record-এর TTL।
- Query ফ্রি, যখন target একটা AWS resource (load balancer, CloudFront, API Gateway, S3 website, আর নিচের list-এর বাকিগুলো)। একই load balancer-এর দিকে CNAME দিলে টাকা লাগে।
- Evaluate Target Health। Alias তার target-এর health নিজের বলে ধরে নিতে পারে। Failover, weighted, latency-র মতো simple ছাড়া অন্য policy-তে Route 53 unhealthy target-কে আর উত্তরে দেয় না, আলাদা Route 53 health check ছাড়াই।
- নাম আর type দুটোই মিলতে হয়। Query-র নাম আর type দুটো মিললে তবেই Route 53 Alias দিয়ে উত্তর দেয়। A Alias কোনো AAAA প্রশ্নের উত্তর দেয় না, তাই IPv6-এর জন্য AAAA type-এর আরেকটা Alias বানাতে হয়।
CNAMEAlias
- Standard DNS, সব DNS provider-এই আছে।
- একটা নামকে জোড়ে যেকোনো hostname-এর সাথে, AWS-এর হোক বা না হোক।
- Zone apex-এ চলে না; নিজের নাম অন্য কোনো record-এর সাথে ভাগ করতে পারে না।
- Target-এর নামের জন্য resolver-কে আরেকবার lookup করতে হয়।
- TTL তুমি দাও।
- Query-র জন্য Route 53 টাকা নেয়।
- নিজের কোনো health বোঝার ক্ষমতা নেই।
- শুধু Route 53-এর সুবিধা।
- একটা নামকে জোড়ে বাছাই করা AWS resource বা একই hosted zone-এর আরেকটা record-এর সাথে।
- Apex-এ চলে, subdomain-এও; অন্য record-এর পাশে থাকতে পারে।
- Route 53 সরাসরি IP address দিয়ে উত্তর দেয় (type A/AAAA)।
- TTL আসে target থেকে; তুমি বসাতে পারো না।
- AWS resource target হলে ফ্রি।
- Evaluate Target Health ভেতরেই আছে।
CNAME lookup বনাম Alias উত্তর
একটা query resolver-এর ভেতর দিয়ে কোথায় কোথায় যায় দেখো। CNAME হলে Route 53 ফেরত দেয় আরেকটা নাম, resolver-কে সেটাও খুঁজতে হয়; Alias হলে Route 53 নিজেই target খুঁজে সরাসরি IP address দিয়ে উত্তর দেয়।
পরিস্থিতি
www.example.com হলো ALB-র DNS নামের দিকে একটা CNAME।
Browser-এর www.example.com-এর IP address দরকার, তাই সে resolver-কে জিজ্ঞেস করে। পুরো chain (root, TLD, authoritative) DNS লেসনে আছে; এখানে শুরু করছি Route 53-কে জিজ্ঞেস করার জায়গা থেকে।
নিজেকে যাচাই করোপ্রশ্ন
example.com hosted zone-এর apex-এ আগে থেকেই NS, SOA আর MX record আছে। example.com নামে নিচের কোনটা যোগ করা যাবে?
#Alias load balancer-এর পেছন পেছন চলে
AWS resource-এর জন্য Alias-ই যে default, তার কারণ এই গুণটা। দেখো load balancer একটা node বদলাচ্ছে: এক TTL-এর মধ্যেই Alias নতুন address ধরে ফেলে, আর হাতে বানানো A record তখনও এমন address-এর দিকে দেখায় যেটা আর নেই। শেষ scenario-তে দেখবে, load balancer-এর পেছনের সব target নষ্ট হলে Evaluate Target Health কীভাবে user-দের একটা backup-এ পাঠিয়ে দেয়।
Load balancer-এর IP বদলে গেলে
AWS load balancer-এর node বদলায়, বাড়ায়-কমায়, আর সাথে তাদের IP address-ও বদলে যায়। পাশাপাশি দেখো: Alias বদলটা নিজে থেকে ধরে ফেলে, আর পুরনো IP হাতে লিখে বানানো A record ভেঙে পড়ে। শেষের scenario-তে আছে Evaluate Target Health।
পরিস্থিতি
example.com হলো ALB-র দিকে একটা Alias। User Route 53-কে জিজ্ঞেস করে দুটো node-এর address পায়, যেগুলো ALB-র ৬০ সেকেন্ডের TTL ধরে cache-এ থাকে।
#Alias কীসের দিকে দেখাতে পারে
Note-এ target আছে ছয়টা, slide আরও দুটো যোগ করে, আর Route 53-এর এখনকার documentation-এ আছে এগুলো:
| Alias target | Record type | কী ঠিক থাকতে হবে |
|---|---|---|
| Elastic Load Balancing: ALB, NLB, CLB | A, আর dual-stack load balancer হলে AAAA | বিশেষ কিছু না; অন্য account-এর হলে তার DNS নাম টাইপ করো (console সামনে dualstack. জুড়ে দেয়) |
| CloudFront distribution | A, আর IPv6 চালু থাকলে AAAA | Distribution-এ record-এর নামটা alternate domain name হিসেবে থাকতে হবে; শুধু public hosted zone; Evaluate Target Health নেই |
| API Gateway (regional বা edge-optimised API) | A | API Gateway-তে record-এর নামে একটা custom domain name থাকতে হবে |
| Elastic Beanstalk environment | A | Environment-এর domain-এ Region থাকতে হবে (২০১৬-র শুরু থেকে সবগুলোতে থাকে); পুরনোগুলোর জন্য CNAME লাগে |
| Static website হিসেবে সাজানো S3 bucket | A | Bucket-এর নাম = record-এর নাম (example.com-এর জন্য example.com নামের bucket) আর website hosting চালু |
| VPC interface endpoint | A | সাধারণত private hosted zone-এ, endpoint-কে একটা সহজ নাম দিতে |
| Global Accelerator accelerator | A (dual-stack হলে AAAA) | DNS নাম দিয়ে অন্য account-এরটাও চলে |
| একই hosted zone-এর আরেকটা record | Target record-এর একই type (NS আর SOA ছাড়া যেকোনো) | শুধু একই hosted zone; apex-এ target CNAME হতে পারবে না |
| App Runner service, AppSync domain name, OpenSearch Service custom domain | A (OpenSearch-এ AAAA-ও) | Record-এর নাম service-এর custom domain-এর সাথে মিলতে হবে |
শেষ সারি আর VPC interface endpoint note-এ নেই; App Runner, AppSync আর OpenSearch slide-এও নেই। আজকের দিনে এগুলো সত্যিকারের Alias target, তবে পরীক্ষায় কম আসে। CloudFront, Global Accelerator, API Gateway, S3 website আর VPC endpoint-এর প্রত্যেকটার আলাদা chapter পরে আসছে; আপাতত এটুকু জানলেই চলবে যে প্রত্যেকটা তোমাকে একটা AWS hostname দেয়, আর Alias ঠিক এই পরিস্থিতির জন্যই বানানো।
#Alias কোথায় দেখাতে পারে না
- কোনো EC2 instance বা তার DNS নাম (
ec2-203-0-113-25.compute-1.amazonaws.com)। EC2-এর জন্য কোনো Alias নেই। একটা instance হলে তাকে একটা Elastic IP দাও (লেসন ৩.৬), আর সেটা দিয়ে সাধারণ একটা A record বানাও; কয়েকটা instance হলে সামনে load balancer বসিয়ে load balancer-এর দিকে Alias দাও। - RDS endpoint (
mydb.abc123.us-east-1.rds.amazonaws.com)।db.example.com-এর মতো subdomain-এ CNAME দাও, সাধারণত private hosted zone-এ। Failover হলে RDS endpoint-এর নামটাকেই নতুন primary-র দিকে ঘুরিয়ে দেয় (লেসন ৭.১), তাই CNAME কাজ করে যায়। - AWS-এর বাইরের যেকোনো কিছু, আর অন্য hosted zone-এর record। এগুলোর জন্য CNAME লাগে (subdomain-এ)।
#কোন record বানাবে: সিদ্ধান্তের নিয়ম
Target কি এমন একটা IP, যেটা তোমার নিয়ন্ত্রণে?
Elastic IP লাগানো একটা EC2 instance, allowlist-এর জন্য NLB-র স্থির IP, on-premises-এর কোনো server: ওই address দিয়ে একটা A (বা AAAA) record বানাও। TTL তুমি দাও; query-র টাকা লাগে।
Target কি Alias list-এর কোনো AWS resource?
Load balancer, CloudFront, API Gateway, Beanstalk, S3 website, VPC interface endpoint, Global Accelerator, App Runner, AppSync, OpenSearch: একটা Alias A record বানাও (IPv6-এর জন্য সাথে Alias AAAA)। Apex আর subdomain দুই জায়গাতেই চলে, ফ্রি, আর IP বদল নিজে থেকে ধরে। Subdomain-এ CNAME চললেও Alias-ই ভালো পছন্দ।
Target কি একই hosted zone-এর আরেকটা record?
ওই record-এর একই type-এর একটা Alias বানাও, যেমন
example.comAlias →www.example.com, যখনwwwনিজে একটা A বা Alias A record।নইলে এটা এমন hostname, যার জন্য Alias হয় না
RDS endpoint, Region ছাড়া পুরনো Beanstalk নাম, SaaS বা অন্য provider-এর hostname, অন্য zone-এর record: একটা CNAME বানাও, আর শুধু subdomain-এ। Apex-ই হতে হলে সামনে CloudFront বসাও (CloudFront-এর দিকে Alias), provider যে স্থির IP দেওয়ার কথা দেয় সেটা দিয়ে A record বানাও, বা
example.comথেকেwww.example.com-এ redirect করেwww-এ CNAME দাও।
সব রকম জোড়া নিজে চালিয়ে দেখো:
কোন record বানাব?
কোন নামের record বানাচ্ছ আর সেটা কীসের দিকে দেখাবে, বেছে নাও। Card-এ দেখাবে Route 53-এ কোন record লাগবে, কেন, তার TTL কত, query-র খরচ কেমন, আর আগে থেকে কী ঠিক থাকা চাই।
Record-এর নাম
দেখাবে কীসের দিকে
বানাও
Alias record, type A (IPv6-এর জন্য সাথে AAAA)
Apex-এ AWS-এর hostname-এর দিকে দেখাতে পারে শুধু Alias: NS আর SOA record-এর পাশে CNAME বসতে দেওয়া হয় না। Route 53 নিজেই target খুঁজে তার এই মুহূর্তের IP দিয়ে উত্তর দেয়।
| Name | Type | Value |
|---|---|---|
| example.com | A (Alias) | my-alb-1234.us-east-1.elb.amazonaws.com |
- TTL
- বদলানো যায় না: Route 53 target-এর নিজের TTL নেয় (load balancer-এর জন্য ৬০ s)।
- Query-র খরচ
- ফ্রি: AWS resource-এর দিকে Alias-এর query-র জন্য Route 53 টাকা নেয় না।
- আগে দেখে নাও
- Load balancer dual-stack হলে AAAA type-এর দ্বিতীয় একটা Alias-ও বানাও। Record-এর বিকল্প থাকলে (failover, weighted, latency) Evaluate Target Health চালু করো।
#কোথায় গিয়ে গোলমাল হয়
| লক্ষণ | কারণ | সমাধান |
|---|---|---|
example.com-এর জন্য CNAME console বা API নিচ্ছে না | Zone apex-এ CNAME | AWS resource-এর দিকে Alias A (আর AAAA) |
www.example.com-এ TXT বা MX যোগ করা যাচ্ছে না | www একটা CNAME, যেটাকে একা থাকতে হয় | www-কে Alias A বানাও, তারপর TXT যোগ করো |
| চালুর কয়েক সপ্তাহ পর কিছু user timeout পাচ্ছে | A record-এ load balancer-এর পুরনো IP বসানো | Load balancer-এর দিকে Alias |
| Alias target list-এ S3 bucket আসছে না | Bucket-এর নাম record-এর নামের সাথে মেলে না, বা website hosting বন্ধ | Record-এর নামেই bucket, static website hosting চালু (বা সামনে CloudFront) |
| CloudFront distribution আসছে না, বা তোমার নামে 403 দিচ্ছে | Record-এর নাম distribution-এর alternate domain name না, বা zone-টা private | Alternate domain name যোগ করো; public hosted zone ব্যবহার করো |
| IPv6 user সবসময় IPv4 দিয়েই আসছে | শুধু A Alias আছে | একই dual-stack target-এর দিকে AAAA Alias যোগ করো |
www.example.com-এর দিকে apex Alias বাতিল হচ্ছে | www একটা CNAME, তাই Alias হয়ে যেত apex CNAME | Apex-এর Alias সরাসরি resource-এ দাও, বা www-কে Alias A বানাও |
| ALB-র সব target বন্ধ, তবুও failover হচ্ছে না | Evaluate Target Health বন্ধ, বা record-এ simple routing | Failover (বা অন্য) policy আর Evaluate Target Health চালু |
| DNS-এর বিল প্রত্যাশার চেয়ে বেশি | Load balancer-এর দিকে CNAME বা CNAME-এর chain, প্রতি query-তে বিল (Route 53 target হলে দ্বিগুণ) | Alias record দিয়ে বদলে দাও |
#System design-এ
- Apex আর www। একটা সাধারণ public site-এ
example.comহয় CloudFront (বা ALB)-এর দিকে Alias A/AAAA, আরwww.example.comহয় একই target-এর দিকে আরেকটা Alias, অথবা apex record-এর দিকে Alias। দুটোই ফ্রি, দুটোই target-এর বদল ধরে। - পরীক্ষার প্রশ্ন chapter মিশিয়ে আসে। Note-এর শেষ পরামর্শ: Route 53-এর প্রশ্ন প্রায়ই load balancer আর CloudFront-এর সাথে মিলিয়ে দেওয়া হয়। অপশনে load balancer বা distribution আর একটা domain দেখলেই আগে record type দেখো: apex-এ Alias, সেখানে কখনো CNAME না, কখনো কপি করা IP না।
- স্থির IP আর Alias একে অপরের উল্টো না। কোনো partner-কে স্থির address allowlist করতে হলে address-এর জন্য Elastic IP লাগানো NLB বা Global Accelerator নাও, আর তোমার domain তবুও Alias দিয়েই ওটার দিকে দেখাও।
- কয়েকটা account মিলিয়ে কাজ। অন্য account-এর load balancer বা distribution console-এর Alias list-এ আসে না, কিন্তু তার DNS নাম টাইপ করে দিলেই হয় (Route 53 তবুও তার হয়ে উত্তর দেয়)। অন্য hosted zone-এর record-এ Alias পৌঁছায় না; সেখানে CNAME লাগে।
- Database থাকে CNAME-এ। Application-কে একটা স্থির নাম দাও, যেমন private hosted zone-এ
db.internal.example.com, RDS endpoint-এর দিকে CNAME। পরে database বদলালে একটা CNAME বদলালেই হয়, প্রতিটা application-এর configuration না।
#নিজে করে দেখো
Load balancer-এর DNS নাম আর তার নিজের hosted zone ID বের করো (Alias-এ দুটোই লাগে):
aws elbv2 describe-load-balancers --names my-alb \
--query 'LoadBalancers[0].[DNSName,CanonicalHostedZoneId]'
Apex-এ একটা Alias A record বানাও (বা update করো)। AliasTarget-এর ভেতরের HostedZoneId হলো ওপরের command থেকে পাওয়া load balancer-এর zone ID, তোমার নিজের zone-এর না। খেয়াল করো, কোনো TTL field নেই:
cat > alias.json <<'EOF'
{
"Comment": "apex Alias to the ALB",
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "example.com",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z35SXDOTRQ7X7K",
"DNSName": "dualstack.my-alb-1234.us-east-1.elb.amazonaws.com",
"EvaluateTargetHealth": true
}
}
}]
}
EOF
aws route53 change-resource-record-sets --hosted-zone-id Z0123456789EXAMPLE --change-batch file://alias.json
এবার নিষিদ্ধটা চেষ্টা করো, apex-এ CNAME। Route 53 পুরো change batch-টাই InvalidChangeBatch error দিয়ে ফিরিয়ে দেয়:
aws route53 change-resource-record-sets --hosted-zone-id Z0123456789EXAMPLE --change-batch '{
"Changes": [{ "Action": "CREATE", "ResourceRecordSet": {
"Name": "example.com", "Type": "CNAME", "TTL": 300,
"ResourceRecords": [{ "Value": "my-alb-1234.us-east-1.elb.amazonaws.com" }] } }] }'
Alias আর CNAME-এর বেলায় resolver কী দেখে, মিলিয়ে নাও:
dig +noall +answer example.com A # শুধু A-র লাইন, TTL ৬০ থেকে কমতে থাকে
dig +noall +answer www.example.com A # একটা CNAME লাইন, তারপর ALB-র A লাইন
nslookup -type=AAAA example.com # AAAA Alias না বানালে খালি
যে Alias flag dig কখনো দেখায় না সেটা দেখো, আর Route 53 কী উত্তর দিত সেটা সরাসরি তাকেই জিজ্ঞেস করো:
aws route53 list-resource-record-sets --hosted-zone-id Z0123456789EXAMPLE \
--query "ResourceRecordSets[?Name=='example.com.']"
aws route53 test-dns-answer --hosted-zone-id Z0123456789EXAMPLE \
--record-name example.com --record-type A
যে স্থির hosted zone ID সবচেয়ে বেশি চোখে পড়বে: CloudFront-এর সবসময় Z2FDTNDATAQYW2, Global Accelerator-এর Z2BJ6XQ5FK7U4H; load balancer, S3 website আর Beanstalk-এর ID Region ভেদে আলাদা (ওপরের ALB-র উদাহরণটা us-east-1-এর)।
#সারসংক্ষেপ
মূল কথা
- AWS resource (load balancer, CloudFront, API Gateway, S3 website…) তোমাকে একটা DNS নাম দেয়, কারণ তাদের IP address বদলায়। ওই IP কখনো A record-এ কপি কোরো না।
- CNAME: নাম → যেকোনো hostname, AWS-এর হোক বা না হোক; বাড়তি lookup; TTL তুমি দাও; টাকা লাগে; তাকে একা থাকতে হয়, তাই zone apex-এ কখনোই চলে না, কারণ সেখানে সবসময় SOA আর NS থাকে।
- Alias: শুধু Route 53-এর; type A/AAAA (বা একই zone-এর target record-এর একই type); Route 53 নিজে target খুঁজে IP দিয়ে উত্তর দেয়; apex-এ চলে; TTL বসানো যায় না (target-এরটা চলে, load balancer-এর ৬০ s); AWS resource-এর জন্য ফ্রি; Evaluate Target Health আছে; শুধু মেলানো type-এর উত্তর দেয়, তাই IPv6-এর জন্য AAAA যোগ করো।
- Alias target: ELB (ALB/NLB/CLB), CloudFront, API Gateway, Elastic Beanstalk, S3 website (bucket-এর নাম = record-এর নাম), VPC interface endpoint, Global Accelerator, একই hosted zone-এর আরেকটা record, সাথে App Runner, AppSync আর OpenSearch Service।
- Alias target না: EC2-এর DNS নাম (Elastic IP দিয়ে A record দাও), RDS endpoint (subdomain-এ CNAME), AWS-এর বাইরের বা অন্য zone-এর যেকোনো কিছু (subdomain-এ CNAME)।
- পরীক্ষার রিফ্লেক্স: root domain → ALB / CloudFront / S3 website → Alias। সবসময়।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
একটা Application Load Balancer স্থির IP address না দিয়ে my-alb-1234.us-east-1.elb.amazonaws.com-এর মতো একটা DNS নাম দেয় কেন?
নিজেকে যাচাই করোপ্রশ্ন
Zone apex example.com-এ কখনো CNAME record বানানো যায় না কেন?
নিজেকে যাচাই করোপ্রশ্ন
Route 53-এ CNAME record নিয়ে কোন কথাটা সত্যি?
নিজেকে যাচাই করোপ্রশ্ন
example.com হলো একটা ALB-র দিকে Alias A record। dig example.com A চালালে কী দেখা যায়?
নিজেকে যাচাই করোপ্রশ্ন
Application Load Balancer-এর দিকে একটা Alias record-এর TTL কত?
নিজেকে যাচাই করোপ্রশ্ন
নিচের কোন দুটো Route 53 Alias record-এর target হতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা company-র root domain mycompany.com থেকে user-দের একটা Application Load Balancer-এ পাঠাতে হবে। Solutions architect কোন record বানাবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা application-কে তার RDS for MySQL database-এ পৌঁছাতে হবে db.example.com নাম দিয়ে। কোন record ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
একটা ছোট site চলে একটাই EC2 instance-এ। Instance stop আর start করার পরও example.com domain কাজ করতে হবে। সবচেয়ে সহজ স্থির ব্যবস্থা কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা static website আছে company-website-prod নামের S3 bucket-এ, website hosting চালু। example.com-এর Alias বানাতে গিয়ে target list-এ bucket-টা আসছে না। সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
www.example.com হলো app.example.com-এর দিকে একটা CNAME, আর app.example.com একই Route 53 public hosted zone-এর একটা A record। মাসে ৫ কোটি query আসে, আর standard query-র দাম প্রতি ১০ লাখে $0.40। এই lookup-গুলোর মাসিক খরচ কত?
নিজেকে যাচাই করোপ্রশ্ন
CNAME-এর তুলনায় Alias record নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
example.com-এর দুটো failover Alias record: primary-র target একটা ALB, Evaluate Target Health = Yes; secondary-র target একটা S3 static website। ALB-র পেছনের সব EC2 target health check-এ ফেল করল। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
কোন Alias target-এর জন্য Evaluate Target Health = Yes বসানো যায় না?
নিজেকে যাচাই করোপ্রশ্ন
www.example.com হলো একটা ALB-র দিকে CNAME। একজন engineer example.com-কে www.example.com record-এর দিকে Alias বানাতে গেল, আর Route 53 বাতিল করে দিল। কেন?
নিজেকে যাচাই করোপ্রশ্ন
example.com-এ একটা dual-stack ALB-র দিকে Alias A record আছে। শুধু-IPv6 test client নামটা resolve করতে পারছে না, আর IPv6 চালাতে পারা phone সবসময় IPv4 দিয়ে connect করছে। কী করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
একটা CloudFront distribution-এ IPv6 চালু, সেটা www.example.com serve করে। কোন record বানানো উচিত?
নিজেকে যাচাই করোপ্রশ্ন
একটা team private hosted zone corp.internal-এ একটা CloudFront distribution-এর দিকে Alias বানাতে চায়। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
example.com hosted zone-এর একটা Alias record কি example.net hosted zone-এর কোনো record-এর দিকে দেখাতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
২০১৫ সালে বানানো একটা Elastic Beanstalk environment-এর domain myapp.elasticbeanstalk.com, এতে কোনো Region নেই। app.example.com কীভাবে এর দিকে দেখাবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা online shop চলে এমন একটা SaaS platform-এ, যারা shops.example.net hostname দেয়, কোনো স্থির IP দেয় না। Company চায় খালি example.com domain খুললেই shop আসুক। Route 53 দিয়ে কোনটা কাজ করবে?
নিজেকে যাচাই করোপ্রশ্ন
এক সহকর্মী বলল, Alias আসলে একটা CNAME, শুধু Route 53 সেটাকে apex-এ বসতে দেয়। সবচেয়ে ঠিক সংশোধন কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
নিচের কোন দুটো Alias record-এর target হতে পারে না?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
example.com ছিল 198.51.100.10 দিয়ে একটা A record; address-টা একজন engineer ALB-র নামে dig চালিয়ে কপি করেছিল। কয়েক সপ্তাহ পর কিছু user timeout পাচ্ছে। সম্ভাব্য কারণ আর সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা Alias record-এর target একই hosted zone-এর আরেকটা record। এর type কী কী হতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
example.com হলো www.example.com-এর দিকে Alias, আর www.example.com একটা ALB-র দিকে Alias A record। example.com-এর query-র বিল কীভাবে হয়?
নিজেকে যাচাই করোপ্রশ্ন
app.example.com-এর জন্য CloudFront distribution-এর দিকে Alias বানাতে কোন দুটো শর্ত পূরণ করতে হবে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
ALB-র দিকে www.example.com-এর জন্য CNAME-এর বদলে Alias বেছে নেওয়ার কারণ নিচের কোনটা না?
নিজেকে যাচাই করোপ্রশ্ন
একটা resolver example.com-এর Alias উত্তর cache করেছে ১১:৫৯:৩০-এ (TTL ৬০ সেকেন্ড, ALB থেকে পাওয়া)। AWS ১২:০০:০০-এ ALB-র একটা node বদলাল। সবচেয়ে দেরিতে কখন পর্যন্ত ওই resolver পুরনো address দিতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
Root domain mycompany.com-কে একটা dual-stack ALB দিয়ে IPv4 আর IPv6 দুই রকম client-কেই serve করতে হবে। কোন দুটো record বানাতে হবে?
বেছে নাও ২