7

हम वीपीसी के उपयोग के लिए क्लाउडफॉर्मेशन टेम्पलेट को अपने अनुप्रयोगों का अनुकूलन कर रहे हैं। इस टेम्पलेट के भीतर हमें क्लाउडफॉर्मेशन स्टैक्स के बीच संघर्ष नहीं करने के लिए, हमारे वीपीसी सबनेट्स के लिए उपयोग किए गए सीआईडीआर ब्लॉक को प्रोग्रामेटिक रूप से उत्पन्न करने की आवश्यकता है।क्लाउडफॉर्मेशन टेम्पलेट्स में प्रोग्रामेटिक रूप से सबनेट सीआईडीआर ब्लॉक उत्पन्न करना (या एक साथ पूर्णांक जोड़ना)

मेरे प्रारंभिक योजना, श्रृंखलाबद्ध तार द्वारा CIDRs एक साथ उत्पन्न करने के लिए किया गया था उदाहरण के लिए:

"ProxyLoadBalancerSubnetA" : { 
    "Type" : "AWS::EC2::Subnet", 
    "Properties" : { 
    "VpcId" : { "Ref" : "Vpc" }, 
    "AvailabilityZone" : "eu-west-1a", 
    "CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, "0.0/24" ] ] } 
    } 
}, 

पर आगे विचार तथापि, हम नहीं बल्कि हमारे ढेर में से प्रत्येक के लिए एक VPC की तुलना में एक भी VPC उपयोग करने की आवश्यकता ।

एडब्ल्यूएस एक /16 सीआईडीआर ब्लॉक की एक अधिकतम उपयोग करने के लिए VPCs प्रतिबंधित (हम के लिए इस सीमा को बढ़ाने के लिए कहा है, लेकिन यह जाहिरा तौर पर संभव नहीं है)। इसका मतलब है कि इस संगतता विधि का उपयोग करना हमारे लिए अब संभव नहीं है क्योंकि हमारे प्रत्येक स्टैक्स में सबनेट्स की आवश्यकता होती है जो कुल में 255 से अधिक पते फैलती हैं।

मैं उन्हें CloudFormation टेम्पलेट में पैरामीटर के रूप में परिभाषित करने के लिए होने के बजाय ऑन-द-मक्खी सीआईडीआर ब्लॉक जनरेट करना चाहते हैं,

एक विचार मैं था प्रत्येक ढेर एक "आधार पूर्णांक" होने और जोड़ने था प्रत्येक सबनेट के सीआईडीआर ब्लॉक के लिए।

उदाहरण के लिए:

"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, { "Fn::Sum", [ { "Ref" : "VpcCidrStart" }, 3 ] }, "0/24 ] ] } 

कहाँ VpcCidrStart एक पूर्णांक है कि मूल्य कि तीसरे सीआईडीआर ओकटेट स्क्रिप्ट के भीतर से शुरू कर देना चाहिए सेट है, और 3 सबनेट संख्या है।

जाहिर Fn::Sum आंतरिक समारोह हालांकि मौजूद नहीं है, इसलिए मुझे पता है कि अगर कोई VPC में पूर्णांक जोड़ने के लिए एक समाधान था चाहता था (यह कुछ ऐसा है, संभव नहीं होना चाहिए के रूप में CloudFormation स्ट्रिंग उन्मुख है की तरह लगता है), या सामान्य रूप से इस conundrum के लिए एक बेहतर समाधान।

उत्तर

2

इस तरह के मुद्दों के लिए मेरा समाधान क्लाउडफॉर्मेशन JSON दस्तावेज़ में टेम्पलेट को संकलित करने के लिए एक वैध प्रोग्रामिंग भाषा का उपयोग करना था। मैंने PHP 5.4, ट्विग और सिम्फनी कंसोल का उपयोग किया, लेकिन वाईएमएमवी।

अनिवार्य रूप से, आप प्रोग्रामिंग भाषा में समय से पहले गणित करते हैं, फिर उस डेटा का उपयोग करें जब आप अपना JSON दस्तावेज़ लिखते हैं।

+0

परिकलित मान का उल्लेख कर सकते मैं पहले से ही एक पर काम करना शुरू किया था "स्टैक मैनेजर" एप्लिकेशन उन स्थितियों को संभालने के लिए जहां स्टेजिंग और उत्पादन वातावरण को थोड़ा अलग सेटअप की आवश्यकता है, और रात में गैर-उत्पादन वातावरण के "रोशनी-आउट" को स्वचालित करने के लिए - इसलिए मुझे लगता है कि यह समाधान हमारे लिए समझ में आता है। एक शर्म की बात है कि क्लाउडफॉर्मेशन में इन सुविधाओं की मूल रूप से कमी नहीं है। – roberthl

+0

यदि आपके पास पहले से नहीं है, तो शायद आपके उपयोग-मामले का वर्णन करना और आधिकारिक [एडब्ल्यूएस क्लाउडफॉर्मेशन फ़ोरम] (https://forums.aws.amazon.com/forum) पर अपना फीचर अनुरोध करना एक अच्छा विचार होगा। jspa? forumID = 92)। मुझे पता है कि विकास दल वहां समर्थन का समर्थन करता है। –

+0

मुझे पता है कि यह थोड़ी देर हो गया है, लेकिन मैंने इसे लागू किया और हाल ही में [इसे गिटहब पर प्रकाशित किया] [https://github.com/royaloperahouse/stack-manager)। एडब्ल्यूएस ने हाल ही में क्लाउडफॉर्मेशन में मूल तर्क और गणित जोड़ा है, लेकिन यह बल्कि बोझिल है। – roberthl

5

मुझे एक समान स्थिति का सामना करना पड़ा। मैं कुछ स्क्रिप्ट का उपयोग कर टेम्पलेट उत्पन्न किए बिना टेम्पलेट से सबकुछ नियंत्रित करना चाहता था। मेरी इनपुट रेंज भी आपके मामले में सीमित है। मैं एक भयानक भयानक हैक डाल दिया। मैं इसे यहां पोस्ट करने के लिए शर्मिंदा हूं लेकिन अगर यह एक और व्यक्ति की मदद करता है, तो यह इसके लायक हो सकता है।

एक मानचित्रण तालिका जो आप के लिए गणित और सभी संभव आदानों

के लिए यह परिभाषित करेगा है
"Mappings" : { 
    "HorribleHackForSubtraction" : { 
     "1" : {"SubtractOne" : "0"}, 
     "2" : {"SubtractOne" : "1"}, 
     "3" : {"SubtractOne" : "2"}, 
     "4" : {"SubtractOne" : "3"}, 
     "5" : {"SubtractOne" : "4"}, 
     "6" : {"SubtractOne" : "5"}, 
     "7" : {"SubtractOne" : "6"}, 
     "8" : {"SubtractOne" : "7"}, 
     "9" : {"SubtractOne" : "8"}, 
     "10" : {"SubtractOne" : "9"}, 
     "11" : {"SubtractOne" : "10"}, 
     "12" : {"SubtractOne" : "11"}, 
     "13" : {"SubtractOne" : "12"}, 
     "14" : {"SubtractOne" : "13"}, 
     "15" : {"SubtractOne" : "14"}, 
     "16" : {"SubtractOne" : "15"}, 
    } 
}, 

आप के रूप

{ "Fn::FindInMap" : [ "HorribleHackForSubtraction", { "Ref" : "MyInputParam"}, "SubtractOne" ] } 
संबंधित मुद्दे