• /
  • EnglishEspañolFrançais日本語한국어Português
  • 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

흐름흐름 정의 스키마

시사

이 기능은 아직 개발 중이지만 꼭 사용해 보시기 바랍니다!

이 기능은 현재 출시 전 정책 에 따라 미리보기 프로그램의 일부로 제공됩니다.

개요

정의는 실행될 자동화된 프로세스를 설명합니다. 정의는 camelCase 명명 규칙을 사용하여 YAML로 작성됩니다. 각 흐름은 다음과 같이 구성됩니다.

  • 스키마 속성: 기본 정보(이름, 설명, 입력값)
  • 단계: 수행해야 할 일련의 행동
  • 표현식: jq 구문을 사용한 동적 값
  • 비밀: 보안 자격 증명 참조

기초 개념

건축우를 구축하기 전에 건축우 정의 전반에 사용되는 다음 핵심 개념을 이해하십시오.

표현식 문자열

몇몇 속성은 도표우 실행 중에 평가되는 내장 표현식이 포함된 문자열 값을 허용하므로 도표우 정의에서 동적 값을 사용할 수 있습니다.

표현식 문자열은 하나 이상의 표현식을 포함할 수 있으며, 각 표현식은 이중 중괄호로 묶입니다. 중괄호 안의 내용은 jq를 사용하여 평가되며, jq는 값에 접근하고 조작할 수 있는 강력한 기능을 제공합니다.

:

입력 문자열의 길이를 구합니다.

${{ .workflowInputs.myString | length }}

표현식의 유효성을 검사하고 테스트하려면 JQ Playground를 사용하십시오.

발현 특성

표현식을 사용하여 여러 속성에 접근할 수 있습니다. 이러한 속성은 scope 객체에 있으므로 범위 객체의 해당 속성에 액세스하려면 표현식이 마침표 (.) 로 시작해야 합니다.

이용 가능한 속성은 다음과 같습니다.

  • workflowInputs - 시작 시 뷰우에 전달되는 입력값을 담고 있는 객체입니다.

:

${{ .workflowInputs.myInput }}

  • steps - 각 단계에 대한 속성을 포함하는 객체
  • steps.<stepName> - 특정 단계에 대한 속성을 포함하는 객체
  • steps.<stepName>.outputs - 단계 또는 작업에 특정한 결과 속성을 포함하는 객체입니다.

: ${{ .steps.myStep.outputs.myResult }}

발현 평가 결과

하나의 jq 표현식으로 모든 JSON 유형을 평가할 수 있습니다. 하지만 표현식 문자열의 최종 결과는 문자열에 표현식만 포함되어 있는지 아니면 추가 콘텐츠가 포함되어 있는지에 따라 달라집니다.

단일 표현식(JSON 유형 유지):

표현식 문자열이 주변에 내용이 없고 하나의 표현식으로만 구성된 경우, 원래 JSON 유형을 유지하면서 jq 표현식의 결과로 평가됩니다. 예를 들어, ${{ .workflowInputs.myArray }} an으로 평가됩니다. 이는 복잡한 데이터 구조를 전달하는 데 유용합니다.

여러 표현 또는 혼합된 콘텐츠(문자열로 변환):

표현식 문자열에 단일 표현식 이외의 내용이 포함되어 있으면 문자열 결과로 평가됩니다. 이는 표현식 앞뒤에 내용이 있거나 문자열 내에 여러 표현식이 포함된 경우에 발생합니다. 문자열 내의 각 표현식은 평가되어 문자열 표현으로 변환됩니다.

중요

jq 표현식이 null로 평가되면 null 노드가 반환됩니다. 예를 들어 표현식 ${{ .workflowInputs.missingInput }}missingInput 입력으로 주어지지 않으면 null을 반환합니다.

:

myArray 의 값이 [1, 2, 3] 이라고 가정해 봅시다.

표현식 문자열

결과 데이터

결과 유형

${{ .workflowInputs.myArray }}

[1, 2, 3]

숫자의 비교

${{ .workflowInputs.myArray | length }}

숫자

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

사실

부울

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

"Input is not empty: true"

문자열

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

"has length 3"

문자열

표현 안전 패턴

표현식에서 사용할 수 있는 속성은 다음 조건을 충족해야 합니다. ^[A-Za-z_][A-Za-z0-9_]*$

비밀 참고 자료

비밀 값은 Secret Service에서 검색할 비밀의 이름을 지정하는 참조 문자열을 통해 작업에서 사용될 수 있습니다. 스텔라우 정의에서 비밀을 참조하려면 다음 구문을 사용하세요.

  • ${{ :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> }}

스키마 구조

스키마 속성

재산

필수 또는 선택

유형

체재

제약

설명

name

필수의

문자열

정규 표현식을 준수해야 합니다.

^[A-Za-z_][A-Za-z0-9_-]*$

최대 길이

: 100

name

값은 대소문자를 구분하지 않습니다. 예를 들어,

ExampleWorkflow

,

exampleworkflow

,

EXAMPLEWORKFLOW

은 모두 동일한 차트우 정의를 나타내는 것으로 간주됩니다.

description

선택 과목

문자열

정규 표현식을 준수해야 합니다.

^[A-Za-z0-9 _-]*$

최대 길이

: 200

워크플로우의 목적을 설명하는

description

입니다.

workflowInputs

선택 과목

지도의 지도

최대 크기

: 100

워크플로우가 받아들이는 입력의 맵입니다. 자세한 속성은 아래를 참조하십시오.

워크플로 입력

:

workflowInputs:
myInput1:
type: String
myInput2:
type: Number
defaultValue: 42
  • workflowInputs.<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'

유효성 검사 유형

유효성 검사 유형

재산

필수 또는 선택

유형

설명

regex

validations[*].pattern

필수의

문자열

제공된 정규 표현식 패턴에 대해 '검증우' 입력 값을 검증합니다.

maxIntValue

validations[*].maxValue

필수의

정수

입력값이 제공된 최대값보다 작아야 함을 검증합니다.

minIntValue

validations[*].minValue

필수의

정수

입력값이 제공된 최소값보다 커야 하는지 검증합니다.

maxLength

validations[*].length

필수의

정수

입력 문자열과 컬렉션(

Array, Set, Map, etc.

)의 최대 길이를 검증합니다.

단계

재산

필수 또는 선택

유형

제약

설명

steps

필수의

지도의 재발

그루우 정의를 실행할 때 수행해야 하는 단계입니다. 최소한 한 단계는 있어야 합니다. 여기에 설명된 속성은 모든 단계 유형에 존재합니다. 특정 단계 유형은

단계 유형

섹션에 설명된 대로 추가 속성을 지원합니다.

중요

단계는 steps 에 정의된 순서대로 실행됩니다. 다른 순서를 원하는 경우 jump 수행할 수 있습니다. steps[*].next 속성을 건너뛸 원하는 단계의 이름으로 설정하십시오.

공통 단계 속성

재산

필수 또는 선택

유형

체재

제약

설명

steps[*].name

필수의

문자열

표현식 안전 패턴을

준수해야 하며

end

될 수 없습니다.

최대 길이:

100

steps[*].next

에서 참조할 단계의 이름입니다. 특수 키워드

end

,

continue

,

break

은 종료 단계, 루프의 연속 또는 루프에서 나가는 것을 나타내는 데 사용되므로 사용할 수 없습니다.

steps[*].type

필수의

문자열

단계 유형은 단계가 실행될 때 수행하는 작업을 나타냅니다. 사용 가능한 옵션은 아래의

단계 유형을

참조하십시오.

steps[*].next

선택 과목

문자열

표현 안전 패턴을 준수해야 합니다.

이 단계가 성공적으로 완료되면 실행될 다음 단계의 이름입니다. 특수 키워드 'end'를 사용하면 이 단계가 마지막으로 실행되어야 함을 나타낼 수 있습니다.

next

생략되면 정의

steps

의 다음 항목이 암묵적인 다음 단계로 사용됩니다. 후속 입력이 없으면, 해당 입력란이 완성됩니다.

steps[*].ignoreErrors

선택 과목

부울

ignoreErrors

은(는) 워크플로우 단계 내의 설정 옵션입니다. 기본값은 false입니다.

ignoreErrors

true

로 설정함으로써, 이 단계 실행 중에 발생하는 오류가 전체 이 단계의 실패를 초래하지 않도록 합니다. 대신, 그라우는 후속 단계를 계속 실행합니다.

단계 유형

동작

특정 동작을 실행하는 단계입니다. 사용 가능한 옵션은 액션 카탈로그를 참조하십시오.

  • steps[*].action (필수)

    • 유형: 문자열
    • 설명: 실행할 작업 함수의 정규화된 이름입니다. 다음 규칙을 따라야 합니다. <company domain>.<category of work>.<action name in camelCase>

:

  • 뉴렐릭 서비스를 사용한 작업(예: NerdGraph를 통해): newrelic.dashboards.getDashboard

  • Slack을 사용한 작업: slack.chat.postMessage

  • steps[*].version (필수)

    • 유형: 문자열
    • 설명: 실행할 작업 함수의 버전입니다.
  • steps[*].inputs (선택 사항)

    • 유형: 값 맵(표현식 포함)

    • 설명:

      • 액션 함수에 전달할 입력입니다. 허용되는 구체적인 입력은 각 작업에 의해 정의됩니다.
      • 입력값에는 표현식을 사용할 수 있습니다. 자세한 내용은 표현식 문자열 섹션을 참조하십시오.

    중요

    민감한 데이터(API 키나 비밀, PII, PHI 또는 개인 식별 데이터)는 인수로 전달되어서는 안 됩니다.

  • steps[*].inputs.selectors (선택 사항)

    • 유형: name 형식의 맵 목록이며 expression 포함됩니다.

    • 설명:

      • selectors 입력을 사용하면 지정된 요소만 반환하도록 출력을 재정의할 수 있습니다.
      • 표현식을 사용할 수 있습니다. 자세한 내용은 표현식 문자열 섹션을 참조하십시오.

:

  • 제시된 예에서 우리는 http.get 작업의 응답으로 timezonedatetime 얻습니다.
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'

고리

루프는 컬렉션(리스트, 맵, 객체)을 순회하며 각 반복마다 indexelement 변수를 자동으로 생성합니다. 이러한 루프 변수는 ${{ .steps.<loopStepName>.loop.element }} 또는 를 사용하여 루프 내에서만 접근할 수 있습니다. ${{ .steps.<loopStepName>.loop.index }}

속성:

  • steps[*].for (필수)

    • 유형: 상수
    • 설명: 반복문의 시작을 알립니다.
  • steps[*].in (필수)

    • 유형: 문자열(표현식)
    • 설명: 요소들의 모음으로 평가되는 표현식
  • steps[*].steps (필수)

    • 설명: 각 반복마다 실행되는 단계입니다. 중첩 루프를 포함하여 모든 단계 유형을 포함할 수 있습니다.

중요

  • 대상: (필수). 이는 for 루프의 시작을 나타내는 최상위 요소입니다.
  • 입력란: (필수). 반복할 입력 컬렉션을 자바로 캐스팅할 수 있어야 합니다.
  • 단계: (필수). 각 반복마다 단계가 실행됩니다.
  • 요소인덱스는 루프의 일부로 자동으로 할당됩니다.
  • index 0부터 시작하며, 복소수 요소로 이루어진 컬렉션이 있는 경우 element 복소수 유형이 될 수 있습니다.
  • 반복문 내부에서 생성된 변수(반복문 변수 및 단계 출력)는 반복문 내에서만 접근 가능합니다.
  • 이 변수들은 루프가 종료될 때 초기화되며, 루프 외부에서 접근하면 null이 됩니다.
  • 반복문은 반복문 외부에서 정의된 변수에 접근할 수 있습니다.

예시: 기본 반복문

name: myWorkflow
steps:
- name: loopStep
type: loop
for:
in: '${{ .workflowInputs.count }}'
steps:
- name: step1
type: action
action: internal.example.sayHello
version: '1'
inputs:
name: 'Element : ${{ .steps.loopStep.loop.element }} , Index : ${{ .steps.loopStep.loop.index }}' # not exist outside of this loop

예시: 정수 반복

name: myWorkflow
steps:
- name: loopStep
type: loop
for:
in: ${{ [range(1; 6)] }}
steps:
- name: step1
type: action
action: internal.example.sayHello
version: '1'
inputs:
name: 'Element: ${{ .steps.loopStep.loop.element }} , Index : ${{ .steps.loopStep.loop.index }}' # Element : [1, 2, 3, 4, 5] , Index : [0, 1, 2, 3, 4]

예시: 지도에서 반복

name: myWorkflow
steps:
- name: loopStep
type: loop
for:
in: '${{ [ { "key1": "val1" }, { "key2": "val2"} ] }}'
steps:
- name: step1
type: action
action: internal.example.sayHello
version: '1'
inputs:
name: 'Element : ${{ .steps.loopStep.loop.element }} , Index : ${{ .steps.loopStep.loop.index }}' # Element: [{ "key1": "val1" }, { "key2": "val2"}] , Index : [0, 1]

예시: 루프 내에서 점프하기

같은 루프 내에서 단계 간 이동은 허용됩니다. 반복문 안으로 들어가거나 나오는 것, 서로 다른 반복문 사이를 이동하는 것, 또는 부모/자식 반복문 사이를 이동하는 것은 허용되지 않습니다.

name: myWorkflow
steps:
- name: firstStep
type: action
action: example.messaging.sayHello
version: '1.0.0'
- name: loopStep
type: loop
for:
in: '${{ .workflowInputs.count }}'
steps:
- name: step1
type: action
action: example.messaging.sayHello
version: '1.0.0'
inputs:
name: '${{ .steps.loopStep.loop.element }}'
next: step3 # Okay within the loop
- name: step2
type: action
action: example.messaging.sayHello
version: '1.0.0'
inputs:
name: '${{ .steps.step1.outputs.greeting }}'
- name: step3
type: action
action: example.messaging.sayHello
version: '1.0.0'
next: firstStep # Not okay, first step is not in the loop context

예시: 중단 후 계속

루프 흐름을 제어하려면 next: break 또는 next: continue 사용하십시오. 이것들은 반복문 내에서 사용되는 예약어입니다. 루프 밖에서는 워크플로우 끝으로 점프합니다. 참고: end 루프 내부에서 break 처럼 동작합니다.

name: myWorkflow
steps:
- name: loopStep
type: loop
for:
in: '${{ [range(1; 6)] }}'
steps:
- name: insideLoopStep1
type: action
action: example.messaging.sayHello
version: '1.0.0'
inputs:
name: '${{ .steps.loopStep.loop.element }}'
next: continue
- name: insideLoopStep2
type: action
action: example.messaging.sayHello
version: '1.0.0'
inputs:
name: '${{ .steps.loopStep.loop.element }}'
- name: loopStepAgain
type: loop
for:
in: '${{ .workflowInputs.count }}'
steps:
- name: switchStep
type: switch
switch:
- condition: '${{ .steps.loopStepAgain.loop.index >= 0 }}'
next: break
- name: insideLoopStepAgain
type: action
action: example.messaging.sayHello
version: '1.0.0'
inputs:
name: '${{ .steps.loopStepAgain.loop.element }}'

간단한 예:

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 }}"

스위치

  • 다양한 조건을 검사하고 참으로 평가되는 첫 번째 분기를 취하는 단계입니다.

  • 스위치는 목록에 임의의 개수의 condition 개 요소를 포함할 수 있습니다. 조건을 순서대로 확인하고, 참인 첫 번째 조건부터 처리합니다. 만약 어느 것도 참으로 평가되지 않으면, steps[*].next 에 정의된 대로 next 단계를 실행합니다.

    • steps[*].switch (필수)

      • 유형: 기타
      • 설명: 평가할 조건의 정렬된 목록을 지정하는 switch case의 배열입니다.
    • steps[*].switch[*].condition (필수)

      • 유형: 문자열(표현식)
      • 설명: 스위치 케이스의 상태. 만약 참으로 평가되면, next 단계가 실행됩니다.
      • 자세한 내용은 표현식 문자열 섹션을 참조하십시오.
    • steps[*].switch[*].next (필수)

      • 타입: 문자열 (표현식 안전 패턴 준수)
      • 설명: 해당 조건식이 참으로 평가될 경우 실행할 단계의 이름입니다. 특수 키워드 end 을 사용하면 이 단계가 마지막으로 실행되어야 함을 나타낼 수 있습니다.
    - name: hasCompleted
    type: switch
    switch:
    - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }}
    next: displayError
    - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }}
    next: displaySuccess
    next: displayUnexpected

기다리다

지정된 시간(초) 동안 실행을 일시 중지한 후 계속 진행하는 단계입니다.

대기 단계에서는 하나 이상의 신호를 수신할 수도 있습니다. 각 신호에는 목록에 정의된 해당 다음 단계가 있어야 합니다. 대기 기간 동안 신호가 수신되면, 수신된 첫 번째 신호가 처리되고, 그레이터우는 정의된 다음 단계를 실행합니다. 신호가 수신되지 않으면 대기 시간이 종료된 후 정상적으로 작동합니다.

신호로부터 수신된 값은 대기 단계의 출력에 저장되며, 이후 단계에서 논리 연산이나 처리에 사용될 수 있습니다.

:

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

    • 유형: 문자열
    • 설명: 지정된 신호를 수신하면 실행할 단계입니다.

양수인

전체 과정에서 사용할 변수를 정의하는 단계입니다. 이 단계에서는 후속 단계에서 참조할 수 있는 변수에 값을 할당합니다. 모든 변수를 한 곳에 정의함으로써, 이 단계 유형은 도표우를 더욱 읽기 쉽고 최적화되게 만듭니다.

샘플 워크플로우:

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

전체 예시

캘린더 데모

입력, 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 }}
Copyright © 2026 New Relic Inc.

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