Upgrade Guide
Connect AWS & Add Instrumentation
The new monitoring features require an integration with AWS. The previous version of Serverless Dashboard created this integration from the CLI when a service was deployed. The new version of Serverless Dashboard provides two options for adding the integration, you can use the Dashboard UI or the CLI.
The Dashboard UI is the easier method of the two, as it does not require the Serverless Framework to be upgrade, and it does not require redeployment.
Using the Dashboard UI
To enable the new monitoring, you must first create an integration with AWS in Serverless Dashboard, and instrument each AWS Lambda function.
When you visit any of the monitoring features in Dashboard, you will be prompted to add the Integration if one doesn't already exist. You can also visit Settings > Integrations to create the integration.
Once the integration is created, you will be prompted on the app view page to add the instrumentation. You can also visit Settings > Instrumentation, and click Edit on the Integration to enable instrumentation on functions one-by-one or in bulk.
Using the CLI
Update the Serverless Framework CLI to version 3.35.0 or higher.
npm install serverless --global
As an existing Serverless Dashboard user, the serverless.yml
will already
contain org
and app
properties. These properties are required for Serverless
Dashboard to continue working.
Redeploy your service.
serverless deploy
The first time you deploy your service after upgrading the Serverless Framework, the CLI will create the Dashboard integration, including the necessary IAM Role.
Additionally, the service must be instrumented, which is done automatically upon deployment. The instrumentation adds the AWS CloudWatch Log subscription and adds the necessary AWS Lambda layer.
To use the new monitoring, you must redeploy each service with this version.
Alternatively, you can use the Dashboard UI to both add the integration and the instrumentation to each function. This does not require upgrade or deployment.
Updating serverless.yml
For majority of users no changes are necessary to the serverless.yml
; however,
if you used one of the less frequently used features, you may need to make
updates to your serverless.yml
file to remove dependencies on deprecated
features.
Remove reference to logIngestMode
When Dashboard monitoring was first released, there was a limit of one
subscription per CloudWatch Log Group. Since then, the limit has increased to
two. This means that the logIngestMode
option is no longer necessary in most
orgs.
Remove references in serverless.yml
to custom.enterprise.logIngestMode
:
custom:
enterprise:
logIngestMode: pull
Replace reference to disableAwsSpan and disableHttpSpan
These two options disable the automatic collection of AWS and HTTP Spans in
traces. Previous these options were avilable in custom.enterprise
in the
serverless.yml
file. These options have been replaced with environment
variables that must be set on the lambda function.
custom:
enterprise:
disableAwsSpan: true
disableHttpSpans: true
Set the environment variables on all the functions in the serverless.yml
provider:
environment:
SLS_DISABLE_HTTP_MONITORING: true
SLS_DISABLE_AWS_SDK_MONITORING: true
Replace collectLambdaLogs
If you are using features like Parameters, Providers, or Outputs, but not using the Monitoring features, you can disable monitoring. We've simplified the syntax for disabling monitoring in Dashboard.
This option is now deprecated:
custom:
enterprise:
collectLambdaLogs: false
Use the monitor
option to disable monitoring instead:
dashboard:
disableMonitoring: true
Remove Dashboard SDK Wrapping (optional)
The Serverless Framework automatically includes the Dashboard SDK in the Lambda package by wrpaping the AWS Lambda function handler on deployment. As of version 3.35.0+ of the Serverless Framework, the Dashboard SDK has been replaced with no-op methods as to not break deployments. The next major release of the Serverless Framework will fully deprecate the Dashboard SDK and disable wrapping.
If you used the Dashboard SDK, you'll need to follow the "Update Node.js SDK" and "Update Python SDK" sections to update the SDK usage.
In some cases, the Dashboard SDK wrapping may break your code. In these cases wrapping is automatically disabled:
- You are using
.mjs
files - You have set
"type": "module"
inpackage.json
- You are using Python version 3.11 or higher
You can also manually disable the Wrapping by including the following in your
serverless.yml
.
custom:
enterprise:
disableWrapping: true
Updating Node.js SDK
The Serverless Framework Dashboard SDK has been deprecated and replaced with the Serverless SDK. The new Serverless SDK provides support for additional features. In most cases the methods are drop-in replacements; however, some methods have been replaced with new methods.
Loading SDK
The Dashboard SDK can be loaded either by requiring ./serverless_sdk
or by
using the methods automatically loaded in context.serverlessSdk
.
The context.serverlessSdk
methods are now deprecated and therefore you will
need to load the SDK via require("@serverless/sdk")
.
If you use require("./serverless_sdk")
you will need to update your code to
load the SDK via require("@serverless/sdk")
.
// Replace this
const serverlessSdk = require('./serverless_sdk');
// with this
const serverlessSdk = require('@serverless/sdk');
Replace captureError()
The captureError
method for capturing errors in Dashboard SDK is available as
a drop-in replacement in the Serverless SDK.
// Replace this
context.serverlessSdk.captureError(error);
// with this
const serverlessSdk = require('@serverless/sdk');
serverlessSdk.captureError(ex);
Replace tagEvents()
The tagEvents
method was available in Dashboard SDK for tagging the Traces.
The setTag
has been introduced to support tagging of both Traces and Events.
To replace tagEvents
use setTag
to tag the Trace.
// Replace this
context.serverlessSdk.tagEvents('someKey', 'someValue', { demoUser: true });
// with this
const serverlessSdk = require('@serverless/sdk');
serverlessSdk.setTag('someKey', 'someValue');
serverlessSdk.setTag('demoUser', true);
The third parameter in tagEvents
allowed for adding additional context that
was not searchable in Dashboard. The Serverless SDK does not support such a
parameter and instead, it is recommended that you add this additional context as
new tags.
Replace span()
The span
method for creating spans in Dashboard SDK is available as
a drop-in replacement in the Serverless SDK using the createSpan
method.
// Replace this
context.serverlessSdk.span('some-label', () => {
// Some work
});
// with this
const serverlessSdk = require('@serverless/sdk');
serverlessSdk.createSpan('some-label', () => {
// Some work
});
Replace setEndpoint()
The setEndpoint()
method for setting the endpoint in Dashboard SDK is
available as a drop-in replacement in the Serverless SDK.
// Repalce this
context.serverlessSdk.setEndpoint('/api/foo');
// with this
const serverlessSdk = require('@serverless/sdk');
serverlessSdk.setEndpoint('/api/foo');
Updating Python SDK
The Serverless Framework Dashboard SDK has been deprecated and replaced with the Serverless SDK. The new Serverless SDK provides support for additional features. In most cases the methods are drop-in replacements; however, some methods have been replaced with new methods.
Loading SDK
The Dashboard SDK can be loaded adding the serverless_sdk
module or by
using the methods automatically loaded in context.serverless_sdk
.
The context.serverless_sdk
methods are now deprecated and therefore you will
need to load the SDK by adding the serverless_sdk
module.
If you load the module you'll need to replace serverless_sdk
with sls_sdk
.
# Replace this
from serverless_sdk import capture_exception, span, tag_event, set_endpoint
# with this
from sls_sdk import serverlessSdk
Replace capture_error()
The capture_error
method for capturing errors in Dashboard SDK is available as
a drop-in replacement in the Serverless SDK.
# Replace this
context.serverless_sdk.capture_error(Exception("Unexpected"));
# with this
from sls_sdk import serverlessSdk;
serverlessSdk.capture_error(Exception("Unexpected"));
Replace tag_event()
The tag_event
method was available in Dashboard SDK for tagging the Traces.
The set_tag
has been introduced to support tagging of both Traces and Events.
To replace tag_event
use set_tag
to tag the Trace.
# Replace this
context.serverless_sdk.tag_event('someKey', 'someValue', { 'demoUser': 'true' });
# with this
from sls_sdk import serverlessSdk
serverlessSdk.set_tag('someKey', 'someValue');
serverlessSdk.set_tag('demoUser', 'true');
The third parameter in tag_event
allowed for adding additional context that
was not searchable in Dashboard. The Serverless SDK does not support such a
parameter and instead, it is recommended that you add this additional context as
new tags.
Replace span()
The span
method for creating spans in Dashboard SDK is available as
a drop-in replacement in the Serverless SDK using the create_span
method.
# Replace this
with context.serverless_sdk.span('some-label'):
pass # some work
# with this
from sls_sdk import serverlessSdk
with serverlessSdk.create_span('some-label'):
pass # some work
Replace set_endpoint()
The set_endpoint()
method for setting the endpoint in Dashboard SDK is
available as a drop-in replacement in the Serverless SDK.
# Repalce this
context.serverless_sdk.set_endpoint('/api/foo');
# with this
from sls_sdk import serverlessSdk
serverlessSdk.set_endpoint('/api/foo');