• /
  • EnglishEspañolFrançais日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

ワークフロー定義スキーマ

プレビュー

この機能はまだ開発中ですが、ぜひお試しください。

この機能は現在、弊社のプレリリース ポリシーに従ってプレビュー プログラムの一部として提供されています。

スキーマ

ワークフロー定義は YAML で記述されます。キーはcamelCase命名規則を使用します。

名前(必須)

  • タイプ: 文字列
  • フォーマット: 正規表現^[A-Za-z_][A-Za-z0-9_-]*$に準拠する必要があります。
  • 最大長: 100
  • 説明: name値は大文字と小文字を区別しません。たとえば、 ExampleWorkflowexampleworkflowEXAMPLEWORKFLOWはすべて同じワークフロー定義を表すものと見なされます。

説明(オプション)

  • タイプ: 文字列
  • フォーマット: 正規表現^[A-Za-z0-9 _-]*$に準拠する必要があります。
  • 最大長: 200
  • 説明: ワークフローの目的を説明するdescription

workflowInputs(オプション)

  • タイプ: 地図の地図
  • 最大サイズ: 100
  • 説明: ワークフローが受け入れるワークフロー入力のマップ。
  • :
workflowInputs:
myInput1:
type: String
myInput2:
type: Number
defaultValue: 42
  • workflowInputs.<inputName> (必須)

    • タイプ: 文字列 (式安全なパターンに準拠)
    • 最小の長さ: 1
    • 最大長: 50
    • 説明: ワークフロー入力の名前。
  • workflowInputs.<inputName>.type (必須)

    • タイプ: 列挙型 (ブール、リスト、マップ、文字列、整数、フロート)
    • 説明: ワークフロー入力のデータ型。
  • workflowInputs.<inputName>.defaultValue (オプション)

    • タイプ: 任意; typeに準拠する必要があります。
    • 説明: ワークフロー入力のデフォルト値。
  • 手順(必須)

    • タイプ: マップの配列
    • 説明: ワークフロー定義の実行時に実行される手順。少なくとも 1 つのステップが必要です。

    重要

    ステップは、 steps配列で定義された順序で実行されます。

    異なる順序が必要な場合は、 steps[*].nextプロパティをジャンプ先のステップの名前に設定することで「ジャンプ」を実行できます。

    • steps[*].name (必須)

      • タイプ: 文字列 (式セーフパターンに準拠; endは不可)
      • 最大長: 100
      • 説明: steps[*].nextによって参照されるステップの名前。終了ステップ、ループの継続、またはループからの脱出を示すために使用される特殊キーワードendcontinue 、またはbreakは使用できません。
    • steps[*].type (必須)

      • タイプ: 文字列
      • 説明: ステップのタイプ。実行時にステップが何を行うかを示します。利用可能なオプションについては、ステップ タイプを参照してください。
    • steps[*].next (オプション)

      • タイプ: 文字列 (式安全なパターンに準拠)

      • 説明

        • このステップが正常に完了したときに実行される次のステップの名前。特別なキーワードendを使用すると、このステップが最後に実行されることを示すことができます。
        • nextが省略されている場合、定義のsteps配列内の次のエントリが暗黙的な次のステップとして使用されます。次のエントリがない場合、ワークフローは完了します。

ステップの種類

アクション

特定のアクションを実行するステップ。利用可能なオプションについては、アクション カタログを参照してください。

  • steps[*].action (必須)

    • タイプ: 文字列

    • 説明: 実行するアクション関数の完全修飾名。次の規則に従う必要があります。

      <company domain>.<category of work>.<action name in camelCase>

    • :

      • New Relic サービスを使用したアクション (例: NerdGraph 経由): newrelic.dashboards.getDashboard
      • Slackを使ったアクション: slack.chat.postMessage
  • steps[*].version (必須)

    • タイプ: 文字列
    • 説明: 実行するアクション関数のバージョン。
  • steps[*].inputs (オプション)

    • タイプ: 値のマップ(を含む)

    • 説明

      • アクション関数に渡す入力。受け入れられる特定の入力は、各アクションによって定義されます。
      • 入力には式を使用できます。詳細については、式文字列のセクションを参照してください。

    重要

    機密データ ( APIキーやシークレット、PII、PHI、または個人を特定できるデータ) を引数として渡さないでください。

  • steps[*].inputs.selectors (オプション)

    • タイプ: nameexpressionの形式のマップのリスト。

    • 説明

      • selectors入力を使用すると、指定された要素のみを返すように出力を再定義できます。
      • 表現が使えます。詳細については、式文字列のセクションを参照してください。
      • この例では、http.get アクションの応答としてpageUrlstatusDescriptionを取得しています。
      name: status
      description: A workflow for checking the status of New Relic components
      steps:
      - name: query1
      type: action
      action: http.get
      version: 1
      inputs:
      url: "https://status.newrelic.com/api/v2/status.json"
      selectors:
      - name: statusCode
      expression: '.statusCode'
      - name: pageUrl
      expression: '.responseBody | fromjson | .page.url'
      - name: statusDescription
      expression: '.responseBody | fromjson | .status.description'
      - name: logOutput1
      type: action
      action: newrelic.ingest.sendLogs
      version: 1
      inputs:
      logs:
      - message: "status is '${{ .steps.query1.outputs.statusDescription }}' details at ${{ .steps.query1.outputs.pageUrl }}"

ループ

ループは、 inで定義された特定のコレクションを反復処理し、反復ごとにループ変数indexelementを作成します。これらのループ変数は、式${{ .steps.<loopStepName>.loop.element }}または ${{ .steps.<loopStepName>.loop.index }

詳細については以下を参照してください。

  • steps[*].for (必須)

    • タイプ: 定数
    • 説明: ループの開始を知らせる信号
  • steps[*].in (必須)

    • タイプ: 文字列 (式)

    • 説明: 要素のコレクションとして評価する必要がある式。

    • steps[*].steps (オプション)

      • 説明: ループの各反復で実行される手順。上記の手順については定義を参照してください。

      • :

        name: myWorkflow
        steps:
        - name: loopStep
        type: loop
        for:
        in: "${{ [range(1; 5)] }}""
        steps:
        - name: step1
        type: action
        action: newrelic.ingest.sendLogs
        version: 1
        inputs:
        logs:
        - message: "Loop: ${{ .steps.loopStep.loop.element }}"

スイッチ

  • さまざまな条件をチェックし、true と評価される最初の分岐を実行するステップ。

  • スイッチには、リスト内に任意の数の条件要素を含めることができます。条件を順番にチェックし、最初に true と評価される条件を処理します。どれもtrueと評価されない場合は、steps[*].nextで定義されている次のステップを実行します。

  • steps[*].switch (必須)

    • タイプ: 配列
    • 説明: 評価する条件の順序付きリストを指定する、スイッチ ケースの配列。
  • steps[*].switch[*].condition (必須)

    • タイプ: 文字列 (式)
    • 説明: スイッチケースの状態。true と評価された場合、ケースの次のステップが実行されます。
  • steps[*].switch[*].next (必須)

    • タイプ: 文字列 (式安全なパターンに準拠)
    • 説明: ケースの条件が true と評価された場合に実行するステップの名前。特別なキーワード end を使用すると、このステップが最後に実行されることを示すことができます。
    - name: hasCompleted
    type: switch
    switch:
    - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }}
    next: displayError
    - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }}
    next: displaySuccess
    next: displayUnexpected

待つ

ワークフローの実行を続行する前に一定の秒数待機させるステップ。1 つ以上の信号をリッスンすることもできます。待機中に信号が受信されない場合は、通常どおり続行されます。信号はリストで定義されます。各信号には対応する次のステップを定義する必要があります。最初に受信された信号が処理されます。信号として受信された値は、待機ステップのステップ出力に保存され、後のステップでのロジック処理に使用できます。

  • 例:

    name: waitSignalExample
    workflowInputs:
    steps:
    - name: waitStep
    type: wait
    seconds: 300
    signals: [{name: 'mySignalName', next: 'firstStep'}]
    - name: endStep
    type: action
    action: newrelic.ingest.sendLogs
    version: 1
    inputs:
    logs:
    - message: "didn't get signal"
    next: end
    - name: firstStep
    type: action
    action: newrelic.ingest.sendLogs
    version: 1
    inputs:
    logs:
    - message: ${{ .steps.waitStep.outputs.signalInputs.myString }}
  • steps[*].seconds (必須)

    • タイプ: 数値
    • 説明: ワークフローの実行を続行する前に待機する秒数。
  • steps[*].signals

    • タイプ: 配列
    • 説明: 受信されるとプログラムフローを転換する信号。
  • steps[*].signals[*].name

    • タイプ: 文字列
    • 説明: リッスンする信号の名前。
  • steps[*].signals[*].next

    • タイプ: 文字列
    • 説明: 指定されたシグナルを受信した場合に実行するステップ。

共有型

式文字列

いくつかのプロパティは、ワークフロー実行中に評価される埋め込み式を含む文字列値を受け入れ、ワークフロー定義内で動的な値を使用できるようにします。式文字列には 1 つまたは複数の式を含めることができ、各式は二重中括弧で囲まれます。中括弧内の内容は jq を使用して評価されます。

jq は、さまざまな方法で値にアクセスし、値を操作する機能を提供します。たとえば、ワークフロー入力文字列の長さは次のようにして実現できます。 ${{ .workflowInputs.myString | length }}

JQ 式を構築およびテストするには、このツールを使用できます。

式のプロパティ

式を使用して、多数のプロパティにアクセスできます。これらのプロパティは「scope」オブジェクト内に存在するため、scope オブジェクトのこれらのプロパティにアクセスするには、式をピリオド (.) で始める必要があります。

利用可能なプロパティは次のとおりです。

  • workflowInputs - 開始時にワークフローに渡される入力を含むオブジェクト。
    • 例: ${{ .workflowInputs.myInput }}
  • steps - ワークフローの各ステップのプロパティを含むオブジェクト
    • steps.<stepName> - 特定のステップのプロパティを含むオブジェクト
      • steps.<stepName>.outputs - ステップ/アクションに固有の結果プロパティを含むオブジェクト。
        • 例: ${{ .steps.myStep.outputs.myResult }}

表現評価結果

単一の jq 式は任意の JSON 型に評価できますが、式文字列全体の最終結果は式を囲む文字列の内容 (存在する場合) に依存することに注意することが重要です。

式文字列全体が単一の式で構成されている場合は、結果の JSON 型を維持しながら、jq 式の結果に評価されます。たとえば、ワークフローに入力として配列が渡された場合、文字列${{ .workflowInputs.myArray }}は配列として評価されます。これは、ワークフロー内で複雑なデータを渡す場合に役立ちます。

式文字列に単一の式以外のコンテンツが含まれている場合は、文字列の結果に評価されます。たとえば、式の前後にコンテンツがある場合や、文字列内に複数の式がある場合に、この現象が発生します。文字列内の各式は評価され、文字列表現に変換されます。

例:

次の例では、myArray の値が [1, 2, 3] であると仮定します。

式文字列

結果データ

結果タイプ

${{ .workflowInputs.myArray }}

[1, 2, 3]

数字の配列

${{ .workflowInputs.myArray | length }}

3

ナンバー

${{ .workflowInputs.myArray | length > 0 }}

true

ブール値

Input is not empty: ${{ .workflowInputs.myArray | length > 0 }}

「入力が空ではありません: true」

ストリング

${{ .workflowInputs.myArray }} has length ${{ .workflowInputs.myArray | length }}

「長さは3です」

ストリング

式セーフパターン

式で使用できるプロパティは、次の正規表現に準拠する必要があります。 ^[A-Za-z_][A-Za-z0-9_]*$

秘密の参照

シークレット値は、シークレット サービスで検索するシークレットの名前を指定する参照文字列を介してアクションで使用できます。ワークフロー定義でシークレットを参照するには、次の構文を使用します。

  • ${{ :secrets:<SECRET_NAME> }} 秘密は namespace
  • ${{ :secrets:<NAMESPACE>:<SECRET_NAME> }} 秘密のために namespace

式文字列には、シークレット参照と JQ 式の組み合わせ、または複数のシークレット参照を含めることができます。

例:

steps:
- name: bearer_auth
type: action
action: http.post
inputs:
headers:
Authorization: Bearer ${{ :secrets:<SECRET_NAME> }}

  • こんにちは世界
name: helloWorld
description: 'A hello world workflow'
workflowInputs:
name:
type: String
defaultValue: World
required: false
validations:
- type: maxLength
errorMessage: "name must be at most 100 characters"
length: 100
slackTokenSecret:
type: String
defaultValue: "${{ :secrets:SLACK_TOKEN }}"
slackChannel:
type: String
defaultValue: my-channel
validations:
- type: regex
errorMessage: "A slack channel name must be lowercase and can only contain letters, numbers, and hyphens"
pattern: "^[a-z0-9\\-]+$"
required: true
steps:
- name: init1
type: assign
inputs:
greeting: Hello ${{ .workflowInputs.name }}
- name: logName
type: action
action: newrelic.ingest.sendLogs
version: 1
inputs:
logs:
- message: ${{ .steps.init1.outputs.greeting }}
- name: waiting1
type: wait
seconds: 1
- name: queryForLog
type: action
action: newrelic.nrdb.query
version: 1
inputs:
query: >-
FROM Log SELECT * WHERE message LIKE '${{ .steps.init1.outputs.greeting
}}'
- name: checkResult
type: switch
switch:
- condition: ${{ .steps.queryForLog.outputs.results | length > 0 }}
next: FoundMessage
- name: waitingMessage
type: action
action: slack.chat.postMessage
version: 1
inputs:
channel: ${{ .workflowInputs.slackChannel }}
text: Waiting for log message...
token: ${{ .workflowInputs.slackTokenSecret }}
next: waiting1
- name: FoundMessage
type: action
action: slack.chat.postMessage
version: 1
inputs:
channel: ${{ .workflowInputs.slackChannel }}
text: Found message! ${{ .steps.queryForLog.outputs.results[0].message }}
token: ${{ .workflowInputs.slackTokenSecret }}
Copyright © 2025 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.