Environment variables
serverless.common.yml provider.environment applies to every function in every service. Services add their own environment blocks on top.
Shared (serverless.common.yml)
| Variable | Value | Purpose |
|---|---|---|
region | ${self:provider.region} | AWS region |
environment | ${self:provider.stage} | Stage name |
serviceName | ${self:service} | Serverless service name |
rootDomain | ${ssm:/shared/drive/domains/root} | Root drive domain |
slackNotifyUrl | ${ssm:/shared/drive/ext/slack/hooks/devops} | Devops Slack webhook |
awsAccountId | ${aws:accountId} | Account ID |
tailpipeApiUrl | https://drive-tailpipe-<stage>.graphcdn.app/ | Tailpipe GraphQL |
carsforsaleApiUrl | https://drive-carsforsale-<stage>.graphcdn.app/ | Carsforsale GraphQL |
fnCanbusQueueTimestream | ${stage}-drive-api-canbus-fn-queue-timestream | Canbus queue |
tblApiRateLimits | ${ssm:/${stage}/drive/apig/dynamodb/table/ratelimits} | Rate-limit table |
tblSsmConfig | ${stage}-drive-api-ssm-config | SSM-override DynamoDB table |
NODE_OPTIONS | --enable-source-maps --no-deprecation | Node flags |
Parameters-and-Secrets extension
OpenTelemetry
Full pipeline: OpenTelemetry.
Per-service
Each service adds environment: on its functions for service-specific values (table names, partner endpoints, feature toggles). Stage-specific toggles resolved via ${self:custom.app.<key>.${self:provider.stage}}:
functions:
leadsInboundQueue:
environment:
leadsInboundQueue: ${self:custom.app.queues.leadsInboundQueue}
rateLimitsEnabled: ${self:custom.app.rateLimitsEnabled.${self:provider.stage}}
emailMode: ${self:custom.app.emailMode.${self:provider.stage}}