{"record":{"id":"66fa98351febbf91","repo":"pulumi/pulumi","slug":"the-pulumi-cloud-backend-must-be-used-for-remote-o","errorCode":null,"errorMessage":"the Pulumi Cloud backend must be used for remote operations; use `pulumi login` without arguments to log into the Pulumi Cloud backend","messagePattern":"the Pulumi Cloud backend must be used for remote operations; use `pulumi login` without arguments to log into the Pulumi Cloud backend","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/cmd/pulumi/deployment/remote.go","lineNumber":461,"sourceCode":"\tif err != nil {\n\t\treturn fmt.Errorf(\"getting current working directory: %w\", err)\n\t}\n\n\t// Try to read the current project\n\tproject, _, err := ws.ReadProject(cwd)\n\tif err != nil && !errors.Is(err, workspace.ErrProjectNotFound) {\n\t\treturn err\n\t}\n\n\tb, err := backend.CurrentBackend(ctx, ws, backend.DefaultLoginManager, project, opts)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Ensure the cloud backend is being used.\n\tcb, isCloud := b.(httpstate.Backend)\n\tif !isCloud {\n\t\treturn errors.New(\"the Pulumi Cloud backend must be used for remote operations; \" +\n\t\t\t\"use `pulumi login` without arguments to log into the Pulumi Cloud backend\")\n\t}\n\n\tstackRef, err := b.ParseStackReference(stack)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar gitAuth *apitype.GitAuthConfig\n\tif args.GitAuthAccessToken != \"\" || sshPrivateKey != \"\" || args.GitAuthPassword != \"\" ||\n\t\targs.GitAuthUsername != \"\" {\n\t\tgitAuth = &apitype.GitAuthConfig{}\n\t\tswitch {\n\t\tcase args.GitAuthAccessToken != \"\":\n\t\t\tgitAuth.PersonalAccessToken = &apitype.SecretValue{Value: args.GitAuthAccessToken, Secret: true}\n\n\t\tcase sshPrivateKey != \"\":\n\t\t\tsshAuth := &apitype.SSHAuth{","sourceCodeStart":443,"sourceCodeEnd":479,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/cmd/pulumi/deployment/remote.go#L443-L479","documentation":"RunDeployment requires the Pulumi Cloud (httpstate) backend; remote deployments are a Pulumi Cloud feature and cannot run against local, file, or self-hosted object-storage backends. The CLI detects the backend type after login and fails fast if it is not the cloud backend.","triggerScenarios":"Running `pulumi deployment run` (or similar remote commands) while logged into `file://`, `s3://`, `azblob://`, or a local backend.","commonSituations":"Developers with mixed backends whose PULUMI_BACKEND_URL or default org points at file storage; CI configured for a state bucket instead of Pulumi Cloud; forgetting to `pulumi login` after switching stacks.","solutions":["Run `pulumi login` with no arguments to log into the Pulumi Cloud backend","Unset PULUMI_BACKEND_URL if it forces a non-cloud backend, then log in again","Verify with `pulumi whoami -v` (or `pulumi about`) that the current backend is app.pulumi.com"],"exampleFix":"// before\npulumi login file:///state   # then: pulumi deployment run mystack\n// after\nunset PULUMI_BACKEND_URL\npulumi login\npulumi deployment run mystack","handlingStrategy":"validation","validationCode":"pulumi about --json | jq -e '.backend | test(\"app\\\\.pulumi\\\\.com|pulumi cloud\")' \\\n  || { echo 'remote operations require the Pulumi Cloud backend'; exit 1; }","typeGuard":"function isCloudBackend(info) { return typeof info.url === 'string' && info.url.includes('pulumi.com') }","tryCatchPattern":"try { run(cmd) } catch (e) { if (e.message.includes('Pulumi Cloud backend must be used')) { /* pulumi login then retry */ } else throw e }","preventionTips":["Avoid PULUMI_BACKEND_URL in environments used for remote deployments","Run `pulumi login` (no args) and verify with `pulumi whoami`","Separate CI profiles for cloud-backed vs local-backed workflows"],"tags":["backend","remote-deployment","configuration"],"backgroundTag":"unsupported-backend","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}