ufo tasks build
Usage
ufo tasks build
Description
Build task definitions.
Summarized Example
ufo tasks build
Builds all the task defintiions. Note all the existing ufo/output generated task defintions are wiped out.
Explanation
The command ufo tasks build
generates the task definitions locally and writes them to the output/
folder. There are 2 files that it uses in order to produce the raw AWS task definitions files.
- ufo/templates/main.json.erb
- ufo/task_definitions.rb
Here’s an example of each of them:
main.json.erb:
{
"family": "<%= @family %>",
"containerDefinitions": [
{
"name": "<%= @name %>",
"image": "<%= @image %>",
"cpu": <%= @cpu %>,
<% if @memory %>
"memory": <%= @memory %>,
<% end %>
<% if @memory_reservation %>
"memoryReservation": <%= @memory_reservation %>,
<% end %>
<% if @container_port %>
"portMappings": [
{
"containerPort": "<%= @container_port %>",
"protocol": "tcp"
}
],
<% end %>
"command": <%= @command.to_json %>,
<% if @environment %>
"environment": <%= @environment.to_json %>,
<% end %>
<% if @awslogs_group %>
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "<%= @awslogs_group %>",
"awslogs-region": "<%= @awslogs_region || 'us-east-1' %>",
"awslogs-stream-prefix": "<%= @awslogs_stream_prefix %>"
}
},
<% end %>
"essential": true
}
]
}
task_definitions.rb:
task_definition "demo-web" do
source "main" # will use ufo/templates/main.json.erb
variables(
family: task_definition_name,
name: "web",
container_port: helper.dockerfile_port,
command: ["bin/web"]
)
end
task_definition "demo-worker" do
source "main" # will use ufo/templates/main.json.erb
variables(
family: task_definition_name,
name: "worker",
command: ["bin/worker"]
)
end
task_definition "demo-clock" do
source "main" # will use ufo/templates/main.json.erb
variables(
family: task_definition_name,
name: "clock",
command: ["bin/clock"]
)
end
The shared variables are set in the variables folder:
ufo/variables/base.rb:
@image = helper.full_image_name # includes the git sha tongueroo/demo-ufo:ufo-[sha].
@cpu = 128
@memory_reservation = 256
@environment = helper.env_file(".env")
ufo/variables/production.rb:
@environment = helper.env_vars(%Q{
RAILS_ENV=production
SECRET_KEY_BASE=secret
})
Ufo combines the main.json.erb
template, task_definitions.rb
definitions, and variables in the .ufo/variables
folder. It then generates the raw AWS formatted task definition in the output
folder.
To build the task definitions:
ufo tasks build
You should see output similar to below:
$ ufo tasks build
Building Task Definitions...
Generating Task Definitions:
ufo/output/demo-web.json
ufo/output/demo-worker.json
ufo/output/demo-clock.json
Task Definitions built in ufo/output.
$
Let’s take a look at one of the generated files: .ufo/output/demo-web.json
.
{
"family": "demo-web",
"containerDefinitions": [
{
"name": "web",
"image": "tongueroo/demo-ufo:ufo-2017-06-11T22-22-32-a18aa30",
"cpu": 128,
"memoryReservation": 256,
"portMappings": [
{
"containerPort": "3000",
"protocol": "tcp"
}
],
"command": [
"bin/web"
],
"environment": [
{
"name": "RAILS_ENV",
"value": "staging"
}
],
"essential": true
}
]
}
If you need to modify the task definition template to suite your own needs it is super simple, just edit main.json.erb
. No need to dive deep into internal code that builds up the task definition with some internal structure. It is all there for you to fully control.
Options
[--image-override=IMAGE_OVERRIDE] # Override image in task definition for quick testing
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!
- Suggest an edit to this page (here's the contributing guide).
- Open an issue about this page to report a problem.