이 페이지에서는 Functions 프레임워크를 사용하여 함수를 작성하는 방법을 소개합니다.
Cloud Run용 함수 소스 코드를 작성할 때는 Cloud Run 함수를 작성하기 위한 오픈소스 라이브러리인 함수 프레임워크를 사용해야 합니다. 함수 프레임워크를 사용하면 Cloud Run 및 로컬 개발 머신, Knative 기반 환경을 비롯한 다른 환경에서 실행되는 가벼운 함수를 작성할 수 있습니다.
Functions 프레임워크를 사용하면 다음 작업을 할 수 있습니다.
- 요청에 대한 응답으로 함수를 호출합니다.
- 이벤트 데이터를 일반적인 방식으로 설명하기 위한 업계 표준 사양인 CloudEvents 사양에 따라 자동으로 이벤트 마셜링 취소
- 빠른 테스트를 위해 로컬 개발 서버를 시작합니다.
Functions 프레임워크로 함수 작성
Functions 프레임워크는 모듈식 서비스를 빌드하기 위한 인터페이스를 제공합니다. 소스 코드에서 Functions 프레임워크를 사용하려면 다음을 지정합니다.
함수 진입점
소스 코드는 Cloud Run 함수가 호출될 때 실행되는 특정 코드인 함수의 진입점을 정의해야 합니다. 함수를 배포할 때 이 진입점을 지정합니다.
진입점을 정의하는 방법은 사용되는 언어 런타임에 따라 달라집니다. 일부 언어에서는 진입점이 함수이고, 다른 언어에서는 진입점이 클래스입니다.
서명 유형
Functions 프레임워크로 함수의 소스 코드를 작성할 때는 다음 두 가지 서명 유형 중 하나를 지정해야 합니다.
- HTTP 함수: HTTP 핸들러 함수를 등록하는 함수입니다. 자세한 내용은 HTTP 함수 작성을 참고하세요.
- CloudEvents 함수 (이벤트 기반 함수라고도 함): CloudEvents 핸들러 함수를 등록하는 함수입니다. 자세한 내용은 CloudEvents 함수 작성을 참고하세요.
함수가 URL 엔드포인트를 포함하고 웹훅과 같은 HTTP 요청에 응답하도록 하려면 HTTP 함수를 사용합니다. Pub/Sub 주제에 대한 메시지 또는 Cloud Storage 버킷의 변경사항 등Google Cloud 프로젝트 내에서 이벤트에 대한 응답으로 함수를 직접 트리거해야 하는 경우 CloudEvents 함수를 사용합니다.
소스 디렉터리 구조
Functions 프레임워크는 여러 프로그래밍 언어에서 지원됩니다. 선택한 언어 런타임 및 작성하려는 함수 유형에 따라 코드 구성 및 함수 구현 방법이 결정됩니다.
Cloud Run이 함수 정의를 찾을 수 있도록 각 언어 런타임에 소스 코드 구성에 관한 요구사항이 있습니다.
Node.js
Node.js 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── index.js └── package.json
기본적으로 Cloud Run은 함수 디렉터리 루트에 있는 index.js
파일에서 소스 코드를 로드하려고 시도합니다. 다른 기본 소스 파일을 지정하려면 package.json
파일에서 main
필드를 사용합니다.
또한 package.json
파일에는 Node.js용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
기본 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 Node.js 모듈을 가져올 수 있습니다. 기본 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 Node.js 런타임 개요 및 Node.js용 함수 프레임워크를 참고하세요.
Python
Python 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── main.py └── requirements.txt
Cloud Run은 함수 디렉터리의 루트에 있는 main.py
라는 파일에서 소스 코드를 로드합니다. 기본 파일 이름은 main.py
여야 합니다.
requirements.txt
파일에는 Python용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
functions-framework==3.*
main.py
파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. main.py
파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 Python 런타임 개요 및 Python용 함수 프레임워크를 참고하세요.
Go
Go 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── myfunction.go └── go.mod
함수는 프로젝트 루트의 Go 패키지에 있어야 합니다. 패키지 및 소스 파일에는 이름 제한이 없습니다. 단 함수는 package main
에 있을 수 없습니다. 로컬 테스트와 같이 main
패키지가 필요한 경우 하위 디렉터리에 패키지를 만들 수 있습니다.
. ├── myfunction.go ├── go.mod └── cmd/ └── main.go
go.mod
파일에는 Go용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
루트 패키지의 코드는 함수 진입점을 정의해야 하고 하위 패키지의 다른 코드 및 종속 항목을 일반적으로 가져올 수 있습니다. 패키지는 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 Go 런타임 개요 및 Go용 함수 프레임워크를 참고하세요.
자바
자바 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── pom.xml └── src/ └── main/ └── java/ └── MyFunction.java
자바 소스 파일은 src/main/java/
디렉터리에 있어야 하고 이름 제한이 없습니다. 소스 파일이 패키지를 선언할 경우 패키지 이름을 사용해서 src/main/java
아래에 여분의 디렉터리를 추가합니다.
. ├── pom.xml └── src/ └── main/ └── java/ └── mypackage/ └── MyFunction.java
src/test/java/
하위 디렉터리 아래에 연관된 테스트를 배치하는 것이 좋습니다.
pom.xml
파일에는 자바용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
...
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.0.4</version>
</dependency>
...
소스 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. 소스 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 Java 런타임 개요 및 Java용 Functions 프레임워크를 참고하세요.
.NET
.NET 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── MyFunction.cs └── MyProject.csproj
다른 .NET 소스 코드와 마찬가지로 프로젝트를 구성할 수 있습니다. 소스 파일에는 이름 제한이 없습니다.
프로젝트 파일에는 .NET용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
...
<PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...
소스 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. 소스 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 .NET 런타임 개요 및 .NET용 함수 프레임워크를 참고하세요.
Ruby
Ruby 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run은 함수 디렉터리의 루트에 있는 app.rb
라는 파일에서 소스 코드를 로드합니다. 기본 파일 이름은 app.rb
여야 합니다.
Gemfile
파일에는 Ruby용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
app.rb
파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. app.rb
파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 Ruby 런타임 개요 및 Ruby용 함수 프레임워크를 참고하세요.
PHP
PHP 함수의 기본 디렉터리 구조는 다음과 같습니다.
. ├── index.php └── composer.json
Cloud Run은 함수 디렉터리의 루트에 있는 index.php
라는 파일에서 소스 코드를 로드합니다. 기본 파일 이름은 index.php
여야 합니다.
composer.json
파일에는 PHP용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
index.php
파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. index.php
파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.
자세한 내용은 PHP 런타임 개요 및 PHP용 함수 프레임워크를 참고하세요.
여러 함수를 단일 프로젝트로 그룹화하면 모든 함수가 동일한 종속 항목 집합을 공유하게 될 수 있습니다. 그러나 일부 함수에는 모든 종속 항목이 필요하지 않을 수 있습니다.
가능하면 대규모 다기능 코드베이스를 분할하고 위의 예와 같이 자체 소스 및 프로젝트 구성 파일과 함께 각 함수를 자체 최상위 디렉터리에 배치하는 것이 좋습니다. 이렇게 하면 특정 함수에 필요한 종속 항목의 수를 최소화하여 함수에 필요한 메모리 양이 줄어듭니다.
다음 단계
- HTTP 함수 구현
- CloudEvents 함수 구현
- 함수 프레임워크 계약 알아보기