v2.4.2

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)

VariableValuePurpose
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
tailpipeApiUrlhttps://drive-tailpipe-<stage>.graphcdn.app/Tailpipe GraphQL
carsforsaleApiUrlhttps://drive-carsforsale-<stage>.graphcdn.app/Carsforsale GraphQL
fnCanbusQueueTimestream${stage}-drive-api-canbus-fn-queue-timestreamCanbus queue
tblApiRateLimits${ssm:/${stage}/drive/apig/dynamodb/table/ratelimits}Rate-limit table
tblSsmConfig${stage}-drive-api-ssm-configSSM-override DynamoDB table
NODE_OPTIONS--enable-source-maps --no-deprecationNode flags

Parameters-and-Secrets extension

SSM_PARAMETER_STORE_TTL: 3600
SECRETS_MANAGER_TTL: 3600
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED: "true"
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE: 1000
PARAMETERS_SECRETS_EXTENSION_HTTP_PORT: 2773
PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS: 3
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL: ERROR

OpenTelemetry

AWS_LAMBDA_EXEC_WRAPPER: /opt/otel-handler
OPENTELEMETRY_COLLECTOR_CONFIG_URI: /var/task/collector.yaml
DRIVE_OTLP_ENDPOINT: https://otlp.<root-domain>
DRIVE_OTLP_AUTH_HEADER: <ssm:/shared/drive/otel/auth/header>
OTEL_SERVICE_NAME: <service>
OTEL_RESOURCE_ATTRIBUTES: service.name=...,service.namespace=aws.lambda,...
OTEL_PROPAGATORS: tracecontext,baggage,xray
OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT: http://localhost:4318
OTEL_NODE_ENABLED_INSTRUMENTATIONS: aws-lambda,aws-sdk,dns,grpc,http,https,host
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: .*
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: .*

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}}:

yaml
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}}
Esc