ElasticBeanstalk: Set instance type and security group from config file
I'm having trouble defining instance type and security groups through .ebextensions/*.config
files in the root of my application bundle.
Briefly, I have two config files that look like this:
.ebextensions/01-options.config
:
option_settings:
[...]
- namespace: 'aws:elasticbeanstalk:application:environment'
option_name: CONFIG_FILE_ONE
value: '01-options.config'
[...]
and .ebextensions/02-app-test-env.config
:
option_settings:
- namespace: 'aws:elasticbeanstalk:application:environment'
option_name: NODE_ENV
value: 'Test'
- namespace: 'aws:elasticbeanstalk:application:environment'
option_name: CONFIG_FILE_TWO
value: '02-app-test-env'
- namespace: aws:autoscaling:launchconfiguration
option_name: InstanceType
value: t2.micro
- namespace: aws:autoscaling:launchconfiguration
option_name: SecurityGroups
value: sg-ys75dfs2
Now, the environment variables are being set, so I know it's reading both config files, but the security group and instance type aren't being set - even when I rebuild the environment, instances are still created as t1.micro
with default security groups - my settings aren't being applied.
What am I missing here? How can I define the instance type using .config
files?
Solution 1:
You should be able to use what you have in that config file for the launchconfiguration namespace, but you need the single quotes around the namespace and value like you have in the first 2 that are working.
- namespace: 'aws:autoscaling:launchconfiguration'
option_name: InstanceType
value: 't2.micro'
- namespace: 'aws:autoscaling:launchconfiguration'
option_name: SecurityGroups
value: 'sg-ys75dfs2'
Also, be sure to watch for errors with eb logs if using eb cli 3.x. Hope that helps.
Solution 2:
As mentioned in the comments, the settings in the config files are ignored if they are also set on the environment level, (and the setting for InstanceType
is automatically created on the environment level).
If you prefer to keep your settings in the config files, you need to remove them from the environment, you can do that for InstanceType
with the following command:
aws elasticbeanstalk update-environment --environment-name my-env --options-to-remove Namespace=aws:autoscaling:launchconfiguration,OptionName=InstanceType
See also the AWS docs for other ways to change environment level settings.