When working with CloudFormation, you usually configure parameters for the template. The lono seed command helps with this step by generating a starter param file. It evaluates the template itself to generate the starter example values. We’ll use the demo blueprint we created in Lono CloudFormation Framework Introduction Part 1: EC2 Instance.
How It Works
Just run lono seed with the blueprint name.
lono seed BLUEPRINT
Here’s an example with output:
$ lono seed demo
Creating starter config files for demo
Generating CloudFormation templates for blueprint demo:
output/demo/templates/demo.yml
create configs/demo/params/development.txt
$
Let’s look at the contents:
# InstanceType=t3.micro
In this simple demo example, there is only 1 parameter to configure. For templates with several parameters, the lono seed command is a larger time saver.
Notice that the structure also separates configs from blueprints. This allows us to reuse blueprints and follow the DRY principle. For example, the structure allows us to use the same CloudFormation code to create different environments. To generate starter seed files for different environments set LONO_ENV
. Example:
$ LONO_ENV=production lono seed demo
Creating starter config files for demo
Generating CloudFormation templates for blueprint demo:
output/demo/templates/demo.yml
create configs/demo/params/production.txt
$
That produces configs/demo/params/production.txt
. We can use different parameters for the development vs production environments.
How Starter Values Are Determined
Interestingly, the starter values are derived from the template definition itself. The parameter Description
is used. Anything after “Example: “ or “IE: “ is extracted and used as the value. Example:
app/templates/demo.rb:
parameter("Vpc", Description: "Virtual Private Network VPC. Example: vpc-111")
This produces:
configs/demo/params/development.txt
Vpc=vpc-111
Variables Seed Files
For our demo blueprint, lono seed
does not create starter configs/demo/variables
files. Some blueprints will also generate starter variables config files.
Starter variables cannot be inferred from the CloudFormation template themselves, though. So the blueprint must be authored to support starter variables files. The blueprint tells lono seed
how to generate starter variables files with a seeds/configs.rb
file. Here’s the interface for the configs.rb
:
class Lono::Seed::Configs < Lono::Seed::Base
def variables
<<~EOL
@somevar = "my value"
EOL
end
end
The class must be named Lono::Seed::Configs
and inherit from Lono::Seed::Base
. The variables
method returns a String. The String is used for the contents of configs/demo/variables/development.rb
. If we add the example above and run lono seed
again.
LONO_ENV=development lono seed demo
LONO_ENV=production lono seed demo
This time it creates the starter variables files also.
$ tree configs/demo/
configs/demo/
├── params
│ ├── development.txt
│ └── production.txt
└── variables
├── development.rb
└── production.rb
$
The contents of configs/demo/variables/development.rb:
@somevar = "my value"
Summary
We covered lono seed in detail in this post. It provides a quick way to generate starter configs for your blueprints. There’s more info on lono seed on the docs. In the next post, we’ll cover variables and loops.