Change Infrastructure

Now that we have bucket created, let’s modify it. Here’s the template code again.

app/blueprints/demo/template.rb

parameter("BucketName", Conditional: true)
parameter("AccessControl", Default: "Private")

resource("Bucket", "AWS::S3::Bucket",
  BucketName: ref("BucketName", Conditional: true),
  AccessControl: ref("AccessControl"),
)

output("BucketName", ref("Bucket"))

As you can see there’s a AccessControl parameter. One way to update the infrastructure is to directly change the parameter in the template.rb file. However, it is better to use a parameters file and pass it to the CloudFormation call. Using parameters allow us create different environments with the same code.

To pass parameter values, you simply have to define config/blueprints/demo/params files. Lono automatically uses them according the LONO_ENV value. The default value is LONO_ENV=dev.

Generate Starter Params Files

Lono can also generate starter params files for us with the lono seed command.

$ lono seed demo
Creating starter config files for demo
      create  config/blueprints/demo/params/dev.env
$

This produces:

config/blueprints/demo/params/dev.env

# AccessControl=Private
# BucketName=

Lono uses the information from output/demo/template.yml to generate the starter params file. It detected that all the parameters are optional, adds them with a leading comment. We’ll uncomment AccessControl and change it to AccessControl=PublicRead.

config/blueprints/demo/params/dev.env

AccessControl=PublicRead
# BucketName=

Next, we’ll update the infrastructure.