Customize CloudFormation

Under the hood, ufo creates most of the required resources with a CloudFormation stack. This includes the ELB, Target Group, Listener, Security Groups, ECS Service, and Route 53 records. You might need to customize these resources. Here are the ways to customize the resources that ufo creates.

  1. Settings - This is done with the .ufo/settings/cfn/default.yml file. This is the main and recommended way to customize.
  2. Override cfn template - You can specify your own template to use. You save this template at .ufo/settings/cfn/stack.yml. Use this approach as a last resort only when necessary.

Settings

The recommended approach to customize the CloudFormation resources is by adding properties to .ufo/settings/cfn/default.yml.

The properties in the file .ufo/settings/cfn/default.yml map directly to ufo’s CloudFormation resources. It allows you to customize the resources. The keys get transform to CamelCase keys to work with the CloudFormation template.

Example of Customization

Let’s customize the AWS::ElasticLoadBalancingV2::TargetGroup resource created by CloudFormation. We’ll adjust the deregistration_delay.timeout_seconds to 8. Here’s the relevant section of the .ufo/settings/cfn/default.yml

TargetGroup:
...
  TargetGroupAttributes:
  - Key: deregistration_delay.timeout_seconds
    Value: 8

The value will be injected to the generated CloudFormation template under the corresponding “TargetGroup Properties”. The generated template looks something like this:

TargetGroup:
  Properties:
...
    TargetGroupAttributes:
    - Key: deregistration_delay.timeout_seconds
      Value: 8
...

In this way, you can customize and override any properties associated with resources created by the ufo CloudFormation stack.

Here’s a list of the resources in the cfn/stack.yml that you can customize:

  • Ecs
  • EcsSecurityGroup
  • EcsSecurityGroupRule
  • Elb
  • ElbSecurityGroup
  • Listener
  • TargetGroup

Layering Support

The base.yml profile files always get evaluated and env-specific ENV.yml file are layered or merged together. This miminizes duplication. For example, these files are merged:

  • .ufo/settings/cfn/base.yml
  • .ufo/settings/cfn/development.yml

The settings in development.yml override the settings in base.yml. Here’s another example:

  • .ufo/settings/network/base.yml
  • .ufo/settings/network/development.yml

Note, this feature is available in v5.0.5+.

For the most up to date list check out the cfn/stack.yml source code directly.

Override Cfn Template

You can override the source template that ufo uses by creating your own and saving it at .ufo/settings/cfn/stack.yml in your project. It is recommended that you copy the source code and work from there cfn/stack.yml. Use this approach as a last resort only when absolutely necessary as it’ll likely break with a future version of ufo.

CloudFormation Stack Name

The CloudFormation stack name is based on the service name, UFO_ENV and UFO_ENV_EXTRA. A few examples help demonstrate:

Command Stack Name
ufo ship demo-web demo-web-development
ufo ship demo-web --cluster dev demo-web-development
UFO_ENV_EXTRA=2 ufo ship demo-web --cluster dev demo-web-development-2

CloudFormation Stack Source Code

The CloudFormation stack is currently generated from a template. The source code for this template is located at cfn/stack.yml. This implementation might change in the future.

Pro tip: Use the <- and -> arrow keys to move back and forward.

Edit this page

See a typo or an error? You can improve this page. This website is available on GitHub and contributions are encouraged and welcomed. We love pull requests from you!