- A global Anyshift dashboard at
/anyshift, with estate-wide evidence coverage and Ask Anyshift - An Anyshift tab on matching catalog entities, with runtime context, impact, and recent evidence
- A cloud inventory at
/cloudand cloud-aware pages for synchronized Resources - Optional infrastructure Resources and evidence-backed relations in the catalog and architecture diagram
Before You Start
You need:- A Backstage application using the new frontend system
- Backstage 1.52 or 1.53
- One Anyshift project with graph data
- An API token that can read that project
- A Backstage permission policy
Install the Core Integration
Install the frontend plugin in your app workspace and the backend plugin in your backend workspace:packages/backend/src/index.ts:
App.tsx or EntityPage.tsx. Backstage discovers the global page, navigation item, API factory, and entity content from the installed package.
Configure Anyshift
Add one Anyshift project to your Backstage configuration:ANYSHIFT_PROJECT_ID and ANYSHIFT_TOKEN in the environment used by your Backstage backend. Do not put the token in frontend configuration or commit it to your repository.
Ask Anyshift and the query console are disabled by default. Enable Ask for viewers who need guided, evidence-backed answers. Leave the query console disabled unless operators need to run deterministic, read-only Graph queries from Backstage.
Configure Permissions
The backend enforces three permissions:
Install the common package directly in the backend workspace if your permission policy imports these constants:
anyshift.view to the intended users and deny anyshift.query and anyshift.catalog.sync. A typical policy decision inside handle() looks like this:
group:default/platform-operators with the group that operates your catalog. The frontend hides actions a user cannot perform, but the backend permission checks remain authoritative.
An allow-all Backstage policy grants all three permissions to every signed-in
user. Replace it with an explicit production policy before enabling the query
console or manual reconciliation.
Match Catalog Entities
The Anyshift tab appears on entities with either of these annotations:anyshift.io/targetgithub.com/project-slug
anyshift.io/target is absent, the plugin uses the repository name from github.com/project-slug as the runtime target. Add an explicit target when the repository and deployed workload use different names:
Ask About Your Estate
Ask Anyshift provides a single-question, read-only experience on the global dashboard and supported entity pages. Use it to investigate dependencies, changes, impact, inventory, and evidence coverage without writing a Graph query. Enable it in the backend configuration:anyshift.view can then enter a question such as:
Ask uses
anyshift.view; it does not require anyshift.query. The entity
scope helps compose the question but does not create a separate authorization
boundary outside the configured Anyshift project.Understand Entity Evidence
The Anyshift tab brings current graph evidence into the service page:- Why now? summarizes active alerts, suspected runtime conditions, and available deployment correlation. A nearby deployment is not presented as the cause unless the evidence supports that conclusion.
- Affected footprint groups potentially affected workloads, downstream services, datastores, external dependencies, monitors, and SLOs. Related catalog entities are linked when a match exists.
- Architecture shows observed and configured service dependencies. Select a service-to-service edge marked
HTTP · Nto inspect its HTTP operation evidence.
HTTP · N remains a valid dependency and renders as before; missing operation evidence does not mean there was no traffic. The inspector uses the topology response already loaded for the diagram and does not make a request for each edge.
HTTP operation details require Graph API v0.2.42 or later and an APM source
that supplies operation evidence. Datadog, Tempo, and Dynatrace source names
use the same Backstage presentation.
Synchronize Infrastructure Resources
Catalog synchronization is optional. Use it when you want infrastructure Resources and runtime relations next to the Components already owned by GitHub. Install the catalog module:packages/backend/src/index.ts:
Start in Shadow Mode
Shadow mode reads the graph and reports proposed matches, collisions, and Resources without writing them to the catalog:Anyshift catalog sync report entries in your Backstage logs. Confirm that component targets, owners, proposed Resources, and collisions are correct before enabling writes.
Set fallbackOwner to a Group that exists in your catalog. The example uses a dedicated holding group for infrastructure that does not yet have an evidence-backed owner.
catalog.mode controls infrastructure Resource publication. catalog.topologyMode independently controls Component relationship enrichment. Set both explicitly so you can review cloud inventory and service relations separately.
Enable Active Mode Gradually
Switch to active mode with a reviewed target allowlist:activeTargets limits Component enrichment to the listed runtime targets. Omit it only when every matched Component should be eligible. If you configure it, the list must contain at least one target.
Mark an individual Component as intentionally unmanaged when it should never be synchronized:
Add Configured Runtime Dependencies
Observed APM topology is not the only useful source of a dependency. For ECS services, you can declare reviewed endpoint aliases so Anyshift can confirm dependencies found in task-definition configuration without returning environment values.anyshift.io/configuration-endpoints to list the endpoint aliases that identify it:
anyshift.io/runtime-resource-id lets configuration evidence resolve a stable cloud identity while anyshift.io/target continues to identify the APM service.
For provider-generated Resources, place the same reviewed identities in catalog.runtimeMappings because those Resources do not inherit annotations from a separate Component:
Cloud Resource Types
The default inventory types are Kubernetes-oriented. For an AWS-backed project, select the resource labels you want to publish:resourceNamePatterns to limit the imported inventory further with case-insensitive regular expressions.
Explore Cloud Resources
When cloud Resources are synchronized, the discoverable frontend adds a Cloud navigation item at/cloud. Open a Resource to review:
- Provider, account, region, ARN, and a cloud-console link when available
- Direct catalog dependencies and dependents
- Typed potential impact through supported graph relationships
- Normalized cloud changes and their evidence limitations
- Terraform code-to-state-to-cloud provenance and supported drift comparisons
- Ask Anyshift scoped to the visible Resource
Ownership and Failure Behavior
GitHub remains authoritative for Components, Users, Groups, owners, lifecycle, and repository metadata. The Anyshift module:- Creates infrastructure Resources
- Adds service-to-service, Component-to-Resource, and Resource-to-Resource relations supported by graph evidence
- Enriches matched Components without recreating them
- Preserves the previous complete Resource set when a synchronization attempt fails
anyshift.io/managed-by: catalog-provider annotation. In active mode, the module also maintains resource:default/anyshift-catalog-sync, which records the result, trigger, completion time, and a bounded failure reason for the latest attempt.
Users with anyshift.catalog.sync can select Reconcile now on the global Anyshift page. Scheduled and manual requests that overlap are combined into one provider run.
Verify the Installation
- Start the Backstage backend with the Anyshift environment variables set.
- Sign in as a user with
anyshift.view. - Open
/anyshiftand confirm the global dashboard and Evidence coverage card load. - Open a Component with
anyshift.io/targetorgithub.com/project-slug. - Select the Anyshift tab and confirm the runtime target, Why now?, affected footprint, and architecture evidence resolve independently.
- If Ask is enabled, submit one estate-wide question and one entity-scoped question. Confirm the visible scope matches the intended entity.
- If an architecture edge is marked
HTTP · N, select it and confirm its method or path, APM source, and observation time appear. - If catalog synchronization is enabled, review the sync report and the
anyshift-catalog-syncResource before moving either catalog mode fromshadowtoactive. - Open
/cloud, select a synchronized Resource, and confirm its identity, relations, evidence sections, and scoped Ask use the intended resource.
Troubleshooting
The Anyshift page does not appear
The Anyshift page does not appear
Confirm that the frontend package is installed in the app workspace, the
app uses Backstage’s new frontend system, and
app.packages is set to
all. Restart the frontend after changing dependencies or configuration.The entity does not have an Anyshift tab
The entity does not have an Anyshift tab
Add
anyshift.io/target or github.com/project-slug to the entity
annotations. Use anyshift.io/target when the repository name does not match
the runtime workload.Ask Anyshift does not appear
Ask Anyshift does not appear
Set
anyshift.ask.enabled to true, restart the backend and frontend, and
confirm the signed-in user has anyshift.view. Ask is independent of the
Advanced Query setting and does not require anyshift.query.A request returns 403 Forbidden
A request returns 403 Forbidden
Check your Backstage permission policy. Dashboard, entity data, cloud
evidence, and Ask require
anyshift.view; queries require anyshift.query;
manual reconciliation requires anyshift.catalog.sync.A service edge has no HTTP details
A service edge has no HTTP details
Operation evidence is optional. Confirm that the Graph API is v0.2.42 or later
and that the APM source supplies operation metadata for this edge. An unmarked
edge still represents a dependency; missing operation details do not prove
that no traffic exists.
The catalog contains no Anyshift Resources
The catalog contains no Anyshift Resources
Confirm that the catalog module is installed and registered.
disabled
creates nothing, while shadow reports proposed changes without applying
them. In active, verify that inventoryTypes, activeTargets, and
resourceNamePatterns include the intended resources.Cloud or entity sections are empty
Cloud or entity sections are empty
Check Evidence coverage and the freshness shown beside each capability. Empty
changes, impact, infrastructure-as-code, deployment, or operation evidence
means unknown for that entity and time window. It does not mean healthy,
disconnected, or unmanaged. Retry only the failed capability when the page
offers a section-level retry.
Cloud event evidence shows a limitation
Cloud event evidence shows a limitation
A quiet source or status caveat means the event evidence is derived or
incomplete. It provides context rather than a health alert. Identity warnings
remain actionable when the Resource itself cannot be resolved.
A synchronization attempt fails
A synchronization attempt fails
Find the latest
Anyshift catalog sync report in the backend logs and
inspect resource:default/anyshift-catalog-sync. A failed attempt leaves
the last complete infrastructure Resource set in place.Packages
The beta packages are available from npm:@anyshift/backstage-plugin-anyshift@anyshift/backstage-plugin-anyshift-backend@anyshift/backstage-plugin-anyshift-common@anyshift/backstage-plugin-catalog-backend-module-anyshift