11.4. Python 함수 개발

중요

Python을 사용한 OpenShift Serverless Functions는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

Python 함수 프로젝트를 생성한 후에는 제공된 템플릿 파일을 수정하여 비즈니스 로직을 함수에 추가할 수 있습니다. 여기에는 함수 호출 구성 및 반환된 헤더 및 상태 코드가 포함됩니다.

11.4.1. 사전 요구 사항

11.4.2. Python 함수 템플릿 구조

Knative(kn) CLI를 사용하여 Python 함수를 생성할 때 프로젝트 디렉터리는 일반적인 Python 프로젝트와 유사합니다. Python 함수는 약간의 제한 사항이 있습니다. 유일한 요구 사항은 프로젝트에 main() 함수와 func.yaml 구성 파일이 포함된 func.py 파일이 포함되어 있다는 것입니다.

개발자는 템플릿 requirements.txt 파일에 제공된 종속성으로 제한되지 않습니다. 추가 종속 항목은 다른 Python 프로젝트에서 추가될 수 있습니다. 프로젝트가 배포용으로 빌드되면 이러한 종속성이 생성된 런타임 컨테이너 이미지에 포함됩니다.

httpevent 트리거 함수 모두 동일한 템플릿 구조를 갖습니다.

템플릿 구조

fn
├── func.py 1
├── func.yaml 2
├── requirements.txt 3
└── test_func.py 4

1
main() 함수를 포함합니다.
2
이미지 이름과 레지스트리를 결정하는 데 사용됩니다.
3
다른 Python 프로젝트에 있는 것처럼 requirements.txt 파일에 기타 종속 항목을 추가할 수 있습니다.
4
함수의 로컬 테스트에 사용할 수 있는 간단한 단위 테스트가 포함되어 있습니다.

11.4.3. Python 함수 호출 정보

Python 함수는 간단한 HTTP 요청으로 호출할 수 있습니다. 들어오는 요청이 수신되면 context 오브젝트를 첫 번째 매개 변수로 사용하여 함수가 호출됩니다.

context 오브젝트는 두 개의 속성이 있는 Python 클래스입니다.

  • request 속성은 항상 존재하며 Flask request 오브젝트를 포함합니다.
  • 들어오는 요청이 CloudEvent 오브젝트인 경우 두 번째 속성 cloud_event가 채워집니다.

개발자는 컨텍스트 오브젝트에서 모든 CloudEvent 데이터에 액세스할 수 있습니다.

컨텍스트 오브젝트의 예

def main(context: Context):
    """
    The context parameter contains the Flask request object and any
    CloudEvent received with the request.
    """
    print(f"Method: {context.request.method}")
    print(f"Event data {context.cloud_event.data}")
    # ... business logic here

11.4.4. Python 함수 반환 값

함수는 Flask 에서 지원하는 모든 값을 반환할 수 있습니다. 호출 프레임워크가 이러한 값을 Flask 서버에 직접 프록시하기 때문입니다.

예제

def main(context: Context):
    body = { "message": "Howdy!" }
    headers = { "content-type": "application/json" }
    return body, 200, headers

함수는 함수 호출에서 헤더와 응답 코드를 모두 2차 및 3차 응답 값으로 설정할 수 있습니다.

11.4.4.1. CloudEvents 반환

개발자는 @event 데코레이터를 사용하여 응답을 보내기 전에 함수 반환 값을 CloudEvent로 변환해야 함을 호출자에게 알릴 수 있습니다.

@event("event_source"="/my/function", "event_type"="my.type")
def main(context):
    # business logic here
    data = do_something()
    # more data processing
    return data

이 예제에서는 "my.type" 유형과 "/my/function" 소스를 사용하여 CloudEvent를 응답 값으로 보냅니다. CloudEvent data 속성은 반환된 data 변수로 설정됩니다. event_sourceevent_type 데코레이터 속성은 선택 사항입니다.

11.4.5. Python 함수 테스트

컴퓨터에서 Python 함수를 로컬로 테스트할 수 있습니다. 기본 프로젝트에는 기능에 대한 간단한 단위 테스트를 제공하는 test_proxyc.py 파일이 포함되어 있습니다.

참고

Python 함수의 기본 테스트 프레임워크는 unittest입니다. 필요에 따라 다른 테스트 프레임워크를 사용할 수 있습니다.

사전 요구 사항

  • Python 함수 테스트를 로컬에서 실행하려면 필요한 종속 항목을 설치해야 합니다.

    $ pip install -r requirements.txt

프로세스

  1. test_func.py 파일이 포함된 함수의 폴더로 이동합니다.
  2. 테스트를 실행합니다.

    $ python3 test_func.py

11.4.6. 다음 단계