Cloud Functions
Cloud Functions는 이벤트가 발생할 때 특정 코드를 실행할 수 있도록 하는 서비스이다.
서버, 확장성, 또는 가용성을 관리할 필요 없이 이벤트에 반응하는 코드를 실행할 수 있다.
그리고 서버리스로 동작하기 때문에 인프라 관리 없이 코드에만 집중할 수 있고, 수백만 개의 메시지가 큐에 도착하더라도 자동으로 확장되어 처리한다.
GCP의 Cloud Functino에서 환경을 통해 세대를 정할 수 있는데 최신 세대일수록 고급 기능을 더 많이 제공한다.
함수 만들기를 진행하면 위와 같이 어떤 동작을 실행할지 코드를 넣을 수 있다.
이때 사용가능한 언어는 Node.js, Python, Go, Java, .NET, Ruby 등 다양한 프로그래밍 언어를 지원한다.
Cloud Functions의 활용 사례
Cloud Storage: 객체 스토리지에 파일 업로드
Cloud Logging: 로깅 서비스에 오류 로그 기록
Cloud Pub/Sub: 메시지가 큐에 도착
HTTP/HTTPS 요청: URL 호출
과금 모델
사용량 기반 과금으로 실행 횟수당, 실행 시간에 따라, 메모리 및 CPU 프로비저닝에 따른 과금이 발생한다.
Cloud Functions의 제품 버전
1세대
초기 버전의 Cloud Functions.
2세대
Cloud Run 및 Eventarc 기반으로 구축된 최신 버전으로 더 많은 기능과 향상된 성능 제공한다.
Google Cloud는 2세대 Cloud Functions 사용을 권장한다.
2세대 Cloud Functions의 주요 개선점
더 긴 요청 타임아웃
HTTP를 통한 요청 처리 시 최대 3,600초까지 실행 가능하여 1세대보다 6배 긴 타임아웃 제공한다.
더 큰 인스턴스 크기
최대 16GB 메모리와 4개의 가상 CPU 지원한다.
동시성(Concurrency) 지원
1세대에서는 각 인스턴스가 한 번에 하나의 요청만 처리 가능하지만, 2세대에서는 한 인스턴스가 최대 1,000개의 요청을 동시에 처리 가능하다.
Cloud Run 기반 기능
- 리비전(Revision): Cloud Function의 버전을 관리 가능하다.
- 트래픽 분할: 여러 리비전에 트래픽을 분배 가능하다.
더 많은 이벤트 지원
HTTP 요청 외에도 다양한 이벤트 소스를 트리거로 사용 가능하다.
이벤트
이벤트는 발생한 특정 상황을 의미한다.
예를들어 Cloud Storage에서 객체가 업로드되거나, HTTP 또는 HTTPS 호출이 발생하거나, Cloud Pub/Sub에 메시지가 큐에 도착하는 상황을 의미한다.
트리거
트리거는 이벤트 발생 시 어떤 함수가 실행될지를 결정한다.
이벤트가 발생하면, 해당 이벤트에 대응하는 특정 함수가 호출된다.
함수
함수는 이벤트 데이터를 받아 원하는 작업을 수행하는 코드로 Cloud Storage에 업로드된 파일을 처리하거나, HTTP 요청에 응답하거나, Pub/Sub 메시지 처리하는 등의 작업을 한다.
함수의 역할은 이벤트 데이터를 활용해 비즈니스 로직을 실행하는 것이다.
Cloud Functions의 트리거 가능 소스
Cloud Storage
객체 업로드, 삭제 등과 같은 이벤트를 기반으로 트리거
Cloud Pub/Sub
메시지가 큐에 도착했을 때 트리거
HTTP 호출
HTTP 요청에 반응해 함수를 실행
Firebase 및 Firestore
Firebase 애플리케이션과 데이터베이스 변경 이벤트에 대응
Stackdriver Logging
로그 기반 이벤트에 반응
Cloud Run
Cloud Run은 컨테이너 애플리케이션을 빠르게 배포할 수 있는 완전 관리형 서버리스 플랫폼이다.
이는 복잡한 클러스터를 생성하거나 서버를 관리할 필요 없이, 컨테이너를 몇 초 안에 프로덕션 환경으로 배포할 수 있다.
Cloud Run의 주요 기능
컨테이너 배포
사전에 빌드된 컨테이너 이미지를 Google Container Registry 또는 Cloud Artifact Registry에서 가져와 배포 또는 소스 코드를 통해 이미지를 빌드하고, 이를 Cloud Run에 배포 가능하다.
서버리스(Serverless)
서버 관리가 불필요하여 서버, 확장성(Scaling), 가용성(Availability) 모두 자동 관리할 수 있다.
자동 확장(Auto-scaling)
요청이 증가하면 컨테이너 인스턴스를 자동으로 확장하고, 요청이 없을 때는 최소 인스턴스를 0으로 설정해 비용을 절감한다.
언어와 플랫폼의 유연성
컨테이너를 사용하기 때문에 언어, 바이너리, 의존성에 제한이 없다.
컨테이너는 다른 클라우드 환경(Kubernetes, App Engine 등)에서도 이식 가능하다.
비용 모델
사용한 만큼만 비용을 지불하고, CPU, 메모리, 요청 시간 및 네트워킹 사용량에 따라 과금한다.
Cloud Run 설정 과정
서비스 만들기
Auto-scaling을 설정하는 부분에서 최소 및 최대 컨테이너 인스턴스 개수를 설정할 수 있는데 최소 인스턴스를 1 이상으로 설정하면 콜드 스타트를 방지할 수 있다.
콜드 스타트는 요청 시 컨테이너가 없을 경우 컨테이너 시작까지 걸리는 시간을 의미하는 것으로 기존 인스턴스가 부족할 경우, 새로운 요청을 처리하기 위해 함수 인스턴스를 초기화해야 하며 이 과정에서 지연이 발생한다.
Cloud Run을 생성하면 URL을 통해서 위처럼 실행 화면을 확인할 수 있다.
Anthos
Anthos는 멀티 클라우드 및 온프레미스 환경에서 쿠버네티스 클러스터를 실행할 수 있도록 지원하는 플랫폼이다.
쿠버네티스 클러스터를 Google Cloud, AWS, Azure 등 여러 클라우드와 온프레미스 환경에서 동시 실행 가능하고, 노드를 다양한 클라우드 및 온프레미스 환경에 분산 배치 가능하다.
Cloud Run과 Anthos의 차이
특징 | Cloud Run | Anthos |
배포 대상 | 컨테이너 애플리케이션 | 쿠버네티스 클러스터 |
환경 | Google Cloud | 멀티 클라우드 및 온프레미스 |
관리 여부 | 완전 관리형 서버리스 | 클러스터 관리 필요 |
사용 사례 | 빠르고 간단한 컨테이너 배포 | 클라우드 및 온프레미스 통합 관리 |
Cloud Run for Anthos
Anthos 클러스터(온프레미스 또는 멀티 클라우드 환경)에 컨테이너 워크로드를 배포하도록 지원한다.
Anthos 환경에서 Cloud Run과 동일한 서버리스 워크로드 배포 경험을 제공한다.
gcloud를 사용한 Cloud Functions 배포
# 기본 명령어
gcloud functions deploy <Cloud_Function_Name>
위의 기본 명령어에 다양한 옵션을 사용하여 배포를 커스터마이징 가능하다.
Docker Registry
각 마이크로서비스별로 별도의 Docker 저장소를 생성 가능하다.
--docker-registry 옵션을 사용하여 Docker 이미지를 저장할 컨테이너 레지스트리를 지정
기본값: Container Registry.
다른 옵션: Artifact Registry.
세대 선택
--gen2: 2세대 Cloud Functions로 배포한다.
명시하지 않으면 1세대 Cloud Functions로 배포한다.
런타임 설정
Node.js, Python, Java 등과 같은 사용할 프로그래밍 언어를 지정한다.
서비스 계정
--service-account 옵션으로 Cloud Function에 필요한 권한을 설정한다.
1세대 기본값: App Engine Default Service Account
2세대 기본값: Default Compute Service Account
기타 설정
--timeout: 요청 타임아웃 설정.
--max-instances: 최대 인스턴스 수.
--min-instances: 최소 인스턴스 수.
소스 코드 제공 방법
Google Cloud Storage
소스 코드를 압축(zip 파일)하여 Cloud Storage에 업로드 후 사용한다.
gcloud functions deploy <Cloud_Function_Name> \
--source gs://<Bucket_Name>/<Zip_File>
Cloud Source Repository
소스 코드를 Cloud Source Repository에 저장 후 URL로 제공한다.
gcloud functions deploy <Cloud_Function_Name> \
--source <Repository_URL>
로컬 파일 시스템
로컬 디렉터리에 있는 소스 코드를 직접 사용한다.
gcloud functions deploy <Cloud_Function_Name> \
--source <Local_Directory>
트리거 설정
Cloud Function이 호출되는 조건을 정의
# HTTP 요청
--trigger-http
Cloud Storage: 객체가 업로드되었을 때
Pub/Sub: 메시지가 발행되었을 때
Eventarc: 다양한 이벤트 기반 트리거
'컴퓨터 > 클라우드' 카테고리의 다른 글
[GCP Associate Cloud Engineer] Storage (0) | 2025.01.24 |
---|---|
[GCP Associate Cloud Engineer] 암호화(Encryption) (0) | 2025.01.22 |
[GCP Associate Cloud Engineer] Google Kubernetes Engine(GKE) (3) | 2025.01.21 |
[GCP Associate Cloud Engineer] App Engine (5) | 2025.01.14 |
[GCP Associate Cloud Engineer] Instance Groups (0) | 2025.01.13 |