スキーマ
ワークフロー定義は YAML で記述されます。キーはcamelCase命名規則を使用します。
スキーマプロパティ
プロパティ | 必須またはオプション | タイプ | 形式 | 制約 | 説明 |
|---|---|---|---|---|---|
| 必須 | 弦 | 正規表現に準拠する必要があります
| 最大長 : 100 |
値は大文字と小文字を区別しません。たとえば、
、
、
はすべて同じワークフロー定義を表すものと見なされます。 |
| オプション | 弦 | 正規表現に準拠する必要があります
| 最大長 : 200 | ワークフローの目的を説明するワークフローの
。 |
| オプション | 地図の地図 | 最大サイズ : 100 | ワークフローが受け入れるワークフロー入力のマップ。詳細なプロパティについては以下を参照してください。 |
ワークフロー入力
例:
workflowInputs: myInput1: type: String myInput2: type: Number defaultValue: 42workflowInputs.<inputName>(必須)- タイプ: 文字列 (式安全なパターンに準拠)
- 最小の長さ: 1
- 最大長: 50
- 説明: ワークフロー入力の名前。
workflowInputs.<inputName>.type(必須)- タイプ: 列挙型 (
Boolean, List, Map, String, Int, Float) - 説明: ワークフロー入力のデータ型。
- タイプ: 列挙型 (
workflowInputs.<inputName>.defaultValue(オプション)- タイプ: 任意;
typeに準拠する必要があります。 - 説明: ワークフロー入力のデフォルト値。
- タイプ: 任意;
workflowInputs.<inputName>.required(オプション)- タイプ: ブール値 (
True、False)。 - 説明: このフィールドのデフォルト値は「True」です。
- タイプ: ブール値 (
workflowInputs.<inputName>.enumValues(オプション)- タイプ: リスト (
String)。 - 説明: このフィールドのデフォルト値は空のリスト
{}です。workflowInput タイプが Enum の場合、これは必須です。
- タイプ: リスト (
workflowInputs.<inputName>.validations(オプション)- タイプ: マップの配列。
- 説明: ユーザーが提供するワークフロー入力に対して実行される検証。これはオプションのフィールドです。ここで説明するプロパティは、すべての検証タイプに存在します。特定の検証タイプは、検証タイプのセクションで説明されているように、追加のプロパティをサポートします。
validations[*].type(必須)- タイプ: 文字列
- 説明: このフィールドでどのような検証が行われるかを示す検証のタイプ。各検証タイプの詳細については、「検証タイプ」を参照してください。
validations[*].errorMessage(必須)- タイプ: 文字列
- 説明: 特定の検証が失敗したときにユーザーが表示するエラーメッセージ。
検証用のサンプルYAML
name: calendar_demo
workflowInputs: timezone: type: String defaultValue: 'America/Los_Angeles' validations: - type: regex errorMessage: "The provided timezone is not correct" pattern: "^[A-Za-z]+\/[A-Za-z_]+(?:\/[A-Za-z_]+)?$"
- type: maxLength errorMessage: "Timezone length should be less than 100" length: 100
accountId: type: Int validations: - type: minIntValue errorMessage: "Account id should be greater than 100000" minValue: 100000 - type: maxIntValue errorMessage: "Account id should be less than 9999999" maxValue: 9999999
steps: - name: getCurrentTime type: action action: http.get version: 1 inputs: url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}' selectors: - name: timezone expression: '.responseBody | fromjson.abbreviation' - name: datetime expression: '.responseBody | fromjson.datetime'手順
プロパティ | 必須またはオプション | タイプ | 制約 | 説明 |
|---|---|---|---|---|
| 必須 | 地図の配列 | ワークフロー定義の実行時に実行される手順。少なくとも 1 つのステップが必要です。ここで説明するプロパティは、すべてのステップ タイプに存在します。特定のステップ タイプでは、 セクションで説明されている追加のプロパティがサポートされます。 |
重要
ステップは、 steps配列で定義された順序で実行されます。異なる順序付けが必要な場合は、 steps[*].nextプロパティをジャンプするステップの名前に設定してjumpを実行できます。
共通ステッププロパティ
プロパティ | 必須またはオプション | タイプ | 形式 | 制約 | 説明 |
|---|---|---|---|---|---|
| 必須 | 弦 | に準拠する必要があり、
にすることはできません。 | 最大長: 100 |
によって参照されるステップの名前。特殊キーワード
、
、または
は使用できません。これらは、終了ステップ、ループの継続、またはループからの脱出を示すために使用されます。 |
| 必須 | 弦 | ステップのタイプ。実行時にステップが何を行うかを示します。利用可能なオプションについては、以下の を参照してください。 | ||
| オプション | 弦 | 表現の安全パターンに準拠する必要があります | このステップが正常に完了したときに実行される次のステップの名前。特別なキーワード end を使用すると、このステップが最後に実行されることを示すことができます。
が省略されている場合、定義
配列内の次のエントリが暗黙的な次のステップとして使用されます。次のエントリがない場合、ワークフローは完了します。 | |
| オプション | ブール値 |
は、ワークフローのステップ内の設定オプションです。 デフォルトは false です。
を
に設定すると、ワークフローでは、このステップの実行中にエラーが発生してもワークフロー全体が失敗しないことが保証されます。代わりに、ワークフローは後続のステップの実行を継続します。 |
ステップの種類
アクション
特定のアクションを実行するステップ。利用可能なオプションについては、アクション カタログを参照してください。
steps[*].action(必須)- タイプ: 文字列
- 説明: 実行するアクション関数の完全修飾名。次の規則に従う必要があります。
<company domain>.<category of work>.<action name in camelCase>
例:
New Relic サービスを使用したアクション (例: NerdGraph 経由):
newrelic.dashboards.getDashboardSlackを使ったアクション:
slack.chat.postMessagesteps[*].version(必須)- タイプ: 文字列
- 説明: 実行するアクション関数のバージョン。
steps[*].inputs(オプション)タイプ: 値のマップ(式を含む)
説明:
- アクション関数に渡す入力。受け入れられる特定の入力は、各アクションによって定義されます。
- 入力には式を使用できます。詳細については、「式文字列」セクションを参照してください。
重要
機密データ ( APIキーやシークレット、PII、PHI、または個人を特定できるデータ) を引数として渡さないでください。
steps[*].inputs.selectors(オプション)タイプ:
nameとexpressionの形式のマップのリスト。説明:
selectors入力を使用すると、指定された要素のみを返すように出力を再定義できます。- 表現が使えます。詳細については、「式文字列」セクションを参照してください。
例:
- この例では、http.get アクションの応答として
timezoneとdatetimeを取得しています。
name: calendar_demo
workflowInputs: timezone: type: String defaultValue: 'America/Los_Angeles' accountId: type: Int
steps: - name: getCurrentTime type: action action: http.get version: 1 inputs: url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}' selectors: - name: timezone expression: '.responseBody | fromjson.abbreviation' - name: datetime expression: '.responseBody | fromjson.datetime'ループ
ループは、 inで定義された特定のコレクションを反復処理し、反復ごとにループ変数indexとelementを作成します。これらのループ変数は、式${{ .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 と評価される最初の分岐を実行するステップ。
スイッチには、リスト内に任意の数の
condition要素を含めることができます。条件を順番にチェックし、最初に true と評価される条件を処理します。いずれも true と評価されない場合は、steps[*].nextで定義されているnextステップが実行されます。steps[*].switch(必須)- タイプ: 配列
- 説明: 評価する条件の順序付きリストを指定する、スイッチ ケースの配列。
steps[*].switch[*].condition(必須)steps[*].switch[*].next(必須)- タイプ: 文字列 (式安全なパターンに準拠)
- 説明: ケースの条件が true と評価された場合に実行するステップの名前。特別なキーワード
endを使用すると、このステップが最後に実行されることを示すことができます。
- name: hasCompletedtype: switchswitch:- condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }}next: displayError- condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }}next: displaySuccessnext: displayUnexpected
待って
ワークフローの実行を指定された秒数だけ一時停止してから続行するステップ。
待機ステップでは、1 つ以上のシグナルをリッスンすることもできます。各信号には、対応する次のステップがリスト内に定義されている必要があります。待機期間中に信号が受信された場合、最初に受信した信号が処理され、ワークフローは定義された次のステップを実行します。信号が受信されない場合、待機期間の終了後にワークフローは通常どおり続行されます。
信号から受信した値は待機ステップの出力に保存され、後続のステップでロジックまたは処理に使用できます。
例:
name: waitSignalExample workflowInputs: steps: - name: waitStep type: wait seconds: 300 signals: [{name: 'mySignalName', next: 'firstStep'}] - name: endStep type: action action: newrelic.instrumentation.log version: 1 inputs: message: "didn't get signal" next: end - name: firstStep type: action action: newrelic.instrumentation.log version: 1 inputs: message: ${{ .steps.waitStep.outputs.signalInputs.myString }}steps[*].seconds(必須)- タイプ: 数値
- 説明: ワークフローの実行を続行する前に待機する秒数。
steps[*].signals- タイプ: 配列
- 説明: 受信されるとプログラムフローを転換する信号。
steps[*].signals[*].name- タイプ: 文字列
- 説明: リッスンする信号の名前。
steps[*].signals[*].next- タイプ: 文字列
- 説明: 指定されたシグナルを受信した場合に実行するステップ。
割り当てる
ワークフロー全体で使用する変数を定義するステップ。このステップでは、後続のステップで参照できる変数に値を割り当てます。このステップ タイプでは、すべての変数を 1 か所で定義することで、ワークフローがより読みやすく最適化されます。
サンプルワークフロー:
name: sampleWorkflowWithAssign description: WorkflowAssignDemo
workflowInputs: initialValue: type: String anotherValue: type: Int
steps: - name: runAction type: action action: internal.http.post version: 1 inputs: url: 'http://localhost:8505/tasks/gc' # temporal-activity-worker-java service port selectors: - name: statusCode expression: '.statusCode' - name: responseBody expression: '.responseBody' - name: variableInitialization type: assign inputs: stringVar: "${{ .workflowInputs.initialValue }}" intVar: "${{ .workflowInputs.anotherValue }}" concatenationVar: "${{ .workflowInputs.initialValue }} - concatenated" booleanVar: true mapVar: key1: "value1" key2: "${{ .workflowInputs.initialValue }}" listVar: - "listItem1" - "${{ .workflowInputs.initialValue }}" - "${{ .workflowInputs.anotherValue }}" statusCode: ${{ .steps.runAction.outputs.statusCode }}
- name: wait type: wait seconds: 2
- name: logVariables type: action action: newrelic.ingest.sendLogs version: 1 inputs: logs: - message: "stringVar: ${{ .steps.variableInitialization.outputs.stringVar }}" - message: "intVar: ${{ .steps.variableInitialization.outputs.intVar }}" - message: "concatenationVar: ${{ .steps.variableInitialization.outputs.concatenationVar }}" - message: "booleanVar: ${{ .steps.variableInitialization.outputs.booleanVar }}" - message: "mapVar: ${{ .steps.variableInitialization.outputs.mapVar | tojson }}" - message: "listVar: ${{ .steps.variableInitialization.outputs.listVar | tojson }}" - message: "statusCode: ${{ .steps.variableInitialization.outputs.statusCode }}"steps[*].inputs(必須)- タイプ: 値のマップ(式を含む)
- 説明:
- 入力は変数名とそれに割り当てられた値のマップです。秘密参照が変数に割り当てられると、秘密参照のままとなり、実際の値に変換されません。ただし、他の式 (ワークフロー入力など) は評価され、実際の値に変換されます。
- 許可される入力タイプ:
Integer、Double、Boolean、String、Array、Map
検証の種類
検証タイプ | プロパティ | 必須またはオプション | タイプ | 説明 |
|---|---|---|---|---|
|
| 必須 | 弦 | 指定された正規表現パターンに対してワークフロー入力値を検証します。 |
|
| 必須 | 整数 | ワークフローの入力値が指定された maxValue より小さいことを検証します。 |
|
| 必須 | 整数 | ワークフローの入力値が指定された minValue よりも大きいことを検証します。 |
|
| 必須 | 整数 | ワークフロー入力文字列とコレクションの最大長を検証します (
)。 |
共有型
式文字列
いくつかのプロパティは、ワークフロー実行中に評価される埋め込み式を含む文字列値を受け入れ、ワークフロー定義で動的な値を有効にします。
式文字列には、それぞれ二重中括弧で囲まれた 1 つ以上の式を含めることができます。中括弧内の内容はjqを使用して評価され、値にアクセスして操作するための強力な機能が提供されます。
例:
ワークフロー入力文字列の長さを取得します。
${{ .workflowInputs.myString | length }}
式を検証およびテストするには、 JQ Playgroundを使用します。
式のプロパティ
式を使用して、多数のプロパティにアクセスできます。これらのプロパティはscopeオブジェクト内に存在するため、スコープ オブジェクトのこれらのプロパティにアクセスするには、式をピリオド(.)で始める必要があります。
利用可能なプロパティは次のとおりです。
workflowInputs- 開始時にワークフローに渡される入力を含むオブジェクト。
例:
${{ .workflowInputs.myInput }}
steps- ワークフローの各ステップのプロパティを含むオブジェクトsteps.<stepName>- 特定のステップのプロパティを含むオブジェクトsteps.<stepName>.outputs- ステップまたはアクションに固有の結果プロパティを含むオブジェクト。
例: ${{ .steps.myStep.outputs.myResult }}
表現評価結果
単一の jq 式は任意の JSON 型に評価できます。ただし、式文字列の最終結果は、文字列に式のみが含まれているか、追加のコンテンツが含まれているかによって異なります。
単一の式(JSON 型を保持) :
式文字列が周囲のコンテンツのない 1 つの式のみで構成されている場合は、元の JSON 型を維持しながら jq 式の結果に評価されます。たとえば、 ${{ .workflowInputs.myArray }}配列として評価されます。これは、ワークフロー内で複雑なデータ構造を渡すのに役立ちます。
複数の式または混合コンテンツ(文字列に変換されます) :
式文字列に単一の式以外のコンテンツが含まれている場合、文字列の結果に評価されます。これは、式の前後にコンテンツがある場合、または文字列内に複数の式がある場合に発生します。文字列内の各式は評価され、文字列表現に変換されます。
重要
jq 式が null と評価されると、null ノードが返されます。たとえば、式${{ .workflowInputs.missingInput }}は、ワークフロー入力としてmissingInputが指定されていない場合は null を返します。
例:
myArrayの値が[1, 2, 3]であると仮定します。
式文字列 | 結果データ | 結果タイプ |
|---|---|---|
|
| 数字の配列 |
| 3 | 数 |
| トゥルー | ブール値 |
|
| 弦 |
|
| 弦 |
表現安全なパターン
式で使用できるプロパティは、次の条件に準拠する必要があります。 ^[A-Za-z_][A-Za-z0-9_]*$
秘密の参照
シークレット値は、シークレット サービスで検索するシークレットの名前を指定する参照文字列を介してアクションで使用できます。ワークフロー定義でシークレットを参照するには、次の構文を使用します。
${{ :secrets:<SECRET_NAME> }}秘密はnamespace${{ :secrets:<NAMESPACE>:<SECRET_NAME> }}秘密のためにnamespace${{ :secrets:<SCOPE>:<NAMESPACE>:<SECRET_NAME> }}スコープとネームスペースのシークレットについては。 現時点では、スコープはACCOUNTまたはORGANIZATIONのみを受け入れます。
式文字列には、シークレット参照と JQ 式の組み合わせand/or複数のシークレット参照) を含めることができます。
例:
steps: - name: mySecretStep type: action action: newrelic.instrumentation.log inputs: message: My message licenseKey: ${{ :secrets:<SECRET_NAME> }}steps: - name: bearer_auth type: action action: utils.http.post inputs: headers: Authorization: Bearer ${{ :secrets:<SECRET_NAME> }}例
カレンダーのデモ
ワークフロー入力、HTTP アクション、セレクター、待機ステップ、NRQL クエリ、スイッチ ステートメント、Slack 通知などの複数のワークフロー機能を示す完全なワークフロー例。
name: calendar_demo
workflowInputs: timezone: type: String defaultValue: 'America/Los_Angeles' accountId: type: Int
steps: - name: getCurrentTime type: action action: http.get version: 1 inputs: url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}' selectors: - name: timezone expression: '.responseBody | fromjson.abbreviation' - name: datetime expression: '.responseBody | fromjson.datetime'
- name: logTime type: action action: newrelic.instrumentation.log version: 1 inputs: message: 'DEMO: In the ${{ .steps.getCurrentTime.outputs.timezone }} timezone, the current time is ${{ .steps.getCurrentTime.outputs.datetime }}' licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}
- name: wait type: wait seconds: 1
- name: queryForLog type: action action: newrelic.nrql.query version: 1 inputs: accountIds: ['${{ .workflowInputs.accountId }}'] query: FROM Log SELECT * WHERE message LIKE 'DEMO:%${{ .steps.getCurrentTime.outputs.datetime }}'
- name: checkQuery type: switch switch: - condition: ${{ .steps.queryForLog.outputs.results | length > 0 }} next: postResultsMessage
- name: postWaitingMessage type: action action: slack.chat.postMessage version: 1 inputs: channel: test-channel-workflow text: Waiting for log message... token: ${{ :secrets:dn_staging_slack_token }} next: wait
- name: postResultsMessage type: action action: slack.chat.postMessage version: 1 inputs: channel: test-channel-workflow text: 'Found log message! ${{ .steps.queryForLog.outputs.results[0].message }}' token: ${{ :secrets:dn_staging_slack_token }}