1 - Overview

서비스 개요

Cloud Functions는 서버 프로비저닝 필요 없이 함수 형태의 애플리케이션을 간편하게 실행하는 서버리스 컴퓨팅 기반의 FaaS(Function as a Service)입니다. 사용자는 스케일 조정을 위해 번거롭게 서버나 컨테이너를 관리할 필요가 없으며, 애플리케이션 개발을 위한 코드 작성과 배포에 집중할 수 있습니다.

특장점

  • 쉽고 편리한 개발 환경: 개발자는 선택한 런타임에 적합한 Code Editor를 이용하여 여러 환경에서 이벤트에 연결할 Function 리소스를 간편하게 생성할 수 있으며, 코드를 손쉽게 작성하고 호출할 수 있습니다.
  • 서버리스 컴퓨팅: Samsung Cloud Platform 환경에서 개발을 위한 서버리스 형태의 코드 실행 서비스를 이용할 수 있습니다. 함수 형태의 애플리케이션을 호출, 실행하기 위해 필요한 자원은 실행하는 규모에 따라 Samsung Cloud Platform이 할당하고 관리합니다.
  • 효율적인 비용 관리: 호출된 Function은 사용량(총 호출 횟수, 총 호출 시간)을 집계하여 실제 애플리케이션 구동에 사용된 시간만큼 과금됩니다. 사용량이 적은 Function은 Cloud Functions의 Scaler가 Scale-to-zero 상태로 조정하여 자원을 소모하지 않으므로 효율적인 비용 관리가 가능합니다.

서비스 구성도

구성도
그림. Cloud_Functions 구성도

제공 기능

Cloud Functions는 다음과 같은 기능을 제공하고 있습니다.

  • 코드 작성 환경: Runtime에 최적화된 Function 생성, Code 작성 및 편집
  • Function 실행, 환경 관리, 모니터링: 엔드포인트 정의, Token 관리, 접근제어 설정, 트리거 설정 등, 구동 환경/변수 정의 및 수정, Deploy/Test를 위한 산출물 호출/테스트, 서비스 배포, 진행 상태 모니터링/로깅
  • 서버리스 컴퓨팅: 코드 작성 및 배포에 필요한 모든 요소는 Samsung Cloud Platform에서 관리, 배포에 따른 자동 스케일 조정
  • 샘플 코드 제공: Blueprint를 통해 다양한 샘플 코드를 제공함으로써 손쉽고 빠르게 시작 가능

구성 요소

Runtime

Cloud Functions는 현재 다음과 같은 Runtime을 지원합니다. 또한 지속적으로 지원되는 Runtime이 추가될 예정입니다.

Runtime버전
GO1.21, 1.23
java17
Node.js18, 20
PHP8.1
Python3.9, 3.10, 3.11
표. 지원 Runtime 항목

리전별 제공 현황

Cloud Functions 서비스는 아래의 환경에서 제공 가능합니다.

리전제공 여부
한국 서부1(kr-west1)제공
한국 동부1(kr-east1)제공
한국 남부1(kr-south1)미제공
한국 남부2(kr-south2)미제공
한국 남부3(kr-south3)미제공
표. Cloud Functions 리전별 제공 현황

선행 서비스

해당 서비스를 생성하기 전에 선택 사항으로 구성할 수 있는 서비스 목록입니다. 자세한 내용은 각 서비스 별로 제공되는 가이드를 참고하여 사전에 준비해 주세요.

서비스 카테고리서비스상세 설명
Application ServiceAPI GatewayAPI를 손쉽게 관리하고 모니터링하는 서비스
표. Cloud Functions 선행 서비스

2 - How-to guides

사용자는 Samsung Cloud Platform Console을 통해 Cloud Functions의 필수 정보를 입력하고, 상세 옵션을 선택하여 해당 서비스를 생성할 수 있습니다.

Cloud Functions 생성하기

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.

  2. Service Home 페이지에서 Cloud Functions 생성 버튼을 클릭하세요. Cloud Functions 생성 페이지로 이동합니다.

  3. Cloud Functions 생성 페이지에서 서비스 생성에 필요한 정보들을 입력하세요.

    구분
    필수 여부
    상세 설명
    Funtion 명필수생성할 Funtion 이름 입력
    • 영문 소문자 시작하며 영문 소문자, 숫자, 특수문자(-)를 이용하여 3 ~ 64자 이내로 입력
    Runtime필수Runtime 생성 방법 선택
    • 새로 작성: Runtime을 새로 작성
    • Blueprint로 시작하기: 서비스에서 제공하는 Runtime 소스코드 활용하여 작성
    Runtime & Vesion필수Runtime 및 버전 선택
    • 새로 작성을 선택한 경우
      • Java 런타임의 경우, UI 코드 편집을 지원하지 않으며, Object Storage에서 Jar파일을 가져와서 실행 가능
    • Blueprint로 시작하기를 선택한 경우
      • 해당 Runtime & Version의 소스코드 보기 버튼을 클릭하여 소스코드 예시 확인 가능
    표. Cloud Functions 서비스 정보 입력 항목

  4. 요약 패널에서 생성한 상세 정보와 예상 청구 금액을 확인하고, 완료 버튼을 클릭하세요.

    • 생성이 완료되면, Cloud Functions 목록 페이지에서 생성한 자원을 확인하세요.

Cloud Functions 상세정보 확인하기

Cloud Functions 상세 페이지는 상세 정보, 모니터링, 로그, 코드, 구성, 트리거, 태그, 작업이력 탭으로 구성되어 있습니다.

Cloud Functions 서비스의 상세 정보를 확인하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 상세 정보를 확인할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
    • Function 상세 페이지에는 상태 정보 및 부가 기능 정보가 표시되며, 상세 정보, 모니터링, 로그, 코드, 구성, 트리거, 태그, 작업이력 탭으로 구성됩니다.
      구분상세 설명
      Cloud Functions 상태Cloud Functions의 상태 정보
      • Ready: 녹색 아이콘, 정상적인 함수 호출이 가능한 상태
      • Not Ready: 회색 아이콘, 정상적인 함수 불가능한 상태
      • Deploying: 황색 아이콘, 함수 생성 또는 변경 중인 상태로써 다음 동작으로 발동
        • 함수 생성 및 수정
        • 코드 탭에서 편집기로 코드 수정
        • 코드 탭에서 jar 파일 검사
        • 트리거 탭에서 추가 및 변경
        • 구성 탭에서 변경
      • Running: 청색 아이콘, 정상적인 함수 호출이 가능하고 콜드 스타트 방지 정책이 적용된 상태
      서비스 해지서비스를 해지하는 버튼
      표. Cloud Functions 상태 정보 및 부가 기능

상세 정보

Function 목록 페이지에서 선택한 자원의 상세 정보를 확인하고, 필요한 경우 정보를 수정할 수 있습니다.

구분상세 설명
서비스서비스명
자원 유형자원 유형
SRNSamsung Cloud Platform에서의 고유 자원 ID
자원명자원 이름
  • Cloud Functions 서비스에서는 Funtion 이름을 의미
자원 ID서비스의 고유 자원 ID
생성자서비스를 생성한 사용자
생성 일시서비스를 생성한 일시
수정자서비스를 수정한 사용자
수정 일시서비스를 수정한 일시
Function명Cloud Function의 이름
RuntimeRuntime 종류 및 버전
LLM Endpoint이용 가이드를 클릭하여 LLM Endpoint 정보 및 사용 방법 확인 가능
표. Cloud Functions 상세 - 상세 정보 탭 항목
참고
AIOS를 연계하여 LLM을 활용하는 방법에 대한 자세한 내용은 AIOS 연계하기 를 참고하시길 바랍니다.

모니터링

Function 목록 페이지에서 선택한 자원의 Cloud Functions 사용 정보를 확인할 수 있습니다.

구분상세 설명
호출수단위 시간 동안 해당 Function이 호출된 평균 횟수(건)
실행시간단위 시간 동안 해당 Function을 실행한 평균 실행 시간(초)
메모리 사용량해당 Function 실행하는 중 중 단위 시간 동안 사용한 평균 메모리 사용량(kb)
현재 작업수함수가 동시에 여러 번 호출될 경우, 동시 처리를 위해 단위 시간 동안 생성된 작업의 평균 횟수(건)
성공 호출수함수 호출 시 단위 시간 동안 런타임 코드가 정상적으로 동작하여 응답 코드를 전달한 평균 횟수(건)
실패 호출수함수 호출 시 단위 시간 동안 오류가 발생한 평균 호출 횟수
  • 응답 시간 초과 및 로직 오류에 의한 런타임 포함
표. Cloud Functions 상세 - 모니터링 탭 항목

로그

Function 목록 페이지에서 선택한 자원의 Cloud Functions 로그를 확인할 수 있습니다.

구분상세 설명
단위 기간Cloud Functions의 로그 정보를 확인할 기간 선택
  • 시간 단위(1시간, 3시간, 12시간)로 선택하거나 사용자가 직접 설정 가능
로그 메시지최근 발생 함수부터 순서대로 표시됩니다.
표. Cloud Functions 상세 - 로그 탭 항목
참고
로그 메시지는 최근 발생 메시지를 기준으로 이전 1,000개의 메시지까지 확인이 가능합니다.

코드

Function 목록 페이지에서 선택한 자원의 Cloud Functions 코드를 확인하고 수정할 수 있습니다.

참고

사용 Runtime에 따라 소스 코드 확인 및 편집 방식이 달라집니다.

  • 인라인 편집기: Node.js, Python, PHP, Go
  • 압축파일(.jar/.zip) 실행: Java
구분상세 설명
소스 코드인라인 편집기 방식
코드 정보코드 정보를 표시
수정수정 버튼을 클릭한 후, 인라인 편집기에서 코드 수정 가능
표. Cloud Functions 상세 - 코드 탭 내 인라인 편집기 항목
구분상세 설명
소스 코드압축파일(.jar/.zip) 실행 방식
코드 정보압축 파일 정보 표시
  • Java Runtime: Java Runtime 버전 정보
  • Handler 정보: 실행 Class와 Method 정보
  • 압축파일명(.jar/.zip)명: 현재 설정된 압축 파일의 이름
  • 파일 업로드 일시: 현재 설정된 압축 파일의 업로드 일시
  • 전송 상태: 압축 파일 전송 이력
    • 전송 성공: 압축 파일 설정을 성공한 경우
    • 압축 파일 전송 실패 시 실패 사유
수정Jar 파일 변경 가능
  • Function 코드 수정 페이지에서 Object Storage에서 가져오기 버튼을 클릭하여 변경 가능
  • 가져올 Object Storage 버킷 내 파일의 Private URL을 입력
  • 압축 파일 변경에 대한 자세한 내용은 [Java Runtime 코드 변경하기](#java-runtime 코드 변경하기) 참고
표. Cloud Functions 상세 - 코드 탭 내 압축파일(.jar/.zip) 실행 항목
참고
  • Java Runtime의 경우 UI 코드 편집 기능을 제공하지 않으며, Object Storage 서비스의 버킷에서 압축파일(.jar/.zip) 파일을 선택해야 합니다.
  • Object Storage 서비스의 인증키가 생성되지 않은 사용자의 경우, Object Storage에서 가져오기를 실행할 수 없으므로, 사전에 인증키를 생성해야 합니다.
  • Cloud Functions 서비스에 대한 Object Storage 버킷의 접근제어허용 상태로 변경해야 합니다.

구성

Function 목록 페이지에서 선택한 자원의 Cloud Functions 구성을 확인할 수 있습니다.

구분상세 설명
일반 구성Cloud Function의 메모리와 제한 시간 설정
  • 메모리: Function당 최대로 사용할 수 있는 메모리 제한값
  • 제한시간: Function당 호출을 대기하는 최대 시간. 제한 시간 이후는 Function이 Scale-to-zero 상태가 되고 종료
  • 함수 실행: 최소 및 최대 작업수
  • 수정 버튼을 클릭하여 일반 구성 설정 변경 가능
환경 변수런타임 환경 변수를 설정
  • 환경 변수 사용 시 코드를 업데이트하지 않고 함수의 동작을 조정 가능
  • 수정 버튼을 클릭하여 환경 변수 추가 또는 수정 가능
함수 URL함수에 접근 가능한 HTTPS URL 주소 발급
  • 수정 버튼을 클릭하여 활성화 여부인증 유형, 접근 허용 IP 설정 가능
  • IAM 유형으로 인증하여 함수를 호출하는 경우, 반드시 헤더 내 “x-scf-access-key”, “x-scf-secret-key” 포함 필요. 이 경우, 정책과 인증키의 IP 접근 제어는 미적용
Private 연결 구성PrivateLink Service와 연계하여 사용 가능
표. Cloud Functions 상세 - 구성 탭 항목
주의
접근 제어 사용을 해제하는 경우, 등록된 접근 정보가 삭제되어 함수 접근 제어가 불가능하므로 외부 스캔, 해킹 등의 보안 공격에 노출될 수 있습니다.
참고
  • 일반 구성의 메모리 할당량에 비례하는 CPU 코어 갯수가 자동으로 할당됩니다.
  • 일반 구성의 실행 최소 수가 1이상 일 경우 Cold Start가 방지 되지만, 지속적으로 비용이 부과됩니다.

트리거

Function 목록 페이지에서 선택한 자원의 트리거 정보를 확인하고 설정할 수 있습니다. 트리거를 설정하면 이벤트 발생 시 Function을 자동으로 실행할 수 있습니다.

구분상세 설명
CronjobCronjob을 트리거로 사용
  • 시간 또는 일정 주기에 따라 함수를 자동으로 호출
  • 수정 버튼을 클릭하여 반복 빈도시간대 변경 가능
API GatewayAPI Gateway를 트리거로 사용
  • API Gateway 이름과 상세 정보를 확인할 수 있습니다.
표. Cloud Functions 상세 - 트리거 탭 항목
주의
Cronjob 트리거를 함수 제한 시간 전에 호출할 경우, 함수가 중첩 실행되어 실행 횟수와 시간이 증가하게 됩니다. 따라서 지속적으로 추가 비용이 발생하여 높은 비용이 발생할 수 있으므로 주의하세요.
참고
  • Deploying 상태일 경우, 수정할 수 없습니다.
  • 트리거 설정에 대한 트리거 설정하기를 참고하세요.

태그

태그 탭에서 자원의 태그 정보를 확인하고, 추가하거나 변경 또는 삭제할 수 있습니다.

구분상세 설명
태그 목록태그 목록
  • 태그의 Key, Value 정보 확인 가능
  • 태그는 자원 당 최대 50개까지 추가 가능
  • 태그 입력 시 기존에 생성된 Key와 Value 목록을 검색하여 선택
표. Cloud Functions 상세 - 태그 탭 항목

작업 이력

작업 이력 페이지에서 자원의 작업 이력을 확인할 수 있습니다.

구분상세 설명
작업 이력 목록자원 변경 이력
  • 작업 내역, 작업 일시, 자원 유형, 자원명, 작업 결과, 작업자 정보 확인 가능
  • 작업 이력 목록 리스트에서 해당하는 자원을 클릭하면 작업 이력 상세 팝업창이 열림
표. Cloud Functions 상세 - 작업 이력 탭 항목

Java Runtime 코드 변경하기

Java Runtime을 사용하는 경우, 코드를 직접 수정할 수 없으므로 Object Storage 서비스의 버킷에서 압축 파일(.jar/.zip)을 선택하여 변경해야 합니다.

압축 파일을 변경하는 방법은 다음 절차를 따르세요.

Cloud Functions 서비스를 해지하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 코드 내 압축 파일을 변경할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. Function 상세 페이지의 코드 탭에서 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  5. Object Storage에서 가져오기 버튼을 클릭하세요. Object Storage에서 가져오기 팝업창이 열립니다.
구분상세 설명
Java RuntimeJava Runtime 정보
Handler 정보Handler 정보
  • 실행 Class: 압축파일(.jar/.zip) 설정 시 자동으로 입력
  • 실행 Method: 압축파일(.jar/.zip) 설정 시 자동으로 입력
압축파일(.jar/.zip)변경할 압축 파일을 설정
  • 압축파일명(.jar/.zip): 압축 파일의 이름을 표시. Object Storage에서 가져오기 설정 후, 자동으로 입력
  • Object Storage에서 가져오기: 압축파일(.jar/.zip)을 가져올 Object Storage 설정
표. Cloud Functions 상세 - Function 코드 수정 항목
  1. Object Storage URL에 압축 파일을 가져올 Object Storage의 URL 정보를 입력한 후, 확인 버튼을 클릭하세요. 알림 팝업창이 열립니다.
    • URL 정보는 가져올 Object Storage의 상세 페이지의 폴더 리스트 탭에서 파일 정보 > Private URL 항목에서 확인할 수 있습니다.
  2. 확인 버튼을 클릭하세요. Function 코드 수정 페이지의 **압축파일명(.jar/.zip)**에 가져온 압축 파일의 이름이 표시됩니다.
  3. 저장 버튼을 클릭하세요.
주의
  • 인증키가 생성되지 않은 사용자의 경우, Object Storage에서 가져오기를 실행할 수 없습니다.
  • URL이 존재하지 않거나 압축 파일이 다음에 해당하는 경우, 변경할 수 없습니다.
    • 지원하지 않는 확장자를 사용하는 경우
    • 압축 파일 내 유해한 파일이 있는 경우
    • 지원 가능한 크기를 초과한 경우

Cloud Functions 해지하기

Cloud Functions 서비스를 해지하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 해지할 자원을 클릭하고 서비스 해지 버튼을 클릭하세요.
  4. 해지가 완료되면 Function 목록 페이지에서 자원이 해지되었는지 확인하세요.

2.1 - 트리거 설정하기

트리거 설정하기

참고
  • 기본적으로 모든 트리거는 Cloud Functions에서 추가할 수 있습니다.
  • 만약 특정 상품에서 트리거할 경우, Cloud Functions에 전달해야 합니다.

Cronjob 트리거 설정하기

Cronjob 트리거를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요.로 설정하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류에서 Cronjob을 선택하세요. 하단에 필수 정보 입력 영역이 나타납니다.
    구분상세 설명
    Cronjob 설정트리거의 반복 빈도를 설정
    • 분, 시간, 일, 월, 요일 단위로 설정 가능
    Timezone 설정트리거의 기준 시간대를 설정
    표. Cronjob 트리거 필수 정보 항목
  6. 필수 정보를 입력한 후, 확인 버튼을 클릭하세요.
  7. 추가를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.

API Gateway 트리거 설정하기

API Gateway 트리거를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요.로 설정하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류에서 API Gateway을 선택하세요. 하단에 필수 정보 입력 영역이 나타납니다.
    구분상세 설명
    API명API 선택
    • 기존에 생성된 API를 선택하거나 새로 생성 가능
    스테이지배포 대상 선택
    • 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
    표. API Gateway 트리거 필수 정보 항목
  6. 필수 정보를 입력한 후, 확인 버튼을 클릭하세요.
  7. 추가를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.

멀티 트리거 설정하기

하나의 함수에 여러개의 트리거를 연결하여 사용할 수 있습니다.

트리거 수정하기

추가된 트리거를 수정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 수정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 목록에서 설정값을 수정할 트리거의 수정 버튼을 클릭하세요. 트리거 수정 팝업창이 열립니다.
  5. 트리거 수정 팝업창에서 설정값을 수정한 후, 확인 버튼을 클릭하세요.
  6. 수정을 알리는 팝업창이 열리면 확인을 클릭하세요.

트리거 삭제하기

트리거를 삭제하려면 다음 절차를 따르세요.

주의
특정 상품과 연계한 트리거는, 해당 상품에서 연계 시점에 전달한 상품만 관리하며, Functions 해지 시 해당 상품에 삭제 상태를 전달해야 합니다.
  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭의 트리거 목록에서 삭제할 트리거를 선택한 후, 삭제 버튼을 클릭하세요.
  5. 트리거 삭제를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.

2.2 - AIOS 연계하기

AIOS 연계하기

Cloud Functions와 AIOS를 연계하여 LLM을 활용할 수 있습니다.

AIOS LLM 프라이빗 엔드포인트

AIOS LLM 프라이빗 엔드포인트의 URL은 다음과 같습니다.

참고

AIOS 서비스의 리전별 제공 여부와 제공 모델에 대한 자세한 내용은 다음을 참조하세요.

Blueprint 소스코드 변경하기

Cloud Functions와 AIOS를 연계하려면 각 리전 내 사용하는 LLM Endpoint에 맞춰 Blueprint에 있는 URL 주소를 변경해야 합니다. Blueprint 소스코드를 변경하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Cloud Functions 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 URL로 호출할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 코드 탭을 클릭하여 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  5. Python, Node.js, Go Runtime 소스코드를 사용하여 Blueprint를 변경한 후, 저장 버튼을 클릭하세요.
  • Python 소스코드

    배경색 변경
    import json
    import requests
    
    def handle_request(params):
      # User writing area (Function details)
      url = "{AIOS LLM 프라이빗 엔드포인트}/{API}" # Destination URL
      data = { "model": "openai/gpt-oss-120b"
        , "prompt" : "Write a haiku about recursion in programming."
        , "temperature": 0
        , "max_tokens": 100
        , "stream": False
      }
      try:
        response = requests.post(url, json=data, verify=True)
    
        return {
          'statusCode': response.status_code,
          'body': json.dumps(response.text)
        }
      except requests.exceptions.RequestException as e:
        return str(e)
    import json
    import requests
    
    def handle_request(params):
      # User writing area (Function details)
      url = "{AIOS LLM 프라이빗 엔드포인트}/{API}" # Destination URL
      data = { "model": "openai/gpt-oss-120b"
        , "prompt" : "Write a haiku about recursion in programming."
        , "temperature": 0
        , "max_tokens": 100
        , "stream": False
      }
      try:
        response = requests.post(url, json=data, verify=True)
    
        return {
          'statusCode': response.status_code,
          'body': json.dumps(response.text)
        }
      except requests.exceptions.RequestException as e:
        return str(e)
    Python 소스코드

  • Node.js 소스코드

    배경색 변경
    const request = require('request');
    
    /**
    * @description User writing area (Function details)
    */
    exports.handleRequest = async function (params) {
    return await sendRequest(params);
    };
    
    async function sendRequest(req) {
      return new Promise((resolve, reject) => {
        url = "{AIOS LLM 프라이빗 엔드포인트}/{API}"
        data = { model: 'openai/gpt-oss-120b'
          , prompt : 'Write a haiku about recursion in programming.'
          , temperature: 0
          , max_tokens: 100
          , stream: false
        }
    
        const options = {
          uri: url,
          method:'POST',
          body: data,
          json: true,
          strictSSL: false,
          rejectUnauthorized: false
        }
        
        request(options, (error, response, body) => {
          if (error) {
            reject(error);
          } else {
            resolve({
              statusCode: response.statusCode,
              body: JSON.stringify(body)
            });
          }
        });
      });
    }
    const request = require('request');
    
    /**
    * @description User writing area (Function details)
    */
    exports.handleRequest = async function (params) {
    return await sendRequest(params);
    };
    
    async function sendRequest(req) {
      return new Promise((resolve, reject) => {
        url = "{AIOS LLM 프라이빗 엔드포인트}/{API}"
        data = { model: 'openai/gpt-oss-120b'
          , prompt : 'Write a haiku about recursion in programming.'
          , temperature: 0
          , max_tokens: 100
          , stream: false
        }
    
        const options = {
          uri: url,
          method:'POST',
          body: data,
          json: true,
          strictSSL: false,
          rejectUnauthorized: false
        }
        
        request(options, (error, response, body) => {
          if (error) {
            reject(error);
          } else {
            resolve({
              statusCode: response.statusCode,
              body: JSON.stringify(body)
            });
          }
        });
      });
    }
    Node.js 소스코드

  • GO 소스코드

    배경색 변경
    package gofunction
    
    import (
      "bytes"
      "net/http"
      "encoding/json"
      "io/ioutil"
    )
    
    type PostData struct {
      Model string `json:"model"`
      Prompt string `json:"prompt"`
      Temperature int `json:"temperature"`
      MaxTokens int `json:"max_tokens"`
      Stream bool `json:"stream"`
    }
    
    func HandleRequest(r *http.Request)(string, error) {
      url := "{AIOS LLM 프라이빗 엔드포인트}/{API}"
      data := PostData {
        Model: "openai/gpt-oss-120b",
        Prompt: "Write a haiku about recursion in programming.",
        Temperature: 0,
        MaxTokens: 100,
        Stream: false,
      }
      
      jsonData, err := json.Marshal(data)
      if err != nil {
        panic(err)
      }
    
      req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
      if err != nil {
        panic(err)
      }
    
      req.Header.Set("Content-Type", "application/json")
    
      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
        panic(err)
      }
      defer resp.Body.Close()
    
      // 응답 본문 읽기
      body, err := ioutil.ReadAll(resp.Body)
      if err != nil {
        panic(err)
      }
    
      return string(body), nil
    }
    package gofunction
    
    import (
      "bytes"
      "net/http"
      "encoding/json"
      "io/ioutil"
    )
    
    type PostData struct {
      Model string `json:"model"`
      Prompt string `json:"prompt"`
      Temperature int `json:"temperature"`
      MaxTokens int `json:"max_tokens"`
      Stream bool `json:"stream"`
    }
    
    func HandleRequest(r *http.Request)(string, error) {
      url := "{AIOS LLM 프라이빗 엔드포인트}/{API}"
      data := PostData {
        Model: "openai/gpt-oss-120b",
        Prompt: "Write a haiku about recursion in programming.",
        Temperature: 0,
        MaxTokens: 100,
        Stream: false,
      }
      
      jsonData, err := json.Marshal(data)
      if err != nil {
        panic(err)
      }
    
      req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
      if err != nil {
        panic(err)
      }
    
      req.Header.Set("Content-Type", "application/json")
    
      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
        panic(err)
      }
      defer resp.Body.Close()
    
      // 응답 본문 읽기
      body, err := ioutil.ReadAll(resp.Body)
      if err != nil {
        panic(err)
      }
    
      return string(body), nil
    }
    GO 소스코드

2.3 - Blueprint 상세 가이드

Blueprint 개요

Cloud Functions 생성 시 Blueprint를 설정하여 Cloud Functions에서 제공하는 Runtime 소스코드를 활용할 수 있습니다. Cloud Functions에서 제공하는 Blueprint 항목은 다음을 참조하세요.

구분상세 설명비고
Hello World함수 호출 시 Hello Serverless World!를 응답합니다.
Execution after timeout함수 호출 시간이 초과된 후에 실행되어야 하지만 실행되지 않는 코드를 출력합니다.PHP, Python 미지원
HTTP request bodyRequest Body를 파싱합니다.PHP 미지원
Send HTTP requestsCloud 함수에서 HTTP 요청을 전송합니다.PHP 미지원
Print logs사용자의 Samsung Cloud Platform Console Request를 로그로 출력합니다.PHP 미지원
Throw a custom error에러 로직을 직접 입력하여 에러를 처리합니다.
Using Environment VariableCloud 함수 내에 환경 변수를 구성하여 실행합니다.
표. Blueprint 항목

Hello World

Hello World 응답 받기 설정 및 함수 호출 예시(함수 URL 이용)를 설명합니다.

Hello World 설정하기

Hello World를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.

  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.

  3. Function 목록 페이지에서 URL로 호출할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.

  4. 구성 탭을 클릭한 후, 함수 URL 항목의 수정 버튼을 클릭하세요. 함수 URL 수정 팝업창이 열립니다.

  5. 함수 URL 수정 팝업창에서 활성화 여부사용으로 설정한 후, 확인 버튼을 클릭하세요.

    구분상세 설명
    활성화 여부함수 URL의 사용 여부를 설정
    인증 유형함수 URL에 대한 요청 시 IAM 인증 사용 여부 선택
    접근 제어접근 가능한 IP를 추가하여 관리 가능
    • 사용으로 설정한 후, 퍼블릭 접근 IP 입력 및 추가 가능
    표. 트리거 추가 시 필수 입력 항목

  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.

  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.

    • Node.js 소스코드
      배경색 변경
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          const response = {
          statusCode: 200,
          body: JSON.stringify('Hello Serverless World!'),
          };
          return response;
      };
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          const response = {
          statusCode: 200,
          body: JSON.stringify('Hello Serverless World!'),
          };
          return response;
      };
      Hello World - Node.js 소스코드
    • Python 소스코드
      배경색 변경
      import json
      
      def handle_request(params):
          # User writing area (Function details)
          return {
          'statusCode': 200,
          'body': json.dumps('Hello Serverless World!')
          }
      import json
      
      def handle_request(params):
          # User writing area (Function details)
          return {
          'statusCode': 200,
          'body': json.dumps('Hello Serverless World!')
          }
      Hello World - Python 소스코드
    • PHP 소스코드
      배경색 변경
      <?php
      function handle_request() {
          # User writing area (Function details)
          $res = array(
              'statusCode' => 200,
              'body' => 'Hello Serverless World!',
          );
          return $res;
      }
      ?>
      
      <?php
      function handle_request() {
          # User writing area (Function details)
          $res = array(
              'statusCode' => 200,
              'body' => 'Hello Serverless World!',
          );
          return $res;
      }
      ?>
      
      Hello World - PHP 소스코드

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 응답을 확인합니다.

Hello Serverless World!

Execution after timeout

제한시간 이후 함수 실행(Execution after timeout) 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.

Execution after timeout 설정하기

Execution after timeout을 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
    • 필수 정보는 트리거 종류에 따라 달라집니다.
      트리거 종류입력 항목
      API Gateway
      • API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
      • 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
      Cronjob
      • 예시를 참고하여 트리거의 반복 빈도(, , , , 요일)를 입력
      • Timezone 설정: 적용할 기준 시간대를 선택
      표. 트리거 추가 시 필수 입력 항목
  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
    • Node.js 소스코드
      배경색 변경
      exports.handleRequest = async function (params) {
          /**
           * @description User writing area (Function details)
           */
          console.log("Hello world 3");
          await delay(3000);
      
          const response = {
              statusCode: 200,
              body: JSON.stringify('Hello Serverless World!'),
          };
          return response;
      };
      
      const delay = (ms) => {
          return new Promise(resolve=>{
              setTimeout(resolve,ms)
          })
      }
      exports.handleRequest = async function (params) {
          /**
           * @description User writing area (Function details)
           */
          console.log("Hello world 3");
          await delay(3000);
      
          const response = {
              statusCode: 200,
              body: JSON.stringify('Hello Serverless World!'),
          };
          return response;
      };
      
      const delay = (ms) => {
          return new Promise(resolve=>{
              setTimeout(resolve,ms)
          })
      }
      Execution after timeout - Node.js 소스코드

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출하고 일정 시간이 지난 후, 응답을 확인합니다.

Hello Serverless World!

HTTP request body

Request Body 파싱하기 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.

HTTP request body 설정하기

HTTP request body를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
    • 필수 정보는 트리거 종류에 따라 달라집니다.
      트리거 종류입력 항목
      API Gateway
      • API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
      • 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
      Cronjob
      • 예시를 참고하여 트리거의 반복 빈도(, , , , 요일)를 입력
      • Timezone 설정: 적용할 기준 시간대를 선택
      표. 트리거 추가 시 필수 입력 항목
  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
    • Node.js 소스코드
      배경색 변경
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          const response = {
          statusCode: 200,
          body: JSON.stringify(params.body),
          };
          return response;
      };
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          const response = {
          statusCode: 200,
          body: JSON.stringify(params.body),
          };
          return response;
      };
      Execution after timeout - Node.js 소스코드
    • Python 소스코드
      배경색 변경
      import json
      
      def handle_request(params):
          # User writing area (Function details)
          return {
              'statusCode': 200,
              'body': json.dumps(params.json)
      }
      import json
      
      def handle_request(params):
          # User writing area (Function details)
          return {
              'statusCode': 200,
              'body': json.dumps(params.json)
      }
      Execution after timeout - Python 소스코드

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, Body 데이터와 요청 Body값, 응답 Body값을 확인합니다.

  • 요청 Body값

    배경색 변경
    {
        "testKey" :"cloud-001",
        "testNames": [
            {
                "name": "Son"
            },
            {
                "name": "Kim"
            }
        ],
        "testCode":"test"
    }
    {
        "testKey" :"cloud-001",
        "testNames": [
            {
                "name": "Son"
            },
            {
                "name": "Kim"
            }
        ],
        "testCode":"test"
    }
    요청 Body 값

  • 응답 Body값

    배경색 변경
    {
        "testKey" :"cloud-001",
        "testNames": [
            {
                "name": "Son"
            },
            {
                "name": "Kim"
            }
        ],
        "testCode":"test"
    }
    {
        "testKey" :"cloud-001",
        "testNames": [
            {
                "name": "Son"
            },
            {
                "name": "Kim"
            }
        ],
        "testCode":"test"
    }
    응답 Body 값

Send HTTP requests

HTTP 요청하기 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.

Send HTTP requests 설정하기

Send HTTP requests를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
    • 필수 정보는 트리거 종류에 따라 달라집니다.
      트리거 종류입력 항목
      API Gateway
      • API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
      • 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
      Cronjob
      • 예시를 참고하여 트리거의 반복 빈도(, , , , 요일)를 입력
      • Timezone 설정: 적용할 기준 시간대를 선택
      표. 트리거 추가 시 필수 입력 항목
  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
    • Node.js 소스코드
      배경색 변경
      const request = require('request');
      
      /**
      * @description User writing area (Function details)
      */
      exports.handleRequest = async function (params) {
      return await sendRequest(params);
      };
      
      async function sendRequest(req) {
          return new Promise((resolve, reject) => {
              // Port 80 and Port 443 are available
              url = "https://example.com"; // Destination URL
      
                  const options = {
                  uri: url,
                  method:'GET',
                  json: true,
                  strictSSL: false,
                  rejectUnauthorized: false
              }
              request(options, (error, response, body) => {
                  if (error) {
                      reject(error);
                  } else {
                      resolve({
                          statusCode: response.statusCode,
                          body: JSON.stringify(body)
                      });
                  }
              });
          });
      }
      const request = require('request');
      
      /**
      * @description User writing area (Function details)
      */
      exports.handleRequest = async function (params) {
      return await sendRequest(params);
      };
      
      async function sendRequest(req) {
          return new Promise((resolve, reject) => {
              // Port 80 and Port 443 are available
              url = "https://example.com"; // Destination URL
      
                  const options = {
                  uri: url,
                  method:'GET',
                  json: true,
                  strictSSL: false,
                  rejectUnauthorized: false
              }
              request(options, (error, response, body) => {
                  if (error) {
                      reject(error);
                  } else {
                      resolve({
                          statusCode: response.statusCode,
                          body: JSON.stringify(body)
                      });
                  }
              });
          });
      }
      Send HTTP requests - Node.js 소스코드
    • Python 소스코드
      배경색 변경
      import json
      import requests
      
      def handle_request(params):
          # User writing area (Function details)
          
          # Port 80 and Port 443 are available
          url = "https://example.com" # Destination URL
      
          try:
              response = requests.get(url, verify=True)
              return {
                  'statusCode': response.status_code,
                  'body': json.dumps(response.text)
              }
          except requests.exceptions.RequestException as e:
              return str(e)
      import json
      import requests
      
      def handle_request(params):
          # User writing area (Function details)
          
          # Port 80 and Port 443 are available
          url = "https://example.com" # Destination URL
      
          try:
              response = requests.get(url, verify=True)
              return {
                  'statusCode': response.status_code,
                  'body': json.dumps(response.text)
              }
          except requests.exceptions.RequestException as e:
              return str(e)
      Send HTTP requests - Python 소스코드

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 응답을 확인합니다.

배경색 변경
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Example Domain</h1>

    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Example Domain</h1>

    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
함수 호출 응답 확인

Print logs

Log 출력하기 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.

Print logs 응답 받기를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
    • 필수 정보는 트리거 종류에 따라 달라집니다.
      트리거 종류입력 항목
      API Gateway
      • API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
      • 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
      Cronjob
      • 예시를 참고하여 트리거의 반복 빈도(, , , , 요일)를 입력
      • Timezone 설정: 적용할 기준 시간대를 선택
      표. 트리거 추가 시 필수 입력 항목
  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
    • Node.js 소스코드
      배경색 변경
      const winston = require('winston');
      
      // Log module setting
      const logger = winston.createLogger({
          format: winston.format.combine(
              winston.format.timestamp(),
              winston.format.printf(info => info.timestamp + ' ' + info.level + ': ' + info.message)
              ),
              transports: [
                  new winston.transports.Console()
                  ]
      });
      
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          const response = {
              statusCode: 200,
              body: JSON.stringify(params.body),
          };
      
          logger.info(JSON.stringify(response, null, 2));
      
          return response;
      };
      const winston = require('winston');
      
      // Log module setting
      const logger = winston.createLogger({
          format: winston.format.combine(
              winston.format.timestamp(),
              winston.format.printf(info => info.timestamp + ' ' + info.level + ': ' + info.message)
              ),
              transports: [
                  new winston.transports.Console()
                  ]
      });
      
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          const response = {
              statusCode: 200,
              body: JSON.stringify(params.body),
          };
      
          logger.info(JSON.stringify(response, null, 2));
      
          return response;
      };
      Print logs - Node.js 소스코드
    • Python 소스코드
      배경색 변경
      import json
      import logging
      
      # Log module setting
      logging.basicConfig(level=logging.INFO)
      
      def handle_request(params):
          # User writing area (Function details)
          response = {
              'statusCode': 200,
              'body': json.dumps(params.json)
          }
      
          logging.info(response)
      
          return response
      import json
      import logging
      
      # Log module setting
      logging.basicConfig(level=logging.INFO)
      
      def handle_request(params):
          # User writing area (Function details)
          response = {
              'statusCode': 200,
              'body': json.dumps(params.json)
          }
      
          logging.info(response)
      
          return response
      Print logs - Python 소스코드

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 로그 탭에서 로그를 확인합니다.

배경색 변경
[2023-09-07] 12:06:23] "host": "scf-xxxxxxxxxxxxxxxxxxxxx",
[2023-09-07] 12:06:23] "ce-id": "xxxxxxxxxxxxxxxxxxxxx",
[2023-09-07] 12:06:23] "ce-source": "xxxxxxxxxxxxxxxxxxxxx",
[2023-09-07] 12:06:23] "host": "scf-xxxxxxxxxxxxxxxxxxxxx",
[2023-09-07] 12:06:23] "ce-id": "xxxxxxxxxxxxxxxxxxxxx",
[2023-09-07] 12:06:23] "ce-source": "xxxxxxxxxxxxxxxxxxxxx",
함수 호출 응답 확인

Throw a custom error

커스텀 에러 발생(Throw a custom error) 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.

Throw a custom error 설정하기

Throw a custom error를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
    • 필수 정보는 트리거 종류에 따라 달라집니다.
      트리거 종류입력 항목
      API Gateway
      • API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
      • 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
      Cronjob
      • 예시를 참고하여 트리거의 반복 빈도(, , , , 요일)를 입력
      • Timezone 설정: 적용할 기준 시간대를 선택
      표. 트리거 추가 시 필수 입력 항목
  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
    • Node.js 소스코드
      배경색 변경
      class CustomError extends Error {
          constructor(message) {
              super(message);
              this.name = 'CustomError';
          }
      }
      
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          throw new CustomError('This is a custom error!');
      };
      class CustomError extends Error {
          constructor(message) {
              super(message);
              this.name = 'CustomError';
          }
      }
      
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          throw new CustomError('This is a custom error!');
      };
      Throw a custom error - Node.js 소스코드
    • Python 소스코드
      배경색 변경
      class CustomError(Exception):
          def __init__(self, message):
          self.message = message
      
      def handle_request(parmas):
          raise CustomError('This is a custom error!')
      class CustomError(Exception):
          def __init__(self, message):
          self.message = message
      
      def handle_request(parmas):
          raise CustomError('This is a custom error!')
      Throw a custom error - Python 소스코드
    • PHP 소스코드
      배경색 변경
      <?php
          class CustomError extends Exception {
              public function __construct($message) {
                  parent::__construct($message);
                  $this->message = $message;
              }
          }
      
          function handle_request() {
              throw new CustomError('This is a custom error!');
          }
      ?>
      
      <?php
          class CustomError extends Exception {
              public function __construct($message) {
                  parent::__construct($message);
                  $this->message = $message;
              }
          }
      
          function handle_request() {
              throw new CustomError('This is a custom error!');
          }
      ?>
      
      Throw a custom error - PHP 소스코드

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 로그 탭에서 에러 발생 여부를 확인합니다.

Using Environment Variable

환경 변수 사용(Using Environment Variable) 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.

Using Environment Variable 설정하기

Using Environment Variable를 설정하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
  5. 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
    • 필수 정보는 트리거 종류에 따라 달라집니다.
      트리거 종류입력 항목
      API Gateway
      • API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
      • 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
      Cronjob
      • 예시를 참고하여 트리거의 반복 빈도(, , , , 요일)를 입력
      • Timezone 설정: 적용할 기준 시간대를 선택
      표. 트리거 추가 시 필수 입력 항목
  6. 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
  7. 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
    • Node.js 소스코드
      배경색 변경
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          return process.env.test;
      };
      exports.handleRequest = async function (params) {
          /**
          * @description User writing area (Function details)
          */
          return process.env.test;
      };
      Using Environment Variable - Node.js 소스코드
    • Python 소스코드
      배경색 변경
      import json
      
      import os
      
      def handle_request(params):
          # User writing area (Function details)
          return os.environ.get("test")
      import json
      
      import os
      
      def handle_request(params):
          # User writing area (Function details)
          return os.environ.get("test")
      Using Environment Variable - Python 소스코드
    • PHP 소스코드
      배경색 변경
      import json
      
      def handle_request(params):
          # User writing area (Function details)
          return os.environ.get("test")
      import json
      
      def handle_request(params):
          # User writing area (Function details)
          return os.environ.get("test")
      Using Environment Variable - PHP 소스코드
  8. 구성 탭으로 이동한 후, 환경 변수 영역의 수정 버튼을 클릭하세요. 환경 변수 수정 팝업창이 열립니다.
  9. 환경 변수 정보를 입력한 후, 확인 버튼을 클릭하세요.
    구분상세 설명
    이름Key값을 입력
    Value값을 입력
    표. 환경 변수 입력 항목

함수 호출 확인하기

Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 로그 탭에서 환경 변수값을 확인합니다.

2.4 - PrivateLink 서비스 연계하기

Cloud Functions와 PrivateLink 서비스를 연계하여 Samsung Cloud Platform 내부의 VPC와 VPC, VPC와 서비스를 외부 인터넷 없이 연결할 수 있습니다.
데이터가 내부 네트워크만 이용하게되어 보안성이 높고, 퍼블릭 IP, NAT, VPN, 인터넷 게이트웨이 등이 필요하지 않습니다.

PrivateLink 서비스 활성화하기

PrivateLink Service를 연계하기 위해 서비스를 먼저 활성화해야 합니다.

PrivateLink 서비스를 활성화하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 PrivateLink를 연계할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. Function 상세 페이지에서 구성 탭을 클릭하세요.
  5. Private 연결 구성에서 PrivateLink Service수정 버튼을 클릭하세요. PrivateLink Service 수정 팝업창이 열립니다.
  6. PrivateLink Service 수정 팝업창에서 활성화 여부사용 항목을 체크한 후, 확인 버튼을 클릭하세요. 구성 탭의 Private 연결 구성에 PrivateLink Service 정보가 표시됩니다.
구분상세 설명
Private URLPrivateLink Service URL 정보
PrivateLink Service IDPrivateLink Service ID 정보
요청 Endpoint 관리PrivateLink Service 연결을 요청한 PrivateLink Endpoint 목록
  • Endpoint ID와 승인 상태
  • 승인 관리 버튼을 클릭하여 상태 변경 가능
    • Requesting: 연결 요청 중인 Endpoint. 승인 또는 거부 버튼을 클릭하여 승인 여부 선택
    • Active: 연결이 완료된 Endpoint. 차단 버튼을 클릭하여 연결 해제 가능
    • Disconnected: 연결이 해제된 Endpoint. 재연결 버튼을 클릭하여 연결 가능
    • Reject: 연결 요청 승인이 거부된 Endpoint
표. PrivateLink Service 상세 정보 항목

PrivateLink 서비스 연계하기

PrivateLink Service를 연계하여 함수를 다른 VPC에서 프라이빗하게 접근할 수 있도록 노출시킬 수 있습니다.

안내
PrivateLink Service를 먼저 활성화한 후, 연계 작업을 진행하세요.

PrivateLink 서비스를 연계하려면 다음 작업을 확인하세요.

  • 발급된 Private URL 호출을 위하여 PrivateLink Endpoint의 IP주소와 Private URL 주소에 대한 도메인을 등록하세요.
    192.168.0.13 abc123.scf.private.kr-west1.qa2.samsungsdscloud.com
    
  • PrivateLink Service 호출 시 필요한 Endpoint 생성자의 인증 정보를 기반으로 IAM 인증을 확인하세요.
    x-scf-access-key
    
    x-scf-secret-key
    

PrivateLink Endpoint 생성하기

사용자 VPC의 PrivateLink Service에 접근하기 위한 Entry Point를 생성합니다.

주의
Endpoint 생성 시 추가 비용이 발생할 수 있습니다.

PrivateLink Endpoint를 생성하려면 다음 절차를 따르세요.

  1. 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
  2. Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
  3. Function 목록 페이지에서 PrivateLink를 연계할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
  4. Function 상세 페이지에서 구성 탭을 클릭하세요.
  5. Private 연결 구성에서 PrivateLink Endpoint추가 버튼을 클릭하세요. PrivateLink Endpoint 추가 팝업창이 열립니다.
  6. PrivateLink Service 추가 팝업창에서 PrivateLink Service IDAlias 정보를 입력한 후, 확인 버튼을 클릭하세요.
  7. 생성을 알리는 팝업창이 열리면 확인 버튼을 클릭하세요. 구성 탭의 Private 연결 구성에 PrivateLink Endpoint 정보가 표시됩니다.
구분상세 설명
PrivateLink Endpoint IDPrivateLink Endpoint ID 정보
PrivateLink Service IDPrivateLink Service ID 정보
AliasPrivateLink Endpoint 접근을 위해 IP 주소 대신 사용 가능한 hostalias 정보
상태PrivateLink Endpoint의 승인 상태
  • Requesting: 승인 대기 중
  • Active: 승인 및 연결
  • Disconnected: 연결 해제
  • Reject: 승인 거부. 재요청 버튼을 클릭하여 재요청 가능
  • 삭제: 해당 Endpoint 삭제
표. PrivateLink Endpoint 상세 정보 항목

APIGW Private EPS 연계하기

SCF Endpoint와 APIGW Private Endpoint를 연결하려면 SCF Endpoint Alias에 APIGW EPS의 resource path를 대신하여 Private URL을 기재해야 합니다.

  • Private URL 예시: 181b6126ef6d4e4b81370df5.apigw.private.kr-west1.s.samsungsdscloud.com/get/resourcepath

APIGW Private EPS 연계하려면 다음 코드를 참조하세요.

배경색 변경
const request = require('request');

/**
 * @description User writing area (Function details)
*/
exports.handleRequest = async function (params) {
    return await sendRequest(params);
};
 
async function sendRequest(req) {
    return new Promise((resolve, reject) => {
        // Port 80 and Port 443 are available
        url = "https://{alias}/{resource_path}"; // Destination URL
        /**
        {alias}는 함수 내에서 Endpoint 생성 시 입력한 alias명
        {resoure_path}는 APIGW EPS의 Private URL에서 지정한 resource path (/get/resourcepath)
        */

        const options = {
            uri: url,
            method:'GET',
            json: true,
            strictSSL: false,
            rejectUnauthorized: false
        }
         
        request(options, (error, response, body) => {
            if (error) {
                reject(error);
            } else {
                resolve({
                    statusCode: response.statusCode,
                    body: JSON.stringify(body)
                });
            }
        });
    });
}
const request = require('request');

/**
 * @description User writing area (Function details)
*/
exports.handleRequest = async function (params) {
    return await sendRequest(params);
};
 
async function sendRequest(req) {
    return new Promise((resolve, reject) => {
        // Port 80 and Port 443 are available
        url = "https://{alias}/{resource_path}"; // Destination URL
        /**
        {alias}는 함수 내에서 Endpoint 생성 시 입력한 alias명
        {resoure_path}는 APIGW EPS의 Private URL에서 지정한 resource path (/get/resourcepath)
        */

        const options = {
            uri: url,
            method:'GET',
            json: true,
            strictSSL: false,
            rejectUnauthorized: false
        }
         
        request(options, (error, response, body) => {
            if (error) {
                reject(error);
            } else {
                resolve({
                    statusCode: response.statusCode,
                    body: JSON.stringify(body)
                });
            }
        });
    });
}
APIGW Private EPS 연계 코드

3 - API Reference

API Reference

4 - CLI Reference

CLI Reference

5 - Release Note

Cloud Functions

2025.12.16
FEATURE AIOS, PrivateLink 서비스 연계
  • AIOS 서비스와 연계하여 함수를 이용할 수 있습니다.
    • Cloud Functions와 AIOS를 연계하여 LLM을 활용할 수 있습니다.
  • PrivateLink 서비스와 연계하여 함수를 이용할 수 있습니다.
    • Private 연결(PrivateLink)을 통해 Samsung Cloud Platform의 VPC와 VPC, VPC와 서비스 사이에 인터넷을 거치지 않고 내부적 연결할 수 있습니다.
2025.10.23
FEATURE Java Runtime 실행 파일 업로드 기능 추가
  • Java Runtime 실행 파일을 업로드하는 기능이 추가되었습니다.
    • Object Storage에 Java Runtime 실행 압축 파일(.jar/.zip)을 가져와서 설정할 수 있습니다.
2025.07.01
NEW Cloud Functions 서비스 정식 버전 출시
  • Cloud Functions 서비스를 정식 출시하였습니다.
    • 서버 프로비저닝 필요 없이 함수 형태의 애플리케이션을 간편하게 실행하는 서버리스 컴퓨팅 기반의 FaaS (Function as a Service)입니다.