함수 프레임워크로 함수 실행
Cloud Run 함수는 오픈소스 함수 프레임워크 라이브러리를 사용하여 배포된 함수를 영구 HTTP 애플리케이션으로 래핑합니다.
함수 프레임워크는 로컬 머신, 온프레미스 서버, Compute Engine, Cloud Run을 포함하여 언어 자체를 지원하는 다른 플랫폼에서도 실행할 수 있습니다.
종속 항목 설치
함수 디렉터리에서 다음 언어에 맞는 Functions 프레임워크 라이브러리를 설치합니다.
자세한 내용은 자바 Functions 프레임워크 라이브러리를 참조하세요.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
자바
Maven
Maven을 사용하는 경우 pom.xml
파일에 다음을 추가합니다.
Gradle
Gradle을 사용하는 경우 build.gradle
파일에 다음을 추가합니다.
C#
아래 명령어는 .NET 템플릿을 사용하여 새 .NET Cloud Run 함수 코드베이스를 생성하고 .NET Functions 프레임워크 라이브러리를 종속 항목으로 추가합니다.
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
Ruby에서 함수 프레임워크를 Cloud Run Functions에 배포하기 위해 함수의 종속 항목에 추가해야 합니다.
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Functions 프레임워크 구성
Functions 프레임워크를 사용하여 함수를 실행하기 전에 먼저 실행할 함수의 유형과 이름을 모두 지정해야 합니다. 이러한 속성은 명령줄 인터페이스(CLI) 플래그 또는 환경 변수로 지정할 수 있습니다.
지원되는 함수 유형
Functions 프레임워크는 Cloud Run Functions 1세대에서 지원하는 세 가지 유형의 함수를 모두 지원합니다. 모든 언어 런타임은 http
및 event
또는 cloudevent
중 하나를 지원합니다.
함수 유형 | 서명 유형 | 설명 | 런타임 지원 |
---|---|---|---|
HTTP 트리거 함수 |
http
|
HTTP 요청을 수신하고 응답하는 함수입니다. | 모든 런타임 |
백그라운드 함수 |
event
|
Cloud Run 함수 관련 이벤트 형식 | Node.js, Python, Go, Java |
CloudEvent 함수 |
cloudevent
|
업계 표준 이벤트 형식 | .NET, Ruby, PHP |
실행할 함수 지정
Functions 프레임워크를 사용하여 함수를 실행하기 전에 먼저 코드 내에서 실행할 함수를 지정해야 합니다. 대부분의 언어에서는 아래 표에 나온 대로 대상 함수의 메서드 이름을 지정하면 됩니다. 자바 및 .NET과 같은 이 규칙의 예외도 아래에 나와 있습니다.
언어별 안내
각 언어에서 지원하는 구성 옵션 목록은 아래 표를 참조하세요.
Node.js
CLI 인수 | 환경 변수 | 설명 |
---|---|---|
--port
|
PORT
|
요청을 리슨할 포트입니다. (기본값: 8080 )
|
--target
|
FUNCTION_TARGET
|
호출하기 위해 export 한 함수의 이름입니다. (기본값: function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
함수에서 사용되는 서명 유형으로, http (기본값), event , cloudevent 중 하나일 수 있습니다.
|
Python
CLI 인수 | 환경 변수 | 설명 |
---|---|---|
--port
|
PORT
|
요청을 리슨할 포트입니다. (기본값: 8080 )
|
--target
|
FUNCTION_TARGET
|
호출하기 위해 export 한 함수의 이름입니다. (기본값: function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
함수에서 사용되는 서명 유형으로, http (기본값), event , cloudevent 중 하나일 수 있습니다.
|
Go
환경 변수 | 설명 |
---|---|
PORT
|
요청을 리슨할 포트입니다. (기본값: 8080 )
|
자바
인수 이름 | 환경 변수 | 설명 |
---|---|---|
run.port
|
PORT
|
요청을 리슨할 포트입니다. (기본값: 8080 )
|
run.functionTarget
|
FUNCTION_TARGET
|
호출하기 위해 export 한 함수의 이름입니다. (기본값: function )
|
C#
CLI 인수 | 환경 변수 | 설명 |
---|---|---|
--port
|
PORT
|
요청을 리슨할 포트입니다. (기본값: 8080 )
|
--target (또는 인수만)
|
FUNCTION_TARGET
|
호출할 함수의 classname입니다. (기본값: function )
|
Ruby
CLI 인수 | 환경 변수 | 설명 |
---|---|---|
--port
|
PORT
|
요청을 리슨할 포트입니다. (기본값: 8080 )
|
--target
|
FUNCTION_TARGET
|
호출하기 위해 export 한 함수의 이름입니다. (기본값: function )
|
PHP
환경 변수 | 설명 |
---|---|
FUNCTION_TARGET
|
호출할 함수의 이름입니다. (기본값: function )
|
FUNCTION_SIGNATURE_TYPE
|
함수에서 사용되는 서명 유형으로, http (기본값), event , cloudevent 중 하나일 수 있습니다.
|
Functions 프레임워크를 구성 및 실행하려면 다음 안내를 따르세요.
Node.js
Node.js Functions 프레임워크를 사용하면 함수의 이름과 서명 유형을 명령줄 인수 또는 환경 변수로 지정할 수 있습니다.
아래 예시와 같이 필요한 CLI 인수로 start
스크립트를 추가하여 package.json
빌드 파일에서 이러한 값을 지정할 수도 있습니다.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
환경 변수를 사용하여 동일한 작업을 할 수도 있습니다.
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
위의 표와 같이 YOUR_FUNCTION_NAME을 함수의 메서드 이름으로, YOUR_SIGNATURE_TYPE(해당하는 경우)을 함수의 서명 유형으로 바꿉니다.
Python
Python Functions 프레임워크를 사용하면 함수의 이름과 서명 유형을 명령줄 인수 또는 환경 변수로 지정할 수 있습니다. 프레임워크를 실행할 때 명령줄 인수를 지정해야 합니다.
Go
Go Functions 프레임워크는 funcframework.RegisterHTTPFunctionContext
을 사용하여 함수 대상 및 서명 유형을 지정합니다.
자바
자바 Functions 프레임워크는 세 가지 다른 소스의 구성 데이터를 가장 구체적인 데이터부터 순서대로 허용합니다.
- 명령줄 인수
- 빌드 파일
- 환경 변수
명령줄 인수
Maven
mvn
명령어에 다음 명령줄 인터페이스(CLI)를 추가하여 실행할 함수를 지정할 수 있습니다.
-Drun.functionTarget=YOUR_FUNCTION_NAME
다음 CLI 플래그도 유사한 방법으로 추가하여 대상 포트를 지정할 수도 있습니다.
-Drun.port=12345
Gradle
Gradle의 CLI 플래그는 Maven의 플래그와 거의 동일합니다. Gradle이 유일하게 변경하는 사항은 아래 예시와 같이 각 플래그의 선행 -D
를 -P
로 바꾸는 것입니다.
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
빌드 파일
프로젝트의 빌드 파일에서 실행할 함수를 지정할 수도 있습니다. Maven 및 Gradle에는 유사한 CLI 플래그가 있지만 빌드 파일 절은 크게 다릅니다.
Maven
Maven 빌드 파일의 이름은 pom.xml
으로 지정됩니다. 이 파일에 다음 절을 추가하여 대상 함수를 지정합니다.
<functionTarget>
을 함수의 클래스 이름으로 바꿉니다. (예를 들어 클래스 이름이 HelloCloudFunctions
인 패키지 functions
의 함수는 functions.HelloCloudFunctions
라는 클래스 이름을 가집니다. 이는 상위 빌드 파일(pom.xml
또는 build.gradle
)을 기준으로 합니다.)
Gradle
Gradle 빌드 파일의 이름은 build.gradle
로 지정됩니다. 이 파일에 다음 절을 추가하여 대상 함수를 지정합니다.
C#
dotnet new
와 위에서 지정한 템플릿 중 하나를 사용하여 프로젝트를 만들면 .NET Functions 프레임워크가 함수를 자동으로 인식합니다.
프로젝트에 여러 함수가 포함된 경우 특정 함수를 실행하는 방법은 프레임워크 실행 섹션을 참조하세요.
Ruby
Ruby Functions 프레임워크를 사용하면 함수의 이름과 서명 유형을 명령줄 인수 또는 환경 변수로 지정할 수 있습니다. 프레임워크를 실행할 때 명령줄 인수를 지정해야 합니다.
PHP
PHP Functions 프레임워크를 사용하면 환경 변수를 명령줄 인수로 지정할 수 있습니다.
아래 예시와 같이 start
스크립트를 추가하여 composer.json
빌드 파일에서 이러한 값을 지정할 수도 있습니다.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
위 표와 같이 YOUR_FUNCTION_NAME를 함수의 이름으로 바꾸고 YOUR_SIGNATURE_TYPE(해당하는 경우)을 함수의 서명 유형으로 바꿉니다.
함수 프레임워크 실행
Functions 프레임워크를 사용하여 함수를 실행하려면 다음 명령어를 사용합니다.
PORT
값을 명시적으로 지정한 경우를 제외하고 기본적으로 localhost:8080
에서 함수에 액세스할 수 있습니다.
Node.js
npm start
Python
명령줄 인수를 사용합니다.
functions-framework --target=YOUR_FUNCTION_NAME
환경 변수를 사용합니다.
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
YOUR_FUNCTION_NAME을 함수의 메서드 이름으로 바꿉니다.
Go
cd cmd go build ./cmd
환경 변수를 사용합니다.
cd cmd go build PORT=8080 ./cmd
자바
Maven
다음 명령어를 사용하여 pom.xml
에 지정된 함수를 실행합니다.
mvn function:run
다음 명령어를 사용하여 명령줄 인수에 지정된 함수를 실행합니다.
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
다음 명령어를 사용하여 환경 변수로 지정된 함수를 실행합니다.
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
YOUR_FUNCTION_NAME을 함수의 클래스 이름으로 바꿉니다.
Gradle
다음 명령어를 사용하여 build.gradle
에 지정된 함수를 실행합니다.
./gradlew runFunction
다음 명령어를 사용하여 명령줄 인수에 지정된 함수를 실행합니다.
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
다음 명령어를 사용하여 환경 변수로 지정된 함수를 실행합니다.
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
YOUR_FUNCTION_NAME을 함수의 클래스 이름으로 바꿉니다.
C#
현재 .NET 프로젝트에 정확히 하나의 함수가 있으면 다음 명령어를 사용하여 함수를 실행합니다. 이는 템플릿으로 만든 프로젝트의 기본 구조입니다.
dotnet run
.NET 프로젝트에 여러 함수가 포함된 경우 다음 명령어를 사용하여 특정 함수를 실행합니다. YOUR_FUNCTION_CLASSNAME을 함수의 클래스 이름(네임스페이스 포함)으로 바꿉니다.
dotnet run YOUR_FUNCTION_CLASSNAME
여러 함수를 동시에 실행하려면 여러 Functions 프레임워크 인스턴스를 실행해야 합니다. 여러 프레임워크 인스턴스 실행할 때 충돌을 방지하려면 각 인스턴스가 다른 PORT
값을 사용해야 합니다. 다음 명령어를 PORT
값이 8080
인 함수를 실행하는 방법을 보여줍니다.
명령줄 인수를 사용합니다.
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
환경 변수를 사용합니다.
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
명령줄 인수를 사용합니다.
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
환경 변수를 사용합니다.
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
YOUR_FUNCTION_NAME을 함수의 메서드 이름으로 바꿉니다.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
YOUR_FUNCTION_NAME을 함수의 이름으로 바꿉니다.
함수 호출
로컬 실행 함수와 상호작용하는 방법에 대한 안내는 로컬 함수 호출 페이지를 참조하세요.
삭제
함수 실행을 완료했으면 Control+C를 눌러 실행 중인 프레임워크 인스턴스를 중지합니다.