Skip to content

Commit 1778d64

Browse files
committed
Restore the documentation about parameters
1 parent 1db4e60 commit 1778d64

File tree

2 files changed

+70
-1
lines changed

2 files changed

+70
-1
lines changed

docs/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
- [Websocket](./providers/aws/events/websocket.md)
3636
- [Layers](./providers/aws/guide/layers.md)
3737
- [IAM Function Permissions](./providers/aws/guide/iam.md)
38-
- [Parameters](./guides/parameters.md)
38+
- [Parameters](./parameters.md)
3939
- [Variables](./providers/aws/guide/variables.md)
4040
- [Resources](./providers/aws/guide/resources.md)
4141
- [Composing services](./guides/compose.md)

docs/parameters.md

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Parameters
2+
3+
Parameters can be defined in `serverless.yml` or passed via CLI with `--param="<key>=<value>"` flags. They can be used for example to:
4+
5+
- adapt the configuration based on the stage
6+
- store secrets securely
7+
- share configuration values between team members
8+
9+
## CLI parameters
10+
11+
Parameters can be passed directly via CLI `--param` flag, following the pattern `--param="<key>=<value>"`:
12+
13+
```
14+
serverless deploy --param="domain=myapp.com" --param="key=value"
15+
```
16+
17+
Parameters can then be used via the `${param:XXX}` variables:
18+
19+
```yaml
20+
provider:
21+
environment:
22+
APP_DOMAIN: ${param:domain}
23+
KEY: ${param:key}
24+
```
25+
26+
## Stage parameters
27+
28+
Parameters can be defined **for each stage** in `serverless.yml` under the `params` key:
29+
30+
```yaml
31+
params:
32+
prod:
33+
domain: myapp.com
34+
dev:
35+
domain: preview.myapp.com
36+
```
37+
38+
Use the `default` key to define parameters that apply to all stages by default:
39+
40+
```yaml
41+
params:
42+
default:
43+
domain: ${sls:stage}.preview.myapp.com
44+
prod:
45+
domain: myapp.com
46+
dev:
47+
domain: preview.myapp.com
48+
```
49+
50+
Parameters can then be used via the `${param:XXX}` variables:
51+
52+
```yaml
53+
provider:
54+
environment:
55+
APP_DOMAIN: ${param:domain}
56+
```
57+
58+
The variable will be resolved based on the current stage.
59+
60+
## Inheritance and overriding
61+
62+
Here is the priority used to resolve a `${param:XXX}` variable:
63+
64+
- First, look in params passed with `--param` CLI flag
65+
- If not found, then look in `params.<stage>` in `serverless.yml`
66+
- If not found, then look in `params.default` in `serverless.yml`
67+
- If not found, throw an error, or use the fallback value if one was provided: `${param:XXX, 'default value'}`
68+
69+
This is especially useful in development when deploying to ephemeral stages (e.g. "feature-x"). The stage might not have any parameter, therefore it will default to the parameters set on the service. However, in other stages, like "prod", or "staging", you may override the service-level parameters with stage-level parameters to use values unique to that stage.

0 commit comments

Comments
 (0)