7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

New Relic Workflow Automationで変数とデータ受け渡しをマスターする

7
Last updated at Posted at 2026-06-04

はじめに

New Relicの Workflow Automation は、ノーコード/ローコードでインシデント対応やインフラ管理の自動化を実現できる強力な機能です。
カスタムワークフローを構築する上で最も重要になるのが、「トリガー時のインプットをどう受け取るか」、そして「あるアクションの出力をどうやって次のアクションに渡すか」というデータの受け渡しです。

本記事では、Workflow Automationにおける変数の基本的な受け渡し方法と、変数管理をより柔軟にする制御コンポーネント「Assign」の活用方法について分かりやすく解説します。

全体イメージ.png

Workflow Automation の利用には Advanced CCU の契約が必要です。

最新のアップデートの詳細はこちら
New Relic アップデート一覧

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

1. ワークフロー実行時のインプットを受け取る (workflowInputs)

ワークフローが開始される際(手動実行、API経由、あるいはアラート検知時)に外部から渡されるパラメータは、workflowInputs として定義・参照します。

インプットの定義(YAML例)

ワークフロー定義の冒頭で、受け取りたい変数の名前とデータ型(String, Int, Boolean, Listなど)を指定します。

workflowInputs:
  awsRegion:
    type: String
    defaultValue: ap-northeast-1
    validations: []
    required: false
  slackChannel:
    type: String
    validations: []
    required: false
    

ワークフロー内での参照方法

定義したインプットをアクション内で利用する場合は、${{ .workflowInputs.変数名 }}(または短縮形の ${{ .inputs.変数名 }})という構文を使用します。

  - name: notifySlack
    type: action
    action: slack.chat.postMessage
    version: 1
    inputs:
      token: ${{:secrets:slack:xxxx-bot-token}}
      channel: ${{.workflowInputs.slackChannel}}
      text: 'ワークフローが開始されました。リージョン: ${{ .workflowInputs.awsRegion }}'

2. アクションのアウトプットを次のステップへ渡す (outputs)

Workflow Automationの醍醐味は、1つのステップで得られた結果を、次のステップの入力値として数珠繋ぎにできる点です。

前のステップの出力を参照する構文

Workflow Automation の便利なところは、あるステップで得た結果を次のステップの入力として渡せる点です。処理を数珠繋ぎにすることで、複雑なオートメーションが実現できます。

参照の構文

${{ .steps.<ステップ名>.outputs.<フィールド名> }}

内部では jq 式として評価されるため、ネストしたオブジェクトから特定の値を取り出すことも可能です。

具体的な連携例

例えば、最初のステップ(getAlertDetails)でアラートのメタデータを取得し、その中にある「エンティティID(entityGuid)」を後続のSlack通知ステップで利用する場合、以下のように記述します。

image.png

ステップ1: アラート情報の取得
- name: getAlertDetails
  type: action
  action: newrelic.nerdgraph.execute
  version: 1
  inputs:
    graphql: |-
      {
        actor {
          account(id: ${{ .workflowInputs.account_id }}) {
            nrql(query: "SELECT entity.guids FROM NrAiIssue WHERE issueId =  '${{.workflowInputs.issueId}}' LIMIT 1") {
              results
            }
          }
        }
      }
    apiKey: ${{:secrets:newrelic:xxxx-api-key}}
    region: US

NerdGraphの複雑なレスポンスからデータを抜く具体例

最初のステップ(getAlertDetails)で New Relic の NerdGraph API(NRQLクエリ等)を叩き、以下のようなJSONレスポンス (${{ .steps.getAlertDetails.outputs }}) が返ってきたとします。

{
  "data": {
    "actor": {
      "account": {
        "nrql": {
          "results": [
            {
              "entity.guids": [
                "NjkzMjM0MnxBUE18QVBQTElDQVRJT058OTgwODkwNTA5"
              ],
              "timestamp": 1780319008334
            }
          ]
        }
      }
    }
  },
  "success": true
}

以下の設定でアウトプット内容をログに出力すると内容が確認可能です。

image.png

この中から、一番最初(インデックス 0 番目)の entity.guids の最初の値を取り出してSlackに通知したい場合、jq式を使用して以下のようにパスを指定します。jq式は JSON 処理のクエリ言語で、Workflow Automation 内部で使用されています

image.png

ステップ2: 取得したデータをSlackに通知
- name: sendSlackNotification
  type: action
  action: slack.chat.postMessage
  version: 1
  inputs:
    token: ${{:secrets:slack:xxxx-bot-token}}
    channel: ${{.workflowInputs.slackChannel}}
    text: '対象のEntity GUIDは ${{ .steps.getAlertDetails.outputs.data.actor.account.nrql.results[]."entity.guids"[] }} です。'

3. 変数を整理・再利用する「Assign」コンポーネント

ワークフローが複雑になってくると、こんな悩みが出てきます。

  • 参照式 ${{ .steps.xxx.outputs.yyy }} や jq 式を使って何度も同じ内容を書くのが面倒...
  • 複数のステップの出力を組み合わせて、1つのメッセージ文字列を作りたい
  • 条件分岐の前にデフォルト値をセットしておきたい

先ほどの具体例のように都度 ${{ .steps.getAlertDetails.outputs.data.actor.account.nrql.results[]."entity.guids"[] }} のような設定を直接記載するのはメンテナンスが困難になります。

これを解決するのが制御コンポーネントの Assign(アサイン) です。

Assign とは?

ワークフローの途中で新しい変数を定義・代入できるコンポーネントです。文字列・数値・真偽値はもちろん、マップ(オブジェクト)やリスト(配列)も扱えます。

基本構造

- name: <ステップ名>
  type: assign
  inputs:
    <新しい変数名>: <固定値 or 動的式>

以下は、実行時のインプットや前ステップの出力を assign を使って整形・格納する例です。

- name: variableInitialization
  type: assign
  inputs:
    # 1. 文字列の結合
    messageGreeting: Hello, ${{ .workflowInputs.userName }}!
    
    # 2. 前のステップの出力を変数に格納して扱いやすくする
    httpStatus: ${{ .steps.runApiAction.outputs.statusCode }}
    
    # 3. マップ型(オブジェクト)の定義
    systemMeta:
      env: production
      region: ${{ .workflowInputs.awsRegion }}
      
    # 4. リスト型(配列)の定義
    targetInstances:
      - i-0123456789abcdef0
      - ${{ .steps.getEc2Info.outputs.instanceId }}

Assign ステップで変数化しておけば、以降のステップからは次のような構文でシンプルに参照できます。

# 文字列変数の参照
${{ .steps.variableInitialization.outputs.messageGreeting }}
 
# マップのフィールドを参照
${{ .steps.variableInitialization.outputs.systemMeta.env }}

注意点:Assign はステップとして組み込む

Assign ステップは:
・「値の元になるステップ(outputs元)」の後に置く
・「値を使いたいステップ」の前に置く

Tips:Assign は「変数の整理」として使う

特に条件分岐(Switch)やループ(Loop)を使う前に Assign でデータを整形しておくと、分岐ロジックがシンプルになります。「このステップに入る前のデータの形を定義する」という感覚で使うと、ワークフロー全体の可読性が上がります。

まとめ

用途 構文
外部からのインプットを受け取る ${{ .workflowInputs.変数名 }}
前のステップの出力を参照する ${{ .steps.ステップ名.outputs.フィールド名 }}
変数を定義・整形・再利用する type: assign ステップを使う

この3つを押さえておけば、Workflow Automation でのデータの流れに迷うことはほぼなくなります。

次のステップとして、条件分岐(Switch)やループ(Loop)を組み合わせると、より高度なRunbookの自動化が実現できます。ぜひ挑戦してみてください!

New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!

New Relic株式会社のX(旧Twitter)Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

image.png

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?