Open Jira Tickets from Cloud Cost Recommendations
A recommendation nobody owns does not get done. Put it in the backlog of the team that owns the resource, and keep both sides in step.
Cost findings stall when they live in a separate tool from the work. Connecting Jira lets a recommendation become an issue in the owning team’s project, with the resource, the saving and the suggested fix already written, and lets the two statuses follow each other. Setup takes an Atlassian API token and a ZopNight admin.
1. Create the Atlassian API token
Use a dedicated bot account in Jira if you can, so tickets are not tied to one person’s login.
- Sign in as that account at id.atlassian.com/manage-profile/security/api-tokens.
- Choose Create API token with scopes (or the classic token option, see below), name it, for example “ZopNight”, and set an expiry. Atlassian allows 1 to 365 days, and new tokens default to one year.
- Select Jira as the app and choose the scopes, then Create.
- Copy the token immediately. Atlassian does not show it again.
Classic or scoped? Both connect. A classic token authenticates against your site URL directly. A scoped token is routed through the Atlassian API gateway, and ZopNight resolves your site’s cloud ID to do that automatically. The difference shows up in two-way sync: the inbound webhook ZopNight registers uses a Jira API that scoped tokens cannot call, so full inbound sync needs a classic token on an account with Jira admin rights. With a scoped token, outbound ticketing works and ZopNight flags that inbound sync still needs setup.
Put a calendar reminder at the token’s expiry date; an expired token stops ticket creation.
2. Connect Jira
In ZopNight, go to Settings, then Integrations, and connect Jira. This is admin-only. Enter:
- the Jira base URL (your site, for example
https://example.atlassian.net) - the default project key and issue type
- the bot account’s email and the API token
ZopNight checks the credential against Jira before saving and reports a categorised error (bad token, missing permission, unreachable host) instead of saving something broken. When the token user is a Jira admin, connecting also registers the inbound webhook for status sync; otherwise the drawer offers a manual fallback. Disconnecting removes the webhook again.
The last step of the connect drawer has an Open tickets automatically toggle, off by default. Turning it on creates one catch-all policy that opens a ticket for every open recommendation, including the current backlog. Customise scope (shown once the toggle is on) opens the policy editor instead.
3. Open a ticket by hand
On any recommendation, choose Create Jira ticket. Project, issue type and assignee are optional and fall back to the integration’s defaults. The issue carries the summary, the resource, the saving and the suggested fix, and the recommendation then shows a clickable issue key.
Assignees are matched by email to a Jira account. If there is no match, the issue is created unassigned with a warning. Requests are de-duplicated per problem (organisation, resource and rule type), so asking twice returns the existing ticket rather than a second one.
4. Automate with a policy
Under Settings, then Policy, a recommendation policy with an open-ticket action files a Jira issue automatically whenever a matching finding is newly raised. Scope it by conditions, and use the live estimate the editor shows (“about N open recommendations match”) to check the volume before you save. An unscoped policy on a large estate can open hundreds of issues.
One limit: for the same finding, a notify policy and an open-ticket policy at the same scope do not both apply; the resolver keeps one. Put them at different scopes.
5. Let status and owner sync
Once connected, a recommendation marked applied moves its issue to In Progress, and closed, dismissed or optimised moves it to Done. In the other direction, with the inbound webhook registered, a Jira status change updates the recommendation where the state machine allows it, and reassigning the Jira issue updates the recommendation’s owner. Deleting the Jira issue unlinks it without changing the recommendation.
Check it worked
Open a ticket from one low-stakes recommendation, move the Jira issue to Done, and confirm the recommendation’s status follows. If it does not, the inbound webhook is the missing piece. Background on the pattern: ITSM integration with Jira and how auto-remediation works.