मेरे पास जावा में लिखा गया एडब्ल्यूएस लैम्ब्डा फ़ंक्शन है जो मैं एडब्ल्यूएस क्लाउडफॉर्मेशन फ़ंक्शन के जवाब के हिस्से के रूप में उपयोग करना चाहता हूं। अमेज़ॅन क्लाउडफॉर्मेशन कस्टम संसाधन बनाने के तरीके पर two detailed examples प्रदान करता है जो Node.js में लिखे गए एडब्ल्यूएस लैम्ब्डा फ़ंक्शन के आधार पर अपना मान देता है, हालांकि मुझे लैम्ब्डा उदाहरणों को जावा में अनुवाद करने में कठिनाई हो रही है। हम अपने एडब्ल्यूएस जावा फ़ंक्शन को कैसे सेट अप कर सकते हैं ताकि यह क्लाउडफॉर्मेशन से लैम्ब्डा फ़ंक्शन के पैरामीटर के रूप में पास किए गए पूर्व-हस्ताक्षरित S3 यूआरएल के मान को पढ़ सके और प्रतीक्षा क्लाउडफॉर्मेशन टेम्पलेट पर हमारी वांछित प्रतिक्रिया वापस भेज सके?जावा में लिखे गए एडब्ल्यूएस लैम्ब्डा फ़ंक्शन का उपयोग करके क्लाउडफॉर्मेशन कस्टम संसाधनों का उपयोग और जवाब कैसे प्राप्त करते हैं?
उत्तर
एडब्ल्यूएस के साथ आगे और आगे बातचीत के बाद, यहां कुछ कोड नमूने हैं जिन्हें मैंने बनाया है।
सबसे पहले, यह सोचते हैं आप leverage the predefined interfaces for creating Handlers करना चाहते हैं, तो आप RequestsHandler को लागू करने और इसलिए तरह HandleRequest पद्धतियां निर्धारित कर सकते हैं:
public class MyCloudFormationResponder implements RequestHandler<Map<String, Object>, Object>{
public Object handleRequest(Map<String,Object> input, Context context) {
...
}
}
Map<String, Object>
मूल्यों की एक मानचित्र लैम्ब्डा समारोह के लिए अपने CloudFormation संसाधन से भेजे गए है । एक उदाहरण सीएफ संसाधन:
"MyCustomResource": {
"Type" : "Custom::String",
"Version" : "1.0",
"Properties": {
"ServiceToken": "arn:aws:lambda:us-east-1:xxxxxxx:function:MyCloudFormationResponderLambdaFunction",
"param1": "my value1",
"param2": ["t1.micro", "m1.small", "m1.large"]
}
}
यहाँ से बाहर बात करने के लिए, परे क्या एडब्ल्यूएस दस्तावेज में NodeJS उदाहरण से समझाया गया है
हैंString responseURL = (String)input.get("ResponseURL");
context.getLogger().log("ResponseURLInput: " + responseURL);
context.getLogger().log("StackId Input: " + input.get("StackId"));
context.getLogger().log("RequestId Input: " + input.get("RequestId"));
context.getLogger().log("LogicalResourceId Context: " + input.get("LogicalResourceId"));
context.getLogger().log("Physical Context: " + context.getLogStreamName());
@SuppressWarnings("unchecked")
Map<String,Object> resourceProps = (Map<String,Object>)input.get("ResourceProperties");
context.getLogger().log("param 1: " + resourceProps.get("param1"));
@SuppressWarnings("unchecked")
List<String> myList = (ArrayList<String>)resourceProps.get("param2");
for(String s : myList){
context.getLogger().log(s);
}
महत्वपूर्ण बातें निम्न कोड के साथ विश्लेषण किया जा सकता
(String)input.get("ResponseURL")
प्री-हस्ताक्षरित एस 3 यूआरएल है जिसे आपको जवाब देने की आवश्यकता है (बाद में इस पर अधिक)(Map<String,Object>)input.get("ResourceProperties")
आपके क्लाउडफॉर्मेशन कस्टम संसाधन "गुण" का मानचित्र आपके सीएफ टेम्पलेट से लैम्ब्डा फ़ंक्शन में पास कर देता है। मैं हालांकि कई अन्य आदेश वापस CloudFormation टेम्पलेट कस्टम संसाधन इन्स्टेन्शियशन के लिए प्रतिक्रिया करने में संभव
हैं, वस्तु प्रकार है कि वापस किया जा सकता के दो उदाहरण के रूप में एक स्ट्रिंग और ArrayList प्रदान की है, आप एक HTTP PUT कॉल बैक पर अमल करने की जरूरत है ResponseURL को पहले उल्लेख किया गया है और चर के cloudFormationJsonResponse
में निम्न में से अधिकांश फ़ील्ड शामिल हैं। नीचे मैंने किया है इस
try {
URL url = new URL(responseURL);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
JSONObject cloudFormationJsonResponse = new JSONObject();
try {
cloudFormationJsonResponse.put("Status", "SUCCESS");
cloudFormationJsonResponse.put("PhysicalResourceId", context.getLogStreamName());
cloudFormationJsonResponse.put("StackId", input.get("StackId"));
cloudFormationJsonResponse.put("RequestId", input.get("RequestId"));
cloudFormationJsonResponse.put("LogicalResourceId", input.get("LogicalResourceId"));
cloudFormationJsonResponse.put("Data", new JSONObject().put("CFAttributeRefName", "some String value useful in your CloudFormation template"));
} catch (JSONException e) {
e.printStackTrace();
}
out.write(cloudFormationJsonResponse.toString());
out.close();
int responseCode = connection.getResponseCode();
context.getLogger().log("Response Code: " + responseCode);
} catch (IOException e) {
e.printStackTrace();
}
विशेष ध्यान दें
नोड "डेटा" का संदर्भ एक अतिरिक्त com.amazonaws.util.json.JSONObject
जिसमें मैं कोई गुण है कि मेरे CloudFormation टेम्पलेट में आवश्यक हैं शामिल हैं जो ऊपर है। इस मामले में, यह { "Fn::GetAtt": [ "MyCustomResource", "CFAttributeRefName" ] }
अंत की तरह कुछ के साथ सीएफ टेम्पलेट में पुनः प्राप्त किया जा जाएगा, तो आप बस return null
के बाद से कुछ भी नहीं है इस समारोह से लौटा दिया जाएगा के रूप में यह HTTPUrlConnection
है कि वास्तव में सीएफ कॉल का जवाब है कर सकते हैं।
नील,
मैं वास्तव में यहां आपके महान दस्तावेज़ों की सराहना करता हूं। मैं कुछ चीजें जोड़ूंगा जो मुझे उपयोगी मिली:
input.get ("RequestType") - यह "बनाएं", "हटाएं" आदि के रूप में वापस आता है। यह निर्धारित करने के लिए आप इस मान का उपयोग कर सकते हैं कि क्या करना है ढेर बनाया गया है, हटाया गया है, आदि ..
जहां तक सुरक्षा है, मैंने लैम्ब्डा फ़ंक्शन अपलोड किए हैं और वीपीसी, सबनेट्स और सुरक्षा समूह (डिफ़ॉल्ट) को मैन्युअल रूप से सेट किया है, इसलिए मैं इसे कई क्लाउडॉर्मन स्क्रिप्ट के साथ पुन: उपयोग कर सकता हूं। ऐसा लगता है कि ठीक काम कर रहा है।
मैंने एक लैम्ब्डा फ़ंक्शन बनाया जिसे सीएफ स्क्रिप्ट द्वारा बुलाया जाता है और एक व्यक्ति मैन्युअल रूप से विफल होने पर मैन्युअल रूप से चला सकता है।
यह उत्कृष्ट ग्रेडल aws प्लगइन जावा लैम्ब्डा कार्यों को एडब्ल्यूएस में अपलोड करना आसान बनाता है।
- 1. जावा में लैम्ब्डा फ़ंक्शन का उपयोग करके एडब्ल्यूएस एस 3 इवेंट अधिसूचना
- 2. एडब्ल्यूएस लैम्ब्डा फ़ंक्शन
- 3. मैं एडब्ल्यूएस सीएलआई का उपयोग कर एडब्ल्यूएस लैम्ब्डा फ़ंक्शन में ट्रिगर कैसे जोड़ूं?
- 4. लॉनाश का उपयोग करके आप चेन फ़ंक्शन कैसे करते हैं?
- 5. एडब्ल्यूएस लैम्ब्डा और जावा संगामिति
- 6. एडब्ल्यूएस लैम्ब्डा: जावा
- 7. एडब्ल्यूएस, लैम्ब्डा, जावा, पीओजेओ, कस्टम जेसन संपत्ति का नाम
- 8. जावास्क्रिप्ट/नोडजेस में एडब्ल्यूएस क्षेत्र कैसे प्राप्त करें लैम्ब्डा फ़ंक्शन:
- 9. एडब्ल्यूएस लैम्ब्डा फ़ंक्शन
- 10. 'रीफाई' का उपयोग करके फ़ंक्शन की घोषणा कैसे प्राप्त करें?
- 11. एडब्ल्यूएस लैम्ब्डा: तकिया लाइब्रेरी का उपयोग कैसे करें?
- 12. एडब्ल्यूएस लैम्ब्डा फ़ंक्शन
- 13. 'std :: io :: लिखें' का उपयोग करते समय कितने बाइट लिखे गए हैं इसका ट्रैक कैसे रखें?
- 14. जावा में एडब्ल्यूएस लैम्ब्डा बाइट स्ट्रीमिंग क्लाइंट
- 15. vba का उपयोग करके विंडोपीआई में findwindow फ़ंक्शन का उपयोग करके विंडो का पता कैसे लगाएं?
- 16. जावा में लिखे गए सेलेनियम वेबड्राइवर प्रोग्राम के भीतर आप फ़ायरफ़ॉक्स प्लगइन का उपयोग कैसे करते हैं?
- 17. Asyncpg और एडब्ल्यूएस लैम्ब्डा
- 18. कस्टम JSJON विधि में JSON.stringify का उपयोग कैसे करते हैं?
- 19. पहलू उन्मुख तकनीकों का उपयोग करके लिखे गए प्रोग्राम का एक अच्छा उदाहरण क्या है?
- 20. फ़ोनगैप का उपयोग करके कौन से वाणिज्यिक/असली दुनिया ऐप्स लिखे गए हैं?
- 21. क्लाउडफॉर्मेशन
- 22. उद्देश्य-सी का उपयोग करके कस्टम व्यू में टेक्स्ट कैसे आकर्षित करते हैं?
- 23. एडब्ल्यूएस लैम्ब्डा फ़ंक्शन में बाहरी क्रेडेंशियल का उपयोग कैसे करें (ठीक से)?
- 24. पायथन अधिकतम फ़ंक्शन 'कुंजी' और लैम्ब्डा अभिव्यक्ति का उपयोग कर
- 25. जावा कंपाइलर और जेवीएम किस भाषा में लिखे गए हैं?
- 26. का उपयोग लैम्ब्डा कार्यों
- 27. आप जावा में रूबी का उपयोग कैसे करते हैं?
- 28. जावा का उपयोग करके ईथरनेट पता कैसे प्राप्त करें?
- 29. का उपयोग drawable संसाधनों
- 30. SASS का उपयोग करके आप मीडिया क्वेरी कैसे करते हैं?
आप बाल्टी के रूप में मैं प्रतिक्रिया कस्टम संसाधन से वापस पढ़ने जब मैं यह बाल्टी के लिए भेजा के साथ एक समस्या है जहां प्रतिक्रिया भेज दिया जाता है के लिए कोई भी अनुमतियां देते हैं? मेरा लैम्ब्डा डेटा को सही तरीके से भेज रहा है और फिर क्लाउडफॉर्मेशन लटकता है क्योंकि ऐसा लगता है कि इसे कभी अधिसूचित नहीं किया जाता है। –
Awkwardly respondURL का अनुरोध एक त्रुटि के साथ विफल रहता है जिसे मैं समझ नहीं सकता: आपके द्वारा प्रदत्त अनुरोध हस्ताक्षर आपके द्वारा प्रदान किए गए हस्ताक्षर से मेल नहीं खाता है। अपनी कुंजी और हस्ताक्षर विधि की जांच करें। क्या आपको इसका सामना करना पड़ा है और क्या आप जानते हैं कि इसका वास्तव में क्या अर्थ है? –