आप Amazon Elastic Beanstalk (AWS EBS) पर कस्टम वातावरण चर कैसे पास करते हैं?


121

अमेज़ॅन इलास्टिक बीनस्टाकल ब्लर्ब कहता है:

इलास्टिक बर्नस्टॉक आपको "हुड खोलें" और पूर्ण नियंत्रण बनाए रखने की सुविधा देता है ... यहां तक ​​कि इलास्टिक बीनस्टॉक कंसोल के माध्यम से पर्यावरण चर भी।

http://aws.amazon.com/elasticbeanstalk/

इलास्टिक बीनस्टॉक कॉन्फ़िगरेशन में एक के अलावा अन्य पर्यावरण चर कैसे पारित करें?


4
आप इस पर स्वीकृत उत्तर को बदलने के लिए विचार कर सकते हैं
दीक्षा

जवाबों:


136

.ebextensions/*.configजिस तरह से उपयोग करने वाले किसी व्यक्ति के सिर के रूप में : आजकल आप इलास्टिक बीनस्टॉक वेब इंटरफ़ेस में पर्यावरण चर जोड़ सकते हैं, संपादित कर सकते हैं और हटा सकते हैं

चर विन्यास के अंतर्गत हैं → सॉफ्टवेयर विन्यास:

पर्यावरण के गुण

ओमेमा के उत्तर की.ebextensions तरह वेरिएस बनाना अभी भी काम करता है।

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


2
वैकल्पिक रूप से, आप कॉन्फ़िगरेशन को भी सहेज सकते हैं, और कॉन्फ़िगरेशन का उपयोग करके नए वातावरण को लॉन्च कर सकते हैं।
माइकल गैलेगो

1
हां, मैं कहूंगा कि यह सबसे अच्छा विकल्प है। मैं बस इसे भूलता जा रहा हूं और नए वातावरण को विली-निली लॉन्च करता हूं। :)
चूना

1
@dingdong: हाँ, और विशेष रूप से आप उन्हें अपने आवेदन में एक्सेस कर सकते हैं। जैसे रेल में ENV["CUSTOM_ENV"]वापसी होगी "something-something"
चूना

3
यदि मैं नए गुण जोड़ता हूं, या संपत्ति का मूल्य बदलता हूं, तो क्या वे तुरंत उपलब्ध हैं, क्या उन्हें पुनः आरंभ करने आदि के लिए कुछ भी आवश्यक है? मैंने हाल ही में एक ऑटोसैसलिंग समूह का आकार बदल दिया है और AWS ने हमारे सभी 40 उदाहरणों को समाप्त कर दिया है और 45 नए लोगों को अलग कर दिया है। मैं नहीं चाहता कि यदि मैं एक मौजूदा परिवेश में एक नई संपत्ति जोड़ूं तो ऐसा हो सकता है। कोई विचार?
इंजीनियर

4
हाल के बदलावों से सावधान रहें। इस उत्तर के अनुसार , उन्हें पर्यावरण चर के रूप में पारित नहीं किया जाता है। उन्हें केवल सिस्टम गुण के रूप में पारित किया गया है
जेम्स

107

केवल 5 मान सीमित हैं, या आप कस्टम वातावरण चर नाम रखना चाह सकते हैं। आप कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके ऐसा कर सकते हैं। अपनी परियोजना के मूल में एक निर्देशिका बनाएँ

.ebextensions /

फिर एक फाइल बनाएं जिसे पर्यावरण कहा जाता है ।config (इस फाइल को कुछ भी कहा जा सकता है, लेकिन इसमें .config एक्सटेंशन होना चाहिए) और अन्य मान जोड़ें।

option_settings:
  - option_name: CUSTOM_ENV
    value: staging

आपके द्वारा अपने एप्लिकेशन को परिनियोजित करने के बाद आपको पर्यावरण विवरण के तहत यह नया मान दिखाई देगा -> कॉन्फ़िगरेशन संपादित करें -> कंटेनर

अधिक जानकारी के लिए यहां दस्तावेज़ देखें: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options

अपडेट करें

एपीआई कुंजी, रहस्य और इतने पर जैसे अपने रिपॉजिटरी मूल्यों को करने से रोकने के लिए, आप प्लेसहोल्डर मान रख सकते हैं।

option_settings:
  - option_name: SOME_API_KEY
    value: placeholder-value-change-me

बाद में आप एडब्ल्यूएस व्यवस्थापक पैनल (पर्यावरण विवरण -> संपादन कॉन्फ़िगरेशन -> कंटेनर) पर जा सकते हैं और वहां के मूल्यों को अपडेट कर सकते हैं। मेरे अनुभव में ये मूल्य बाद की तैनाती के बाद नहीं बदलते हैं।

अपडेट 2 जैसा कि @Benjamin ने अपनी टिप्पणी में कहा है, क्योंकि 18 जुलाई 2013 को नया रूप और अनुभव लुढ़का था, कंसोल से सीधे किसी भी पर्यावरण चर को परिभाषित करना संभव है:

Configuration > Software Configuration > Environment Properties


2
@ ओनेमा - आप कॉन्फिग फाइल में नई कीज को कैसे हैंडल करते हैं? क्या प्लेसहोल्डर मानों के साथ अपडेट की गई फ़ाइल को पहले से सेट की गई सभी कुंजियों को आगे बढ़ाया जाएगा?
तबरेज़

1
@ टैबरेज़, कोई भी पूर्व निर्धारित कुंजी उनके मूल्यों को बनाए रखेगा।
अराजकता

2
क्षमा करें @Tabrez, मुझे पहले इस पर गौर करने का मौका नहीं मिला। Anarchtica उत्तर में जोड़ने के लिए मैंने कुछ परीक्षण चलाए और पता चला कि यदि आप किसी प्लेसहोल्डर का उपयोग करते हैं, और तब AWS कंसोल में वास्तविक कुंजियों का उपयोग करके मानों को अपडेट करते हैं और फिर आप कॉन्फ़िगरेशन फ़ाइल और पुश में प्लेसहोल्डर मान अपडेट करते हैं, तो कुंजियाँ नहीं होंगी नए प्लेसहोल्डर के साथ बदल दिया गया। मुझे यह थोड़ा अजीब लगता है, लेकिन मुझे लगता है कि यह एक स्वागत योग्य व्यवहार है क्योंकि आप कंसोल में सभी एनवी मानों को प्रबंधित करने के लिए बाध्य होंगे।
ओनिमा

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

1
क्या किसी को पता है कि कंटेनरी के लिए अपने कॉन्फिगर फाइल के अंदर पर्यावरण चर का उपयोग कैसे करें? मैंने कोशिश की हैcommand: "nrsysmond-config --set license_key={$NR_INSTALL_KEY}"
कोलिन

29

2016 के Java8 Tomcat8 AMI में, ElasticBeanstalk वेब कॉन्फ़िगरेशन से पर्यावरण चर सेट करने में विफल रहता है। वे वास्तव में jvm -D गुण सेट कर रहे हैं।

- "निम्नलिखित गुणों को पर्यावरण चर के रूप में आवेदन में पारित किया जाता है। और जानें।"

यह कथन Java Tomcat ami के लिए गलत है। अमेज़न इन्हें पर्यावरण चर के रूप में सेट नहीं करता है । उन्हें सिस्टम गुण के रूप में सेट किया जाता है कमांड लाइन पर टॉमकैट को jv के लिए -D गुण के रूप में पारित किया जाता है। जावा में पर्यावरण चर पाने की विधि संपत्ति प्राप्त करने के लिए समान नहीं है। System.getenv vs System.getProperty

मैंने बॉक्स में ssh'd और सत्यापित किया कि पर्यावरण चर कभी सेट नहीं किया गया था। हालाँकि, टॉमकैट लॉग में मैं देख सकता हूँ कि डी संपत्ति सेट है।

मैंने दोनों स्थानों के लिए अब वर्कअराउंड के रूप में जांचने के लिए अपना कोड बदल दिया है।


और नेट के लिए, वे वातावरण में डाल अपने web.config फ़ाइल के बजाय वार्स में, के अनुसार डाला जाता है stackoverflow.com/a/33465765/1991614 । इस मुद्दे को और
उलझाते हुए

आप मेरे हीरो हैं!
टॉमकैट

1
अपने जैसे उन लोगों के लिए जिन्हें वास्तव में सिस्टम वातावरण चर सेट करने की आवश्यकता है, आप उन पर्यावरण गुणों को एक अंतर्निहित बीनस्टॉक स्क्रिप्ट का उपयोग करके पुनः प्राप्त कर सकते हैं। अधिक जानकारी के लिए इस उत्तर को देखें: serverfault.com/a/770736/292741
BoomShadow

1
Amazon Linux 2017.03 v2.5.4 with Java8यह भी सेट नहीं है।
सानोबा

2
आप बॉक्स में SSH नहीं कर सकते और चर देख सकते हैं। वे केवल शेल में सेट होते हैं जो आपके ऐप को चलाता है। docs.aws.amazon.com/elasticbeanstalk/latest/dg/… In general, however, environment properties are passed only to the application and can't be viewed by connecting an instance in your environment and running env. आपके चरों को किसी लॉगिन प्रोग्राम में सेट नहीं किया जाता है .bashrc। हालाँकि आप सही हैं कि Tomcat वैरिएबल को गुणों के रूप में पारित किया गया है। (लिंक किए गए पृष्ठ के शीर्ष पर देखें।)
च्लोए

18

AWS आपके पर्यावरण चर में CloudFormation टेम्पलेट स्ट्रिंग की व्याख्या करेगा। आप इसका उपयोग अपने आवेदन के अंदर अपने ईबी वातावरण के बारे में जानकारी प्राप्त करने के लिए कर सकते हैं:

AWS वेब इंटरफ़ेस में आपके पर्यावरण के नाम के रूप में निम्नलिखित का मूल्यांकन किया जाएगा (पीछे टिक पर ध्यान दें)

`{ "Ref" : "AWSEBEnvironmentName" }`

या, आप .ebextensions/*.configबैक टिक (`) में CloudFormation टेम्प्लेट का उपयोग और रैप कर सकते हैं :

{
  "option_settings": [
    {
      "namespace": "aws:elasticbeanstalk:application:environment",
      "option_name": "ENVIRONMENT_NAME",
      "value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`"
    }
  ]
}

3
अस्पष्ट, लेकिन बस मैं क्या देख रहा था।
एरिक वॉकर

1
क्या इसके लिए प्रलेखन है? मैं इसे ढूंढ नहीं सकता।
यंगमिलिशथोरी


12

वैकल्पिक रूप से, आप पर्यावरण चर सेट करने के लिए इलास्टिक बीनस्टॉक सीएलआई का उपयोग कर सकते हैं।

एक पर्यावरण चर सेट करने के लिए: eb setenv FOO=bar

पर्यावरण चर देखने के लिए: eb printenv


9

पर्यावरण विवरण -> कॉन्फ़िगरेशन संपादित करें -> कंटेनर

यहाँ छवि विवरण दर्ज करें


5

यह ईएनवी को बीनस्टॉक में गतिशील मूल्यों के साथ सेट करने का एकमात्र तरीका प्रतीत होता है। मैं अपने मल्टी-डॉकटर सेटअप के लिए एक वर्कअराउंड के साथ आया था:

1) अपने ECS रिपॉजिटरी में + अपलोड करने से पहले अपने डॉकरीफाइल में इसे जोड़ें:

CMD eval `cat /tmp/envs/env_file$`; <base image CMD goes here>;

2) अपने Dockerrun.aws.json फ़ाइल में एक वॉल्यूम बनाएँ:

{
    "name": "env-file",
    "host": {
        "sourcePath": "/var/app/current/envs"
    }
}

3) अपने कंटेनर में माउंट वॉल्यूम

{
  "sourceVolume": "env-file",
  "containerPath": "/tmp/envs",
  "readOnly": true
}

4) अपने .ebextensions / options.config फ़ाइल में एक कंटेनर_कमांड जैसे जोड़ें:

container_commands:
  01_create_mount:
    command: "mkdir -p envs/"
  02_create_env_file:
    command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME=" , { "Ref", "RESOURCE" }, ';" > envs/env_file;' ] ] }

5) ईबे की तैनाती और आपका ईएनवीएस आपके डॉकटर कंटेनर में उपलब्ध होना चाहिए

आप और कंटेनर जोड़ सकते हैं जैसे अधिक कंटेनर_कम जोड़कर:

  02_create_env_file_2:
    command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, ';" >> envs/env_file;' \] \] }

उम्मीद है की यह मदद करेगा!


Lifesaver। यदि आपके पास गतिशील पर्यावरण चर हैं, जैसे X: '{"Ref": "MyCache"} 'मान {"Ref": "MyCache"}डिफ़ॉल्ट रूप से पार्स नहीं किया गया है ( जब कंटेनर केवल इसे एक्सेस करने का प्रयास करता है)। इसके साथ आप इस तरह गतिशील चर हो सकते हैं।
पेटर केजेलकेन्स 14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.