Environment properties and other software settings
The Configure updates, monitoring, and logging configuration page lets you configure the software on the Amazon Elastic Compute Cloud (Amazon EC2) instances that run your application. You can configure environment properties, Amazon X-Ray debugging, instance log storing and streaming, and platform-specific settings.
Topics
Configure platform-specific settings
In addition to the standard set of options available for all environments, most Elastic Beanstalk platforms let you specify language-specific or framework-specific settings. These appear in the Platform software section of the Configure updates, monitoring, and logging page, and can take the following forms.
-
Preset environment properties – The Ruby platform uses environment properties for framework settings, such as
RACK_ENV
andBUNDLE_WITHOUT
. -
Placeholder environment properties – The Tomcat platform defines an environment property named
JDBC_CONNECTION_STRING
that is not set to any value. This type of setting was more common on older platform versions. -
Configuration options – Most platforms define configuration options in platform-specific or shared namespaces, such as
aws:elasticbeanstalk:xray
oraws:elasticbeanstalk:container:python
.
To configure platform-specific settings in the Elastic Beanstalk console
Open the Elastic Beanstalk console
, and in the Regions list, select your Amazon Web Services Region. -
In the navigation pane, choose Environments, and then choose the name of your environment from the list.
Note
If you have many environments, use the search bar to filter the environment list.
In the navigation pane, choose Configuration.
-
In the Updates, monitoring, and logging configuration category, choose Edit.
-
Under Platform software, make necessary option setting changes.
-
To save the changes choose Apply at the bottom of the page.
For information about platform-specific options, and about getting environment property values in your code, see the platform topic for your language or framework:
-
.NET Core on Linux – Using the Elastic Beanstalk .NET core on Linux platform
Configuring environment properties (environment variables)
You can use environment properties, (also known as environment variables), to pass secrets, endpoints, debug settings, and other information to your application. Environment properties help you run your application in multiple environments for different purposes, such as development, testing, staging, and production.
In addition, when you add a database to your environment, Elastic Beanstalk sets environment properties, such as
RDS_HOSTNAME
, that you can read in your application code to construct a connection object or string.
Environment variables
In most cases, environment properties are passed to your application as environment variables, but the behavior is platform
dependent. For example, the Java SE platform sets environment variables that you retrieve with
System.getenv
, while the Tomcat platform sets Java system properties that you retrieve with
System.getProperty
. In general, properties are not visible if you connect to an instance and run
env
.
To configure environment properties in the Elastic Beanstalk console
Open the Elastic Beanstalk console
, and in the Regions list, select your Amazon Web Services Region. -
In the navigation pane, choose Environments, and then choose the name of your environment from the list.
Note
If you have many environments, use the search bar to filter the environment list.
In the navigation pane, choose Configuration.
-
In the Updates, monitoring, and logging configuration category, choose Edit.
-
Scroll down to Environment properties.
-
Select Add environment property.
-
Enter the property Name and Value pairs.
-
If you need to add more variables repeat Step 6 and Step 7.
-
To save the changes choose Apply at the bottom of the page.
Environment property limits
-
Keys can contain any alphanumeric characters and the following symbols:
_ . : / + \ - @
The symbols listed are valid for environment property keys, but might not be valid for environment variable names on your environment's platform. For compatibility with all platforms, limit environment properties to the following pattern:
[A-Z_][A-Z0-9_]*
-
Values can contain any alphanumeric characters, white space, and the following symbols:
_ . : / = + \ - @ ' "
Note
Some characters in environment property values must be escaped. Use the backslash character (
\
) to represent some special characters and control characters. The following list includes examples for representing some characters that need to be escaped:backslash (
\
) — to represent use\\
single quote (
'
) — to represent use\'
double quote (
"
) — to represent use\"
-
Keys and values are case sensitive.
-
The combined size of all environment properties cannot exceed 4,096 bytes when stored as strings with the format
key
=value
.
Software setting namespaces
You can use a configuration file to set configuration options and perform other instance configuration tasks during deployments. Configuration options can be platform specific or apply to all platforms in the Elastic Beanstalk service as a whole. Configuration options are organized into namespaces.
You can use Elastic Beanstalk configuration files to set environment properties and configuration options in your source code. Use the aws:elasticbeanstalk:application:environment namespace to define environment properties.
Example .ebextensions/options.config
option_settings:
aws:elasticbeanstalk:application:environment:
API_ENDPOINT: www.example.com/api
If you use configuration files or Amazon CloudFormation templates to create custom resources, you can use an Amazon CloudFormation
function to get information about the resource and assign it to an environment property dynamically during deployment. The following example from the
elastic-beanstalk-samplesNOTIFICATION_TOPIC
.
Notes
-
If you use an Amazon CloudFormation function to define an environment property, the Elastic Beanstalk console displays the value of the property before the function is evaluated. You can use the get-config platform script to confirm the values of environment properties that are available to your application.
-
The Multicontainer Docker platform doesn't use Amazon CloudFormation to create container resources. As a result, this platform doesn't support defining environment properties using Amazon CloudFormation functions.
Example .Ebextensions/sns-topic.config
Resources:
NotificationTopic:
Type: AWS::SNS::Topic
option_settings:
aws:elasticbeanstalk:application:environment:
NOTIFICATION_TOPIC: '`{"Ref" : "NotificationTopic"}`'
You can also use this feature to propagate information from Amazon CloudFormation pseudo parameters.
This example gets the current region and assigns it to a property named AWS_REGION
.
Example .Ebextensions/env-regionname.config
option_settings:
aws:elasticbeanstalk:application:environment:
AWS_REGION: '`{"Ref" : "AWS::Region"}`'
Most Elastic Beanstalk platforms define additional namespaces with options for configuring software that runs on the instance, such as the reverse proxy that relays requests to your application. For more information about the namespaces available for your platform, see the following:
-
Java SE – Java SE configuration namespace
-
Tomcat – Tomcat configuration namespaces
-
.NET Core on Linux – .NET Core on Linux configuration namespace
-
.NET – The aws:elasticbeanstalk:container:dotnet:apppool namespace
-
Node.js – Node.js configuration namespace
-
Python – Python configuration namespaces
Elastic Beanstalk provides many configuration options for customizing your environment. In addition to configuration files, you can also set configuration options using the console, saved configurations, the EB CLI, or the Amazon CLI. See Configuration options for more information.
Accessing environment properties
In most cases, you access environment properties in your application code like an environment variable. 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
.
-
Go –
os.Getenv
endpoint := os.Getenv("API_ENDPOINT")
-
Java SE –
System.getenv
String endpoint = System.getenv("API_ENDPOINT");
-
Tomcat –
System.getProperty
String endpoint = System.getProperty("API_ENDPOINT");
-
.NET Core on Linux –
Environment.GetEnvironmentVariable
string endpoint = Environment.GetEnvironmentVariable("API_ENDPOINT");
-
.NET –
appConfig
NameValueCollection appConfig = ConfigurationManager.AppSettings; string endpoint = appConfig["API_ENDPOINT"];
-
Node.js –
process.env
var endpoint = process.env.API_ENDPOINT
-
PHP –
$_SERVER
$endpoint = $_SERVER['API_ENDPOINT'];
-
Python –
os.environ
import os endpoint = os.environ['API_ENDPOINT']
-
Ruby –
ENV
endpoint = ENV['API_ENDPOINT']
Outside of application code, such as in a script that runs during deployment, you can access environment properties with the get-config platform script. See the elastic-beanstalk-samplesget-config
.