2015-11-01 19 views
9

Come posso leggere la proprietà dell'ambiente dal mio AWS Elastic Beanstalk Applicazione trovato qui:Come leggere le proprietà dell'ambiente Elastic Beanstalk in .net?

Configuration > Software Configuration > Environment Properties 

enter image description here

Nessuno degli approcci seguenti lavori:

ConfigurationManager.AppSettings["MyServiceUrl"] 
ConfigurationManager.AppSettings["aws:elasticbeanstalk:application:environment.MyServiceUrl"] 
Environment.GetEnvironmentVariable("MyServiceUrl") 
Environment.GetEnvironmentVariable("aws:elasticbeanstalk:application:environment.MyServiceUrl") 

Il nome 'completo' il tentativo viene dallo AWS EB documentation.

Qualche idea?

risposta

14

Nel file .ebextensions/myoptions.config:

option_settings: 
    - option_name: MyServiceUrl 
    value: change me 

Questo aggiungerà l'opzione "MyServiceUrl" nella vostra sezione EB Ambiente Properties (come si sta vedendo già). Se distribuito, questo aggiungerà la seguente al file Web.Config:

<appSettings> 
    <add key="MyServiceUrl" value="change me" /> 
</appSettings> 

Se RDP l'istanza EC2, vedrai questo.

Quando si modifica la proprietà utilizzando la console EB, l'impostazione verrà modificata nel file Web.Config.

Così si accedere a questa proprietà utilizzando il AppSettings metodo standard:

The Catch:

È necessario assicurarsi che il file Web.Config non contiene questa impostazione, altrimenti EB non sostituisce esso. Se il pacchetto di distribuzione di Visual Studio include questa impostazione, EB non la sostituirà e riceverai sempre il valore distribuito quando accedi alla proprietà tramite il tuo codice.

La soluzione:

In te Web.Release.config di file, hanno l'impostazione rimossi durante visivo distribuzione Studio:

<appSettings> 
    <add key="MyServiceUrl" xdt:Transform="Remove" xdt:Locator="Match(key)" /> 
</appSettings> 

Questo eliminerà l'impostazione da Web.Config durante la distribuzione di Visual Studio e permetterà EB a aggiungi il valore nel file durante la distribuzione EB.

+0

Come per la risposta di Matt, Beanstalk li chiama "Variabili d'ambiente" ma per .Net sono invece effettivamente inseriti nel file web.config, come in fondo a http://docs.aws.amazon.com/elasticbeanstalk/ latest/dg/create_deploy_NET.container.console.html – bitcoder

+0

in aggiunta a questo: sembra esserci un bug in AWS che farà sì che il file di configurazione non venga aggiornato anche se la chiave è commentata. Sembra che non stiano analizzando il file ma eseguendo un confronto a livello di stringa per identificare se le chiavi esistono in web.config – Marek

+0

Sembra che questo comportamento sia cambiato in Elastic Beanstalk. Ora i documenti dicono "Le impostazioni applicate nella Console di gestione AWS sovrascrivono le stesse impostazioni nei file di configurazione, se presenti.Questo consente di avere le impostazioni predefinite nei file di configurazione e di sovrascriverle con impostazioni specifiche dell'ambiente nella console." –

0

Sembra che questo comportamento sia cambiato in Elastic Beanstalk. I documenti ora dicono

Le impostazioni applicate in AWS Management Console sovrascrivono le stesse impostazioni di nei file di configurazione, se presenti. Ciò consente di avere le impostazioni predefinite nei file di configurazione e di sovrascriverle con le impostazioni specifiche dell'ambiente nella console.

Così ora è possibile utilizzare gli stessi nomi di configurazione nel web.config e nella configurazione Elastic Beanstalk, ei valori Elastic Beanstalk sarà ignorare qualsiasi nel web.config. Sembra che EB aggiunga semplicemente nuove voci al web.file di configurazione, quindi ci saranno due voci per tutti i valori definiti in entrambe le posizioni. Poiché le voci aggiunte da EB sono più avanti nel file, hanno la precedenza.

Problemi correlati