App Configuration (app.yaml
)
Wasmer Edge's configuration is stored in a app.yaml
file in the root of your project.
Example
# Required fields
kind: wasmer.io/App.v0
# username or namespace that owns the app
owner: my-account
# App name
name: my-sample-site
# Package to run (it can also be `.`)
package: wasmer/my-sample-site
# OPTIONAL fields
# Enable debug mode
# If true, http responses will have more detailed error information.
debug: true
# Environment variables
env:
MY_VAR: "my-value123"
# CLI arguments passed to the binary
cli_args:
- arg1
- arg2
capabilities:
# Fast startup with instaboot
instaboot:
requests:
- path: /
- path: /_bootstrap
Fields
Detailed description of all available fields.
kind
The kind
field is used to identify the type of configuration file. It is required and is a constant set to wasmer.io/App.v0
.
This constant field might be used in the future to support multiple configuration formats.
name
The name
field is used to identify the name of the application. It is required and must be unique.
- Required:
true
- Required format:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
description
The description
field is used to provide a description of the application. It is optional and can be any string.
- Required:
false
package
The package
field is used to specify the name of the package to deploy.
It is required and must specify a package published to the Wasmer registry.
Note: if you have a wasmer.toml in the same directory as the app.yaml
, wasmer deploy
will automatically prompt you to publish a new version of the package.
- Required:
true
env
Specify environment variables for the app. Must be a key-value map.
Example:
env:
MY_VAR: "my-value123"
- Required:
false
cli_args
Specify command line arguments passed to the application.
Example:
cli_args:
- arg1
- arg2
- Required:
false
debug
The debug
field is used to enable debug mode for the application. This in turn will show detailed error messages if a request fails, instead of a generic error. It is optional and can be any boolean.
- Required:
false
- Default:
false
redirect
redirect.force_https
Redirect all HTTP requests to HTTPS.
NOTE: the default value is true
, so HTTP requests will be redirected to
HTTPS automatically.
Set this value to false
to disable redirects.
- Required:
false
- Default:
true
Example:
redirect:
force_https: false
Volumes
Configure persistent volume storage for your apps.
Note: currently volumes are limited to a specific region, and provide read-write-many semantics. This means databases and other more complex use-cases will not work well just yet.
Learn more about volumes here.
volumes:
# A name for your volume.
# Must be unique for the given app.
- name: data
# Where to moint the volume into the filesystem.
# You can specify multiple mounts with optional subpaths.
mounts:
# Mount the volume to `/data`.
- mount_path: /data
# Optional: the subdirectory of the volume to mount.
# subpath: /subpath
capabilities
instaboot
Enable fast application startup with startup snapshots.
See InstaBoot for more details.
capabilities:
instaboot:
requests:
- path: /
- path: /_bootstrap
# You can optionally speciy a maximum age.
# If the maximum age is reached, a new snapshot will automatically
# be created, and the old ones discarded
max_age: 12h
# Optionally request settings:
method: POST
body: "custom body"
headers:
- name: X-My-Header
value: my-value
health_checks
The health_checks
field is used to check if an application is working correctly. If the healthchecks fail, edge will restart the application. It is optional and its an array of healtcheck objects
- Required:
false
Currently only supported healthcheck type is http
. It executes an http request against the application. All the supported
Example healthcheck
health_checks:
- http:
method: get
path: /
interval: 30s
timeout: 10s
unhealthy_threshold: 2
healthy_threshold: 1
expected_status_codes:
- 200
# below are optional
expected_body_includes: Hello World
expected_body_regex: ".*Wasmer.*"
Fields for http healthcheck:
-
HTTP method to use.method
: Required -
Path to send request to.path
: Required -
Duration between each requestinterval
: Required -
Timeout duration for requeststimeout
: Required -
Afterunhealthy_threshold
: Requiredunhealthy_threshold
amount of failure of the http requests, app is considered unhealthy and will be restarted -
Afterhealthy_threshold
: Requiredhealthy_threshold
amount of failure of the http requests, app is considered healthy and will be restarted -
If the application returns these status codes, then the request will be count as successfulexpected_status_codes
: Required -
If this is specified, response body should include the string defined in this field to be count as successfulexpected_body_includes
: -
If this is specified, response body should be able to match the regular expression defined in this field to be count as successfulexpected_body_regex
:
So in the example above, if the application fails two consequent request, application will be restarted. It will be keep restarted until it successfully responds to one request
locality
The locality
field is used to configure where your app is located.
locality.regions
Regions that the app should be running in. By default the app runs in all the regions locations where Wasmer Edge is available, however for latency optimization, you may want to run the apps only in regions that are close to your Database.
Example:
locality:
regions:
- us-ashburn
- de-falkenstein
You can check all regions available to choose from, in the Edge Regions documentation.
scaling
The scaling
field is used to configure how your application scales on Edge.
scaling.mode
Scaling mode for the app.
NOTE: You should usually stick to the default behaviour, which is enabled when no scaling mode is specified. Only use the below modes if you you are sure they are appropriate!
Available values:
-
<unset>
If no scaling mode is specified, Edge will send multiple requests to each instance, and also scale up additional instances if required. This is the default, and the recommended mode if your program can handle multiple requests concurrently (Rust, Go, ...).
-
single_concurrency
Special scaling mode for apps that only support a single request at a time. You should enable this mode if your app can not handle multiple requests concurrently.
Only a single request will be sent to each instance at a time. Edge will dynamically scale up additional instances of your app as required by the incoming request volume, and shut them down when they are no longer needed. This mode is appropriate for single-threaded synchronous PHP...
Example:
scaling:
mode: single_concurrency
- Required:
false