Cloud Functions 작성

Cloud Functions는 많은 프로그래밍 언어에서 소스 코드 작성을 지원합니다. 선택한 언어 런타임 및 작성하려는 함수 유형에 따라 코드 구성 및 함수 구현 방법이 결정됩니다. 이 페이지에서는 Cloud Functions 유형 및 소스 코드 요구사항에 대해 간략히 설명합니다.

Cloud Functions 유형

Cloud Functions에는 다음과 같은 두 가지 유형이 있습니다.

  • HTTP 함수는 HTTP 요청을 처리하고 HTTP 트리거를 사용합니다. HTTP 함수 구현에 대한 자세한 내용은 HTTP 함수 작성을 참조하세요.

  • 이벤트 기반 함수는 클라우드 환경에서 이벤트를 처리하고 Cloud Functions 트리거에 설명된 대로 이벤트 트리거를 사용합니다. 이벤트 기반 함수 구현에 대한 자세한 내용은 이벤트 기반 함수 작성을 참조하세요.

함수가 URL 엔드포인트를 포함하고 웹훅과 같은 HTTP 요청에 응답하도록 하려면 HTTP 함수를 사용합니다. Pub/Sub 주제에 대한 메시지 또는 Cloud Storage 버킷의 변경사항 등 Google Cloud 프로젝트 내에서 이벤트에 대한 응답으로 함수를 직접 트리거해야 하는 경우 이벤트 기반 함수를 사용합니다.

소스 디렉터리 구조

Cloud Functions가 함수 정의를 찾을 수 있도록 각 언어 런타임에 소스 코드 구성에 관한 요구사항이 있습니다. 각 런타임에서 함수의 기본 디렉터리 구조는 다음과 같습니다.

Node.js

Node.js 함수의 기본 디렉터리 구조는 다음과 같습니다.

.
├── index.js
└── package.json

기본적으로 Cloud Functions는 함수 디렉터리 루트에 있는 index.js 파일에서 소스 코드를 로드하려고 시도합니다. 다른 기본 소스 파일을 지정하려면 package.json 파일에서 main 필드를 사용합니다.

또한 package.json 파일에는 Node.js용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.

{
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0"
  }
}

기본 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 Node.js 모듈을 일반적으로 가져올 수 있습니다. 기본 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

Python

Python 함수의 기본 디렉터리 구조는 다음과 같습니다.

.
├── main.py
└── requirements.txt

Cloud Functions는 함수 디렉터리의 루트에 있는 main.py라는 파일에서 소스 코드를 로드합니다. 기본 파일 이름은 main.py여야 합니다.

requirements.txt 파일에는 Python용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.

functions-framework==3.*

main.py 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. main.py 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

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
)

루트 패키지의 코드는 함수 진입점을 정의해야 하고 하위 패키지의 다른 코드 및 종속 항목을 일반적으로 가져올 수 있습니다. 패키지는 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

자바

자바 함수의 기본 디렉터리 구조는 다음과 같습니다.

.
├── 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>
...

소스 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. 소스 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

C#

.NET 함수의 기본 디렉터리 구조는 다음과 같습니다.

.
├── MyFunction.cs
└── MyProject.csproj

다른 .NET 소스 코드와 마찬가지로 프로젝트를 구성할 수 있습니다. 소스 파일에는 이름 제한이 없습니다.

프로젝트 파일에는 .NET용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.

...
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...

소스 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. 소스 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

또한 .NET용 Cloud Functions 템플릿 패키지를 사용하여 필요한 파일을 생성할 수 있습니다.

Ruby

Ruby 함수의 기본 디렉터리 구조는 다음과 같습니다.

.
├── app.rb
├── Gemfile
└── Gemfile.lock

Cloud Functions는 함수 디렉터리의 루트에 있는 app.rb라는 파일에서 소스 코드를 로드합니다. 기본 파일 이름은 app.rb여야 합니다.

Gemfile 파일에는 Ruby용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.

source "https://rubygems.org"
gem "functions_framework", "~> 1.0"

app.rb 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. app.rb 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

PHP

PHP 함수의 기본 디렉터리 구조는 다음과 같습니다.

.
├── index.php
└── composer.json

Cloud Functions는 함수 디렉터리의 루트에 있는 index.php라는 파일에서 소스 코드를 로드합니다. 기본 파일 이름은 index.php여야 합니다.

composer.json 파일에는 PHP용 함수 프레임워크가 종속 항목으로 포함되어야 합니다.

{
  "require": {
    "google/cloud-functions-framework": "^1.1"
  }
}

index.php 파일의 코드는 함수 진입점을 정의해야 하고 다른 코드 및 외부 종속 항목을 일반적으로 가져올 수 있습니다. index.php 파일은 또한 개별적으로 배포할 수 있는 여러 함수 진입점을 정의할 수 있습니다.

여러 함수를 단일 프로젝트로 그룹화하려는 경우 모든 함수가 동일한 종속 항목 집합을 공유하게 될 수 있습니다. 그러나 일부 함수에는 모든 종속 항목이 필요하지 않을 수 있습니다.

가능하면 대규모 다기능 코드베이스를 분할하고 위에 표시된 것처럼 자체 소스 및 프로젝트 구성 파일과 함께 각 함수를 자체 최상위 디렉터리에 배치하는 것이 좋습니다. 이렇게 하면 특정 함수에 필요한 종속 항목의 수를 최소화하여 함수에 필요한 메모리 양이 줄어듭니다.

함수 진입점

소스 코드는 Cloud 함수가 호출될 때 실행되는 특정 코드인 함수의 진입점을 정의해야 합니다. 함수를 배포할 때 이 진입점을 지정합니다.

진입점을 정의하는 방법은 사용되는 언어 런타임에 따라 달라집니다. 일부 언어에서는 진입점이 함수이고, 다른 언어에서는 진입점이 클래스입니다. 여러 언어에서 진입점 정의 및 Cloud Functions 구현에 대해 자세히 알아보려면 HTTP 함수 작성이벤트 기반 함수 작성을 참조하세요.

종속 항목

각 런타임의 표준 도구를 사용하여 종속 항목을 관리할 수 있습니다. 자세한 내용은 해당 페이지를 참조하세요.

다음 단계