4.6.7. 테스트 이벤트를 사용하여 배포된 함수 호출

kn func invoke CLI 명령을 사용하여 로컬에서 또는 OpenShift Container Platform 클러스터에서 함수를 호출하기 위해 테스트 요청을 보낼 수 있습니다. 이 명령을 사용하여 함수가 작동하고 이벤트를 올바르게 수신할 수 있는지 테스트할 수 있습니다. 함수를 로컬로 호출하면 함수 개발 중에 빠른 테스트에 유용합니다. 클러스터에서 함수를 호출하면 프로덕션 환경에 더 가까운 테스트에 유용합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • 호출하려는 함수를 이미 배포해야 합니다.

절차

  • 함수를 호출합니다.

    $ kn func invoke
    • kn func invoke 명령은 현재 실행 중인 로컬 컨테이너 이미지가 있거나 클러스터에 배포된 함수가 있는 경우에만 작동합니다.
    • kn func invoke 명령은 기본적으로 로컬 디렉터리에서 실행되며 이 디렉터리는 함수 프로젝트라고 가정합니다.

4.6.7.1. kn func invoke 선택적 매개 변수

kn func invoke CLI 명령 플래그를 사용하여 요청에 대한 선택적 매개변수를 지정할 수 있습니다.

플래그설명

-t,--target

호출된 함수의 대상 인스턴스를 지정합니다(예: 로컬 또는 원격 또는 https://staging.example.com/). 기본 대상은 로컬 입니다.

-f, --format

메시지 형식을 지정합니다(예: cloudevent 또는 http ).

--id

요청에 대한 고유 문자열 식별자를 지정합니다.

-n,--namespace

클러스터의 네임스페이스를 지정합니다.

--source

요청의 발신자 이름을 지정합니다. 이는 CloudEvent 소스 속성에 해당합니다.

--type

요청 유형을 지정합니다(예: boson.fn ). 이는 CloudEvent 유형 속성에 해당합니다.

--data

요청에 대한 콘텐츠를 지정합니다. CloudEvent 요청의 경우 CloudEvent data 속성입니다.

--file

보낼 데이터를 포함하는 로컬 파일의 경로를 지정합니다.

--content-type

요청에 대한 MIME 콘텐츠 형식을 지정합니다.

-p, --path

프로젝트 디렉터리의 경로를 지정합니다.

-c, --confirm

모든 옵션을 대화형으로 확인하도록 프롬프트를 활성화합니다.

-v,--verbose

자세한 출력을 인쇄할 수 있습니다.

-h, --help

kn func invoke 사용에 대한 정보를 출력합니다.

4.6.7.1.1. 기본 매개변수

다음 매개 변수는 kn func invoke 명령의 기본 속성을 정의합니다.

이벤트 대상(-t,--target)
호출된 함수의 대상 인스턴스입니다. 로컬 로 배포된 함수의 로컬 값, 원격 으로 배포된 함수의 원격 값 또는 임의의 엔드포인트에 배포된 함수의 URL을 수락합니다. 대상을 지정하지 않으면 기본값은 local 입니다.
이벤트 메시지 형식(-f,--format)
이벤트의 메시지 형식(예: http 또는 cloudevent ). 이 기본값은 함수를 만들 때 사용된 템플릿 형식입니다.
이벤트 유형 (--type)
전송된 이벤트 유형입니다. 각 이벤트 프로듀서에 대한 문서에 설정된 type 매개변수에 대한 정보를 찾을 수 있습니다. 예를 들어 API 서버 소스는 생성된 이벤트의 type 매개변수를 dev.knative.apiserver.resource.update 로 설정할 수 있습니다.
이벤트 소스(--source)
이벤트를 생성한 고유한 이벤트 소스입니다. 이벤트 소스의 URI(예: https://10.96.0.1/) 또는 이벤트 소스의 이름일 수 있습니다.
이벤트 ID(--id)
이벤트 프로듀서에 의해 생성되는 임의의 고유 ID입니다.
이벤트 데이터(--data)

kn func invoke 명령에서 보낸 이벤트에 대한 데이터 값을 지정할 수 있습니다. 예를 들어 이벤트에 이 데이터 문자열이 포함되도록 "Hello World" 와 같은 --data 값을 지정할 수 있습니다. 기본적으로 kn func invoke 에서 생성한 이벤트에는 데이터가 포함되지 않습니다.

참고

클러스터에 배포된 함수는 sourcetype과 같은 속성 값을 제공하는 기존 이벤트 소스의 이벤트에 응답할 수 있습니다. 이러한 이벤트에는 종종 이벤트의 도메인별 컨텍스트를 캡처하는 JSON 형식의 data 값이 있습니다. 개발자는 이 문서에 명시된 CLI 플래그를 사용하여 로컬 테스트를 위해 해당 이벤트를 시뮬레이션할 수 있습니다.

이벤트 데이터를 포함하는 로컬 파일을 제공하기 위해 --file 플래그를 사용하여 이벤트 데이터를 보낼 수도 있습니다. 이 경우 --content-type 을 사용하여 콘텐츠 유형을 지정합니다.

데이터 콘텐츠 유형 (--content-type)
--data 플래그를 사용하여 이벤트에 대한 데이터를 추가하는 경우 --content-type 플래그를 사용하여 이벤트에서 전달하는 데이터 유형을 지정할 수 있습니다. 이전 예에서 데이터는 일반 텍스트이므로 kn func invoke --data "Hello world!" --content-type "text/plain" 을 지정할 수 있습니다.
4.6.7.1.2. 명령 예

이는 kn func invoke 명령을 일반적인 호출입니다.

$ kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>

예를 들어 "Hello world!" 이벤트를 보내려면 다음을 실행할 수 있습니다.

$ kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
4.6.7.1.2.1. 데이터로 파일 지정

이벤트 데이터가 포함된 디스크에서 파일을 지정하려면 --file--content-type 플래그를 사용합니다.

$ kn func invoke --file <path> --content-type <content-type>

예를 들어 test.json 파일에 저장된 JSON 데이터를 보내려면 다음 명령을 사용하십시오.

$ kn func invoke --file ./test.json --content-type application/json
4.6.7.1.2.2. 함수 프로젝트 지정

--path 플래그를 사용하여 함수 프로젝트의 경로를 지정할 수 있습니다.

$ kn func invoke --path <path_to_function>

예를 들어 ./example/example-function 디렉터리에 있는 function 프로젝트를 사용하려면 다음 명령을 사용하십시오.

$ kn func invoke --path ./example/example-function
4.6.7.1.2.3. 대상 함수의 배포 위치 지정

기본적으로 kn func invoke 는 함수의 로컬 배포를 대상으로 합니다.

$ kn func invoke

다른 배포를 사용하려면 --target 플래그를 사용합니다.

$ kn func invoke --target <target>

예를 들어 클러스터에 배포된 함수를 사용하려면 --target 원격 플래그를 사용합니다.

$ kn func invoke --target remote

임의의 URL에 배포된 함수를 사용하려면 --target <URL> 플래그를 사용합니다.

$ kn func invoke --target "https://my-event-broker.example.com"

로컬 배포를 명시적으로 대상으로 할 수 있습니다. 이 경우 함수가 로컬로 실행되지 않으면 명령이 실패합니다.

$ kn func invoke --target local