5

हम एस 3 में पर्यावरण विशिष्ट अनुप्रयोग विन्यास फाइलों को स्टोर करने की कोशिश कर रहे हैं। फाइलें विभिन्न उपनिर्देशिकाओं में संग्रहीत हैं जिन्हें पर्यावरण के नाम पर रखा गया है और फ़ाइल नाम के हिस्से के रूप में पर्यावरण भी है।एडब्ल्यूएस लोचदार बीनस्टॉक: ebextensions में पर्यावरण चर का उपयोग कैसे करें?

उदाहरण

dev/application-dev.properties 
stg/application-stg.properties 
prd/application-prd.properties 

लचीला बीनस्टॉक वातावरण नाम हैं देव, STG, पीआरडी कर रहे हैं और वैकल्पिक रूप से मैं भी लचीला बीनस्टॉक नामित वातावरण में परिभाषित एक वातावरण चर जो देव, STG या पीआरडी किया जा सकता है ।

मेरा प्रश्न अब है, मैं .ebextensions में कॉन्फ़िगरेशन फ़ाइल से कॉन्फ़िगरेशन फ़ाइल डाउनलोड करते समय पर्यावरण नाम या ENVIRONMENT चर का संदर्भ कैसे ले सकता हूं?

मैंने 0eसंदर्भ को .ebextensions/myapp.config में संदर्भित करने का प्रयास किया लेकिन तैनाती करते समय एक वाक्यविन्यास त्रुटि प्राप्त करें।

.ebextensions की सामग्री/myapp.config है:

files: 
    /config/application-`{"Ref": "AWSEBEnvironmentName" }`.properties: 
    mode: "000666" 
    owner: webapp 
    group: webapp 
    source: https://s3.amazonaws.com/com.mycompany.mybucket/`{"Ref": "AWSEBEnvironmentName" }`/application-`{"Ref": "AWSEBEnvironmentName" }`.properties 
    authentication: S3Access 

Resources: 
    AWSEBAutoScalingGroup: 
    Metadata: 
     AWS::CloudFormation::Authentication: 
     S3Access: 
      type: S3 
      roleName: aws-elasticbeanstalk-ec2-role 
      buckets: com.mycompany.api.config 

त्रुटि मैं मिलता है:

The configuration file .ebextensions/myapp.config in application version 
manualtest-18 contains invalid YAML or JSON. YAML exception: Invalid Yaml: 
mapping values are not allowed here in "<reader>", line 6, column 85: 
... .config/stg/application-`{"Ref": "AWSEBEnvironmentName" }`.prop ...^, 
JSON exception: Invalid JSON: Unexpected character (f) at position 0.. 
Update the configuration file. 

एक .ebextensions config में एक वातावरण चर को संदर्भित करने का सही तरीका क्या है एडब्ल्यूएस लोचदार बीनस्टॉक में फ़ाइल?

उत्तर

4

मैं इस काम के पाने के लिए संघर्ष करना पड़ा, जब तक मुझे पता चला कि उप समारोह ebextensions में उपलब्ध हो प्रतीत नहीं होता है: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html

इसका मतलब है कि आपको Fn::Join और Ref पर वापस गिरने की आवश्यकता है, कम से कम Sub के लिए समर्थन को ebextensions के लिए पेश किया गया है। ऐसा लगता है कि फाइल विशेषता के लिए एक निश्चित पथ की आवश्यकता होती है (और मैं इस संदर्भ में Fn::Join का उपयोग नहीं कर सका)।

इस मेरे समग्र समाधान इस प्रकार थी:

Resources: 
    AWSEBAutoScalingGroup: 
    Metadata: 
     AWS::CloudFormation::Authentication: 
     S3Auth: 
      type: S3 
      buckets: arn:aws:s3:::elasticbeanstalk-xxx 
      roleName: aws-elasticbeanstalk-ec2-role 

files: 
    "/tmp/application.properties" : 
    mode: "000644" 
    owner: root 
    group: root 
    source: { "Fn::Join" : ["", ["https://s3-xxx.amazonaws.com/elasticbeanstalk-xxx/path/to/application-", { "Ref" : "AWSEBEnvironmentName" }, ".properties" ]]} 
    authentication: S3Auth 

container_commands: 
    01-apply-configuration: 
    command: mkdir -p config && mv /tmp/application.properties config 

यह एक application.properties फ़ाइल (पर्यावरण नाम क्वालीफायर के बिना) में परिणाम होगा एक config निर्देशिका तैनात आवेदन उदाहरण के बगल में।

यदि आप इस दृष्टिकोण का उपयोग कर फ़ाइल नाम के हिस्से के रूप में पर्यावरण का नाम रखना चाहते हैं, तो आपको फ़ाइल को नियंत्रित करने के लिए फ़ाइल को Fn::Join अभिव्यक्ति का उपयोग करने के लिए फ़ाइल को स्थानांतरित करने की आवश्यकता होगी।

1

आप लगभग वहां हैं। एक्सपेक्शंस YAML प्रारूप का उपयोग कर रहे हैं, जबकि आप JSON का उपयोग करने का प्रयास कर रहे हैं। Ref: AWSEBEnvironmentName का प्रयोग करें। इसके अलावा, आप Sub समारोह का लाभ लेने से बचने के लिए कर सकते हैं परेशान Join:

!Sub "/config/application-${AWSEBEnvironmentName}.properties"

1

आपकी .ebextensions कॉन्फ़िगरेशन फ़ाइल लगभग सही थी। पर्यावरण चर या एडब्लूएस संसाधन नाम के साथ फ़ाइल नाम को प्रतिस्थापित करना काम नहीं करेगा, इसके लिए मार्क के उत्तर में container_commands अनुभाग में बनाई गई फ़ाइल का नाम बदलने का उत्तर दिया गया है।

source विकल्प एडब्ल्यूएस संसाधन का उपयोग कर Ref सही था नाम का उपयोग करने की कोशिश कर रहा है मूल्य है, यह सिर्फ नीचे की तरह, एकल उद्धरण ' से घिरा हुआ जा सकता था:

files: 
    /config/application.properties: 
    mode: "000666" 
    owner: webapp 
    group: webapp 
    source: 'https://s3.amazonaws.com/com.mycompany.mybucket/`{"Ref": "AWSEBEnvironmentName" }`/application-`{"Ref": "AWSEBEnvironmentName" }`.properties' 
    authentication: S3Access 

और उपयोग करने के लिए वातावरण चर Fn::GetOptionSetting का उपयोग करें। पर्यावरण चर aws:elasticbeanstalk:application:environmentnamespace में हैं।

files: 
    "/tmp/application.properties" : 
    mode: "000666" 
    owner: webapp 
    group: webapp 
    source: 'https://s3.amazonaws.com/com.mycompany.mybucket/`{"Ref": "AWSEBEnvironmentName" }`/application-`{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "ENVIRONMENT ", "DefaultValue": "dev"}}`.properties' 
    authentication: S3Auth 
:

उदाहरण नीचे files की source विकल्प में एक वातावरण चर ENVIRONMENT का उपयोग

संबंधित मुद्दे