Terraform Client VPN રૂટ્સ, સબનેટ કરતાં વધુ CIDR સાથે
એસોસિએશન, રૂટ અને ઓથોરાઇઝેશન અલગ ઑબ્જેક્ટ્સ છે. ટૂંકી સબનેટ યાદીને ઇન્ડેક્સ કરવાને બદલે દરેક ડેસ્ટિનેશન CIDRને સંકળાયેલી સબનેટ સાથે મેપ કરો.
લેપટોપ Client VPN એન્ડપોઇન્ટ સાથે જોડાય છે, અને terraform apply હજી પણ રૂટ રિસોર્સ પર નિષ્ફળ જાય છે. કોન્ફિગરેશનમાં સામાન્ય રીતે સંકળાયેલી સબનેટ કરતાં વધુ ડેસ્ટિનેશન CIDR હોય છે, અને રૂટ બ્લોક ઇન્ડેક્સ સાથે લક્ષ્ય પસંદ કરે છે. તે ધારે છે કે બંને સંગ્રહ સમાંતર છે. તેઓ નથી, અને નિષ્ફળતા સમીક્ષાને બદલે લાગુ કરવાના સમયે દેખાય છે.
નિષ્ફળ જતા ઑબ્જેક્ટનું નામ આપો
ત્રણ રિસોર્સ સંકળાયેલા છે અને દરેક અલગ પ્રશ્નનો જવાબ આપે છે. એસોસિએશન એન્ડપોઇન્ટનું નેટવર્ક ઇન્ટરફેસ સબનેટમાં મૂકે છે. રૂટ કહે છે કે કયો ડેસ્ટિનેશન પ્રિફિક્સ લક્ષ્ય સબનેટને પહોંચાડવામાં આવે છે. ઓથોરાઇઝેશન નિયમ કહે છે કે કયા વપરાશકર્તા કયા પ્રિફિક્સ સુધી પહોંચી શકે છે. ક્યારેય સંકળાય ન હોય તેવી સબનેટ તરફ નિર્દેશ કરતો રૂટ નિષ્ફળ જાય છે, બંને ઑબ્જેક્ટ અસ્તિત્વમાં હોવા છતાં, કારણ કે લક્ષ્ય આ એન્ડપોઇન્ટનું હોવું જોઈએ.
પહેલા એસોસિએશનની યાદી બનાવો: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.
VPCના સ્થાનિક રૂટને યાદ રાખો
પ્રથમ એસોસિએશન આખા VPC માટે સ્થાનિક રૂટ ઉમેરે છે, તેથી તે VPCની દરેક સબનેટ રૂટ રિસોર્સ વિના પહેલેથી જ પહોંચવા યોગ્ય છે. peered VPC, Transit Gateway જોડાણો અને on-premises પ્રિફિક્સ માટે વધારાના રૂટ હોય છે જે VPCની માલિકીના નથી. તેથી ત્રણ એસોસિએશનવાળો એન્ડપોઇન્ટ કાયદેસર રીતે સાત ડેસ્ટિનેશન એન્ટ્રી ધરાવી શકે છે.
રૂટ ઉમેરતા પહેલા VPCની બહાર પડતા લક્ષ્યોની ગણતરી કરો. જો તે ગણતરી CIDR યાદી કરતાં નાની હોય, તો યાદી એવી સબનેટનું વર્ણન કરે છે જેમને કોઈ રૂટની જરૂર જ નથી.
ઇન્ડેક્સને મેપથી બદલો
ઇન્ડેક્સને મોડ્યુલો ઓપરેટરમાં લપેટવાથી ભૂલ શાંત થાય છે અને મોડેલિંગ ભૂલ રહી જાય છે. પસંદ કરેલા લક્ષ્ય દ્વારા ન પહોંચી શકાય તેવું ડેસ્ટિનેશન, પ્લાન ગમે તેટલો સ્વચ્છ રીતે લાગુ થાય તોપણ કોઈ ટ્રાફિક વહન કરતું નથી. તેના બદલે સંબંધ સંગ્રહો, અને કંઈપણ બનાવતા પહેલા Terraformને તે ચકાસવા દો. નીચેનો બ્લોક ઉદાહરણરૂપ છે અને પ્રોવાઇડરના એન્ડપોઇન્ટ રૂટ આર્ગ્યુમેન્ટ્સ વાપરે છે.
variable "client_vpn_destinations" {
description = "Destination CIDR mapped to an associated subnet key"
type = map(string)
}
resource "aws_ec2_client_vpn_route" "this" {
for_each = var.client_vpn_destinations
client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.this.id
destination_cidr_block = each.key
target_vpc_subnet_id = aws_subnet.private[each.value].id
lifecycle {
precondition {
condition = contains(keys(aws_subnet.private), each.value)
error_message = "Route target must be a subnet key in the associated map."
}
}
}
જ્યારે મેપ એસોસિએશન યાદીની બાજુમાં હોય, ત્યારે ડેસ્ટિનેશન ઉમેરવાથી કઈ સબનેટ તેને વહન કરશે તે અંગે નિર્ણય લેવો પડે છે. આ તે વાતચીત છે જે ઇન્ડેક્સ છુપાવતો હતો.
બીજી નિષ્ફળતા ઇન્ડેક્સ ભૂલને બદલે અર્થહીન મૂલ્યો ઉત્પન્ન કરે છે. ઊંચા સ્તરના ઇન્ટરફેસની અપેક્ષા હોય ત્યાં નીચા સ્તરનું બાંધકામ પસાર કરવાથી API વાંચે છે તે ફીલ્ડ ભરાયેલા રહેતા નથી, અને પરિણામી CIDR નકામું બને છે. ઑબ્જેક્ટની અપેક્ષા હોય ત્યાં જ્યારે સ્ટ્રિંગ આવે ત્યારે Terraform એ જ આકાર દર્શાવે છે. આર્ગ્યુમેન્ટ પ્રકાર માટે પ્રોવાઇડરની સ્કીમા તપાસો.
ક્લાયન્ટમાંથી તે સાબિત કરો
લાગુ કરતા પહેલા terraform validate અને વાસ્તવિક સ્થિતિ સામે પ્લાન ચલાવો. પછી સફળ apply પર ભરોસો કરવાને બદલે એન્ડપોઇન્ટની લક્ષ્ય-નેટવર્ક યાદીને મેપ સાથે સરખાવો.
સ્વીકૃતિ પરીક્ષણ એ જોડાયેલ ક્લાયન્ટ છે જે દરેક ઇચ્છિત પ્રિફિક્સ સુધી પહોંચે છે.
ઓથોરાઇઝેશન નિયમ એ છે જ્યાં ઘણા સેટઅપ વહેલા અટકે છે. તે ડેસ્ટિનેશન CIDR અને જૂથ સુધી મર્યાદિત છે, અને મેળ ખાતા ઓથોરાઇઝેશન વિનાનો રૂટ એવો જોડાયેલ ક્લાયન્ટ બનાવે છે જે પ્રિફિક્સ સુધી પહોંચી શકતો નથી. દરેક પ્રિફિક્સ માટે બંને ઑબ્જેક્ટ તપાસો, કારણ કે રૂટ બનાવીને નિયમ ભૂલી જતો apply પૂર્ણ દેખાય છે. જૂથની અંદર એક અને બહાર એક વપરાશકર્તા સાથે પરીક્ષણ કરો.
જ્યારે એક પ્રિફિક્સ નિષ્ફળ જાય, ત્યારે તેની રૂટ એન્ટ્રીની ઓથોરાઇઝેશન નિયમ સાથે સરખામણી કરો. ગેરહાજર ઓથોરાઇઝેશન અને ગેરહાજર રૂટ ક્લાયન્ટ લોગમાં સમાન દેખાય છે અને અલગ રિસોર્સમાં સુધારાય છે.