अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ ANS-C01 परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक, आप सादे टेराफ़ॉर्म के साथ, कैनोनिकल AWS मल्टी-वीपीसी बैकबोन को प्रोविजन कर चुके होंगे — एक ही क्षेत्र में दो डुअल-स्टैक (IPv4 + IPv6) वीपीसी, जो स्पष्ट रूट-टेबल एसोसिएशन के साथ एक ट्रांज़िट गेटवे के माध्यम से जुड़े हुए हैं, और प्राथमिक वीपीसी पर क्लाउडवॉच-समर्थित वीपीसी फ्लो लॉग्स ताकि आप वास्तव में देख सकें कि आपके नेटवर्क में क्या चल रहा है। यह वह आर्किटेक्चर है जिसे हर ANS-C01 मल्टी-वीपीसी प्रश्न मानता है।
हर संसाधन सादा टेराफ़ॉर्म है। स्निपेट्स को एक ही main.tf में डालें, terraform init चलाएं, फिर terraform apply स्टेप-बाय-स्टेप चलाएं।
>= 1.5 या ओपनटोफू >= 1.6।us-east-1 के लिए AWS CLI प्रमाणित।इस लैब का अधिकांश भाग सस्ता या मुफ़्त है, लेकिन ट्रांज़िट गेटवे नहीं है:
इस लैब के लिए TGW प्रति घंटा शुल्क ही बिल है। दो अटैचमेंट × $0.05/घंटा × 24 घंटे × 30 दिन ≈ $72/माह चलते समय। जैसे ही आप अन्वेषण कर लें, नष्ट कर दें — TGW किसी भी ANS-C01 लैब में सबसे बड़ा लागत जाल है।
मानक शुरुआत। ट्रांज़िट गेटवे क्षेत्रीय होता है — सभी अटैचमेंट उसी क्षेत्र में होने चाहिए जहाँ TGW स्थित है। क्रॉस-रीजन कनेक्टिविटी के लिए आप TGW पीयरिंग जोड़ेंगे (v1 के दायरे से बाहर)। हम डिफ़ॉल्ट रूप से us-east-1 का उपयोग करते हैं।
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-ans-c01"
ManagedBy = "terraform"
}
}
}
data "aws_availability_zones" "available" {
state = "available"
}ANS-C01 विशेष रूप से डुअल-स्टैक VPCs का परीक्षण करता है — यदि आप assign_generated_ipv6_cidr_block = true सेट करते हैं, तो AWS अब हर नए VPC को एक IPv6 /56 असाइन करने के लिए डिफ़ॉल्ट करता है। परीक्षा का नेटवर्क डिज़ाइन डोमेन IPv4 CIDR योजना गणित (यदि आप पीयर करना या TGW-अटैच करना चाहते हैं तो गैर-अतिव्यापी /16s) और IPv6 सबनेट व्युत्पत्ति (प्रत्येक सबनेट को VPC के /56 से निकाला गया एक /64 मिलता है) दोनों का परीक्षण करता है।
हम IPv4 10.0.0.0/16 और एक AWS-स्वचालित रूप से उत्पन्न IPv6 /56 असाइन करते हैं। यहाँ का एकल सबनेट एक /24 IPv4 ब्लॉक और VPC के /56 से निकाला गया एक /64 IPv6 ब्लॉक का उपयोग करता है — cidrsubnet उस गणित के लिए टेराफ़ॉर्म का अंतर्निहित फ़ंक्शन है। आधुनिक AWS क्षेत्रों में इंटरनेट गेटवे डिफ़ॉल्ट रूप से डुअल-स्टैक होता है।
resource "aws_vpc" "primary" {
cidr_block = "10.0.0.0/16"
assign_generated_ipv6_cidr_block = true
enable_dns_hostnames = true
tags = { Name = "certlabpro-ans-c01-primary" }
}
resource "aws_subnet" "primary_a" {
vpc_id = aws_vpc.primary.id
cidr_block = "10.0.1.0/24"
ipv6_cidr_block = cidrsubnet(aws_vpc.primary.ipv6_cidr_block, 8, 1)
availability_zone = data.aws_availability_zones.available.names[0]
assign_ipv6_address_on_creation = true
tags = { Name = "certlabpro-ans-c01-primary-a" }
}
resource "aws_internet_gateway" "primary" {
vpc_id = aws_vpc.primary.id
}हम 10.1.0.0/16 पर एक दूसरा VPC बनाते हैं — जानबूझकर VPC #1 के 10.0.0.0/16 के साथ अतिव्यापी नहीं। ANS-C01 इस डिज़ाइन नियम पर जोर देता है क्योंकि जिस क्षण आप दो VPCs (पीयरिंग, TGW, कुछ भी) को जोड़ना चाहते हैं, अतिव्यापी CIDRs इसे AWS API परत पर प्रतिबंधित करते हैं। आप उस CIDR पर रूट नहीं कर सकते जो स्थानीय रूप से भी दावा किया गया है।
VPC #2 को भी अपना AWS-स्वचालित रूप से उत्पन्न IPv6 /56 मिलता है (प्रत्येक VPC को एक विश्व स्तर पर अद्वितीय ब्लॉक मिलता है, इसलिए डिफ़ॉल्ट रूप से कोई IPv6 अतिव्यापी जोखिम नहीं होता है)। सबनेट कार्विंग का गणित स्टेप 2 के समान है।
resource "aws_vpc" "secondary" {
cidr_block = "10.1.0.0/16"
assign_generated_ipv6_cidr_block = true
enable_dns_hostnames = true
tags = { Name = "certlabpro-ans-c01-secondary" }
}
resource "aws_subnet" "secondary_a" {
vpc_id = aws_vpc.secondary.id
cidr_block = "10.1.1.0/24"
ipv6_cidr_block = cidrsubnet(aws_vpc.secondary.ipv6_cidr_block, 8, 1)
availability_zone = data.aws_availability_zones.available.names[0]
assign_ipv6_address_on_creation = true
tags = { Name = "certlabpro-ans-c01-secondary-a" }
}ट्रांज़िट गेटवे हब है। यह हजारों VPC अटैचमेंट तक स्केल करता है, AWS Resource Access Manager (RAM) के माध्यम से क्रॉस-अकाउंट शेयरिंग का समर्थन करता है, और आपको N² पीयरिंग कनेक्शन के बजाय तर्क करने के लिए एक एकल रूट टेबल देता है। ANS-C01 VPC पीयरिंग पर इस हब-एंड-स्पोक विकल्प का परीक्षण करता है जब भी प्रश्न में “तीन से अधिक VPCs” या “जैसे-जैसे हमारा नेटवर्क बढ़ता है” का उल्लेख होता है।
हम डिफ़ॉल्ट रूट-टेबल एसोसिएशन और प्रचार को अक्षम करके TGW बनाते हैं — यह अधिक परीक्षणित ANS-C01 पैटर्न है क्योंकि यह आपको स्पष्ट होने के लिए मजबूर करता है कि कौन से अटैचमेंट कौन सी रूट टेबल को पॉपुलेट करते हैं। ऑटो-एसोसिएशन सुविधा सेटिंग है; मैनुअल ऑडिट-अनुकूल सेटिंग है।
अटैचमेंट-संसाधन प्रति-VPC ब्रिज है। दोनों VPCs अटैच होने के साथ, TGW को उनके दोनों CIDRs के बारे में पता होता है; हमें अभी भी प्रत्येक VPC की मुख्य रूट टेबल से TGW की ओर इशारा करने वाले रूट्स जोड़ने की आवश्यकता है (स्टेप 5)।
resource "aws_ec2_transit_gateway" "hub" {
description = "certlabpro-ans-c01 hub"
default_route_table_association = "disable"
default_route_table_propagation = "disable"
multicast_support = "disable"
tags = { Name = "certlabpro-ans-c01-tgw" }
}
resource "aws_ec2_transit_gateway_route_table" "main" {
transit_gateway_id = aws_ec2_transit_gateway.hub.id
tags = { Name = "certlabpro-ans-c01-tgw-rt" }
}
resource "aws_ec2_transit_gateway_vpc_attachment" "primary" {
transit_gateway_id = aws_ec2_transit_gateway.hub.id
vpc_id = aws_vpc.primary.id
subnet_ids = [aws_subnet.primary_a.id]
transit_gateway_default_route_table_association = false
transit_gateway_default_route_table_propagation = false
}
resource "aws_ec2_transit_gateway_vpc_attachment" "secondary" {
transit_gateway_id = aws_ec2_transit_gateway.hub.id
vpc_id = aws_vpc.secondary.id
subnet_ids = [aws_subnet.secondary_a.id]
transit_gateway_default_route_table_association = false
transit_gateway_default_route_table_propagation = false
}
resource "aws_ec2_transit_gateway_route_table_association" "primary" {
transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.primary.id
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.main.id
}
resource "aws_ec2_transit_gateway_route_table_association" "secondary" {
transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.secondary.id
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.main.id
}
resource "aws_ec2_transit_gateway_route_table_propagation" "primary" {
transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.primary.id
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.main.id
}
resource "aws_ec2_transit_gateway_route_table_propagation" "secondary" {
transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.secondary.id
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.main.id
}स्टेप 4 का TGW दोनों VPCs के बारे में जानता है, लेकिन प्रत्येक VPC की अपनी रूट टेबल अभी भी नहीं जानती कि दूसरे तक कैसे पहुंचा जाए। हम दोनों दिशाओं में स्पष्ट रूट्स जोड़ते हैं: VPC #1 की रूट टेबल 10.1.0.0/16 ट्रैफ़िक को TGW पर भेजती है, और इसके विपरीत। परीक्षा इस दोहरी-पक्षीय आवश्यकता का बार-बार परीक्षण करती है — “मैंने दोनों को TGW से अटैच किया, वे पिंग क्यों नहीं कर सकते?” लगभग हमेशा एक लापता रिटर्न-पाथ रूट होता है।
अंत में, VPC फ्लो लॉग्स। ANS-C01 का नेटवर्क मॉनिटरिंग डोमेन इन्हें यह देखने का एकमात्र तरीका मानता है कि कौन से पैकेट वास्तव में आपके नेटवर्क को पार कर रहे हैं — स्वीकृत, अस्वीकृत, और केवल मेटाडेटा (5-ट्यूपल + बाइट्स + पैकेट + परिणाम)। हम उन्हें प्राथमिक VPC के लिए चालू करते हैं, जिसमें लॉग एक समर्पित CloudWatch लॉग समूह में प्रवाहित होते हैं। IAM भूमिका जिसे हम संलग्न करते हैं, वह है जिसे फ्लो लॉग्स लॉग समूह में लिखने के लिए मानता है।
रूट्स स्थापित होने और फ्लो लॉग्स चलने के साथ, बैकबोन पूरा हो गया है। दो डुअल-स्टैक VPCs, स्पष्ट (ऑडिट-अनुकूल) रूटिंग के साथ एक TGW के माध्यम से जुड़े हुए, प्राथमिक पक्ष पर पैकेट-स्तर की दृश्यता के साथ। हर अतिरिक्त ANS-C01 पैटर्न (Direct Connect Gateway, TGW पीयरिंग, NAT, PrivateLink, VPC एंडपॉइंट्स) इस आधार से जुड़ा होता है।
resource "aws_route" "primary_to_secondary" {
route_table_id = aws_vpc.primary.main_route_table_id
destination_cidr_block = "10.1.0.0/16"
transit_gateway_id = aws_ec2_transit_gateway.hub.id
depends_on = [aws_ec2_transit_gateway_vpc_attachment.primary]
}
resource "aws_route" "secondary_to_primary" {
route_table_id = aws_vpc.secondary.main_route_table_id
destination_cidr_block = "10.0.0.0/16"
transit_gateway_id = aws_ec2_transit_gateway.hub.id
depends_on = [aws_ec2_transit_gateway_vpc_attachment.secondary]
}
# ── VPC Flow Logs ─────────────────────────────────────────────
resource "aws_cloudwatch_log_group" "vpc_flow" {
name = "/aws/vpc-flow/certlabpro-ans-c01-primary"
retention_in_days = 30
}
resource "aws_iam_role" "vpc_flow" {
name = "certlabpro-ans-c01-vpc-flow"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "vpc-flow-logs.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "vpc_flow" {
name = "write-flow-logs"
role = aws_iam_role.vpc_flow.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
]
Resource = aws_cloudwatch_log_group.vpc_flow.arn
}]
})
}
resource "aws_flow_log" "primary" {
vpc_id = aws_vpc.primary.id
traffic_type = "ALL"
log_destination_type = "cloud-watch-logs"
log_destination = aws_cloudwatch_log_group.vpc_flow.arn
iam_role_arn = aws_iam_role.vpc_flow.arn
max_aggregation_interval = 60
}terraform destroy इस लैब में सब कुछ ध्वस्त कर देता है, लेकिन क्रम के साथ सावधान रहें — ट्रांज़िट गेटवे अटैचमेंट को डिटैच होने में 5-10 मिनट लगते हैं, और TGW को तब तक हटाया नहीं जा सकता जब तक कि दोनों अटैचमेंट पूरी तरह से हट न जाएं। terraform destroy डिपेंडेंसी ग्राफ़ को सही ढंग से संभालता है, लेकिन ऑपरेशन तेज़ नहीं होता है। नष्ट करने के बीच में Ctrl-C न दबाएं, नहीं तो आपको आधे-डिटैच अटैचमेंट के साथ समाप्त होना पड़ेगा जिन्हें आपको कंसोल के माध्यम से साफ़ करना होगा।
तुरंत नष्ट करने का सबसे बड़ा कारण TGW प्रति घंटा शुल्क है — दो अटैचमेंट प्रत्येक $0.05/घंटा = कुल $72/माह। यदि आप इसे चलता हुआ भूल जाते हैं तो लैब की लागत तेज़ी से बढ़ जाती है।
ANS-C01 नेटवर्किंग सतहों को कवर करता है जिन्हें यह लैब फिट नहीं कर सकती है — Direct Connect (भौतिक पोर्ट के बिना कोई परीक्षण वातावरण नहीं), AWS Site-to-Site VPN (ग्राहक-पक्ष एंडपॉइंट की आवश्यकता है), हाइब्रिड DNS के लिए Route 53 Resolver इनबाउंड/आउटबाउंड एंडपॉइंट्स, PrivateLink + VPC एंडपॉइंट सेवाएं, AWS Network Firewall, AWS Global Accelerator, Route 53 हेल्थ चेक + फ़ेलओवर, Network Access Analyzer, Reachability Analyzer, Transit Gateway पीयरिंग (क्रॉस-रीजन), Cloud WAN, AWS App Mesh, और BGP-विशिष्ट परिदृश्य (रूट फ़िल्टरिंग, प्रीपेंड, AS-PATH मैनिपुलेशन)।
हम मल्टी-VPC बैकबोन आकार पर टिके रहते हैं क्योंकि यह परीक्षा में एकल सबसे अधिक परीक्षणित आर्किटेक्चर है — Direct Connect अटैचमेंट, VPN टनल, हाइब्रिड DNS, और PrivateLink सभी इस प्रकार के TGW हब से जुड़े होते हैं। हब-एंड-स्पोक को सही करें; स्पोक-प्रकार इसके विस्तार हैं।
अप्रबंधित सतहों के लिए, इस प्रमाणपत्र पृष्ठ के ब्राउज़, मार्गदर्शिका, और Editorial अनुभागों में वैचारिक कवरेज है। Route 53 Resolver + एक VPN अटैचमेंट + PrivateLink जोड़ने वाली एक अनुवर्ती लैब हाइब्रिड-नेटवर्क कहानी को पूरा करेगी।