이 섹션의 다중 페이지 출력 화면임. 여기를 클릭하여 프린트.
Cloud Functions
- 1: Overview
- 2: How-to guides
- 2.1: 트리거 설정하기
- 2.2: AIOS 연계하기
- 2.3: Blueprint 상세 가이드
- 2.4: PrivateLink 서비스 연계하기
- 3: API Reference
- 4: CLI Reference
- 5: Release Note
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는 다음과 같은 기능을 제공하고 있습니다.
- 코드 작성 환경: Runtime에 최적화된 Function 생성, Code 작성 및 편집
- 지원 Runtime은 구성 요소 > Runtime 참고
- Function 실행, 환경 관리, 모니터링: 엔드포인트 정의, Token 관리, 접근제어 설정, 트리거 설정 등, 구동 환경/변수 정의 및 수정, Deploy/Test를 위한 산출물 호출/테스트, 서비스 배포, 진행 상태 모니터링/로깅
- 서버리스 컴퓨팅: 코드 작성 및 배포에 필요한 모든 요소는 Samsung Cloud Platform에서 관리, 배포에 따른 자동 스케일 조정
- 샘플 코드 제공: Blueprint를 통해 다양한 샘플 코드를 제공함으로써 손쉽고 빠르게 시작 가능
구성 요소
Runtime
Cloud Functions는 현재 다음과 같은 Runtime을 지원합니다. 또한 지속적으로 지원되는 Runtime이 추가될 예정입니다.
| Runtime | 버전 |
|---|---|
| GO | 1.21, 1.23 |
| java | 17 |
| Node.js | 18, 20 |
| PHP | 8.1 |
| Python | 3.9, 3.10, 3.11 |
리전별 제공 현황
Cloud Functions 서비스는 아래의 환경에서 제공 가능합니다.
| 리전 | 제공 여부 |
|---|---|
| 한국 서부1(kr-west1) | 제공 |
| 한국 동부1(kr-east1) | 제공 |
| 한국 남부1(kr-south1) | 미제공 |
| 한국 남부2(kr-south2) | 미제공 |
| 한국 남부3(kr-south3) | 미제공 |
선행 서비스
해당 서비스를 생성하기 전에 선택 사항으로 구성할 수 있는 서비스 목록입니다. 자세한 내용은 각 서비스 별로 제공되는 가이드를 참고하여 사전에 준비해 주세요.
| 서비스 카테고리 | 서비스 | 상세 설명 |
|---|---|---|
| Application Service | API Gateway | API를 손쉽게 관리하고 모니터링하는 서비스 |
2 - How-to guides
사용자는 Samsung Cloud Platform Console을 통해 Cloud Functions의 필수 정보를 입력하고, 상세 옵션을 선택하여 해당 서비스를 생성할 수 있습니다.
Cloud Functions 생성하기
모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
Service Home 페이지에서 Cloud Functions 생성 버튼을 클릭하세요. Cloud Functions 생성 페이지로 이동합니다.
Cloud Functions 생성 페이지에서 서비스 생성에 필요한 정보들을 입력하세요.
구분 필수 여부상세 설명 Funtion 명 필수 생성할 Funtion 이름 입력 - 영문 소문자 시작하며 영문 소문자, 숫자, 특수문자(
-)를 이용하여 3 ~ 64자 이내로 입력
Runtime 필수 Runtime 생성 방법 선택 - 새로 작성: Runtime을 새로 작성
- Blueprint로 시작하기: 서비스에서 제공하는 Runtime 소스코드 활용하여 작성
Runtime & Vesion 필수 Runtime 및 버전 선택 - 새로 작성을 선택한 경우
- Runtime & Version 목록은 구성 요소 > Runtime 참고
- Java 런타임의 경우, UI 코드 편집을 지원하지 않으며, Object Storage에서 Jar파일을 가져와서 실행 가능
- Blueprint로 시작하기를 선택한 경우
- 해당 Runtime & Version의 소스코드 보기 버튼을 클릭하여 소스코드 예시 확인 가능
- Blueprint 설정에 대한 자세한 내용은 Blueprint 상세 가이드 참고
표. Cloud Functions 서비스 정보 입력 항목- 영문 소문자 시작하며 영문 소문자, 숫자, 특수문자(
요약 패널에서 생성한 상세 정보와 예상 청구 금액을 확인하고, 완료 버튼을 클릭하세요.
- 생성이 완료되면, Cloud Functions 목록 페이지에서 생성한 자원을 확인하세요.
Cloud Functions 상세정보 확인하기
Cloud Functions 상세 페이지는 상세 정보, 모니터링, 로그, 코드, 구성, 트리거, 태그, 작업이력 탭으로 구성되어 있습니다.
Cloud Functions 서비스의 상세 정보를 확인하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 상세 정보를 확인할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- Function 상세 페이지에는 상태 정보 및 부가 기능 정보가 표시되며, 상세 정보, 모니터링, 로그, 코드, 구성, 트리거, 태그, 작업이력 탭으로 구성됩니다.
구분 상세 설명 Cloud Functions 상태 Cloud Functions의 상태 정보 - Ready: 녹색 아이콘, 정상적인 함수 호출이 가능한 상태
- Not Ready: 회색 아이콘, 정상적인 함수 불가능한 상태
- Deploying: 황색 아이콘, 함수 생성 또는 변경 중인 상태로써 다음 동작으로 발동
- 함수 생성 및 수정
- 코드 탭에서 편집기로 코드 수정
- 코드 탭에서 jar 파일 검사
- 트리거 탭에서 추가 및 변경
- 구성 탭에서 변경
- Running: 청색 아이콘, 정상적인 함수 호출이 가능하고 콜드 스타트 방지 정책이 적용된 상태
서비스 해지 서비스를 해지하는 버튼 표. Cloud Functions 상태 정보 및 부가 기능
- Function 상세 페이지에는 상태 정보 및 부가 기능 정보가 표시되며, 상세 정보, 모니터링, 로그, 코드, 구성, 트리거, 태그, 작업이력 탭으로 구성됩니다.
상세 정보
Function 목록 페이지에서 선택한 자원의 상세 정보를 확인하고, 필요한 경우 정보를 수정할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| 서비스 | 서비스명 |
| 자원 유형 | 자원 유형 |
| SRN | Samsung Cloud Platform에서의 고유 자원 ID |
| 자원명 | 자원 이름
|
| 자원 ID | 서비스의 고유 자원 ID |
| 생성자 | 서비스를 생성한 사용자 |
| 생성 일시 | 서비스를 생성한 일시 |
| 수정자 | 서비스를 수정한 사용자 |
| 수정 일시 | 서비스를 수정한 일시 |
| Function명 | Cloud Function의 이름 |
| Runtime | Runtime 종류 및 버전 |
| LLM Endpoint | 이용 가이드를 클릭하여 LLM Endpoint 정보 및 사용 방법 확인 가능 |
모니터링
Function 목록 페이지에서 선택한 자원의 Cloud Functions 사용 정보를 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| 호출수 | 단위 시간 동안 해당 Function이 호출된 평균 횟수(건) |
| 실행시간 | 단위 시간 동안 해당 Function을 실행한 평균 실행 시간(초) |
| 메모리 사용량 | 해당 Function 실행하는 중 중 단위 시간 동안 사용한 평균 메모리 사용량(kb) |
| 현재 작업수 | 함수가 동시에 여러 번 호출될 경우, 동시 처리를 위해 단위 시간 동안 생성된 작업의 평균 횟수(건) |
| 성공 호출수 | 함수 호출 시 단위 시간 동안 런타임 코드가 정상적으로 동작하여 응답 코드를 전달한 평균 횟수(건) |
| 실패 호출수 | 함수 호출 시 단위 시간 동안 오류가 발생한 평균 호출 횟수
|
로그
Function 목록 페이지에서 선택한 자원의 Cloud Functions 로그를 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| 단위 기간 | Cloud Functions의 로그 정보를 확인할 기간 선택
|
| 로그 메시지 | 최근 발생 함수부터 순서대로 표시됩니다. |
코드
Function 목록 페이지에서 선택한 자원의 Cloud Functions 코드를 확인하고 수정할 수 있습니다.
사용 Runtime에 따라 소스 코드 확인 및 편집 방식이 달라집니다.
- 인라인 편집기: Node.js, Python, PHP, Go
- 압축파일(.jar/.zip) 실행: Java
| 구분 | 상세 설명 |
|---|---|
| 소스 코드 | 인라인 편집기 방식 |
| 코드 정보 | 코드 정보를 표시 |
| 수정 | 수정 버튼을 클릭한 후, 인라인 편집기에서 코드 수정 가능 |
| 구분 | 상세 설명 |
|---|---|
| 소스 코드 | 압축파일(.jar/.zip) 실행 방식 |
| 코드 정보 | 압축 파일 정보 표시
|
| 수정 | Jar 파일 변경 가능
|
- Java Runtime의 경우 UI 코드 편집 기능을 제공하지 않으며, Object Storage 서비스의 버킷에서 압축파일(.jar/.zip) 파일을 선택해야 합니다.
- Object Storage 서비스의 인증키가 생성되지 않은 사용자의 경우, Object Storage에서 가져오기를 실행할 수 없으므로, 사전에 인증키를 생성해야 합니다.
- 인증키 생성에 대한 자세한 내용은 인증키 생성하기를 참고하세요.
- Cloud Functions 서비스에 대한 Object Storage 버킷의 접근제어를 허용 상태로 변경해야 합니다.
- Object Storage 접근 제어에 대한 자세한 내용은 Cloud Functions 서비스 접근 허용하기를 참고하세요.
구성
Function 목록 페이지에서 선택한 자원의 Cloud Functions 구성을 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| 일반 구성 | Cloud Function의 메모리와 제한 시간 설정
|
| 환경 변수 | 런타임 환경 변수를 설정
|
| 함수 URL | 함수에 접근 가능한 HTTPS URL 주소 발급
|
| Private 연결 구성 | PrivateLink Service와 연계하여 사용 가능
|
- 일반 구성의 메모리 할당량에 비례하는 CPU 코어 갯수가 자동으로 할당됩니다.
- 일반 구성의 실행 최소 수가 1이상 일 경우 Cold Start가 방지 되지만, 지속적으로 비용이 부과됩니다.
트리거
Function 목록 페이지에서 선택한 자원의 트리거 정보를 확인하고 설정할 수 있습니다. 트리거를 설정하면 이벤트 발생 시 Function을 자동으로 실행할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| Cronjob | Cronjob을 트리거로 사용
|
| API Gateway | API Gateway를 트리거로 사용
|
- Deploying 상태일 경우, 수정할 수 없습니다.
- 트리거 설정에 대한 트리거 설정하기를 참고하세요.
태그
태그 탭에서 자원의 태그 정보를 확인하고, 추가하거나 변경 또는 삭제할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| 태그 목록 | 태그 목록
|
작업 이력
작업 이력 페이지에서 자원의 작업 이력을 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|---|
| 작업 이력 목록 | 자원 변경 이력
|
Java Runtime 코드 변경하기
Java Runtime을 사용하는 경우, 코드를 직접 수정할 수 없으므로 Object Storage 서비스의 버킷에서 압축 파일(.jar/.zip)을 선택하여 변경해야 합니다.
압축 파일을 변경하는 방법은 다음 절차를 따르세요.
Cloud Functions 서비스를 해지하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 코드 내 압축 파일을 변경할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- Function 상세 페이지의 코드 탭에서 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- Object Storage에서 가져오기 버튼을 클릭하세요. Object Storage에서 가져오기 팝업창이 열립니다.
| 구분 | 상세 설명 |
|---|---|
| Java Runtime | Java Runtime 정보 |
| Handler 정보 | Handler 정보
|
| 압축파일(.jar/.zip) | 변경할 압축 파일을 설정
|
- Object Storage URL에 압축 파일을 가져올 Object Storage의 URL 정보를 입력한 후, 확인 버튼을 클릭하세요. 알림 팝업창이 열립니다.
- URL 정보는 가져올 Object Storage의 상세 페이지의 폴더 리스트 탭에서 파일 정보 > Private URL 항목에서 확인할 수 있습니다.
- 확인 버튼을 클릭하세요. Function 코드 수정 페이지의 **압축파일명(.jar/.zip)**에 가져온 압축 파일의 이름이 표시됩니다.
- 저장 버튼을 클릭하세요.
- 인증키가 생성되지 않은 사용자의 경우, Object Storage에서 가져오기를 실행할 수 없습니다.
- URL이 존재하지 않거나 압축 파일이 다음에 해당하는 경우, 변경할 수 없습니다.
- 지원하지 않는 확장자를 사용하는 경우
- 압축 파일 내 유해한 파일이 있는 경우
- 지원 가능한 크기를 초과한 경우
Cloud Functions 해지하기
Cloud Functions 서비스를 해지하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 해지할 자원을 클릭하고 서비스 해지 버튼을 클릭하세요.
- 해지가 완료되면 Function 목록 페이지에서 자원이 해지되었는지 확인하세요.
2.1 - 트리거 설정하기
트리거 설정하기
- 기본적으로 모든 트리거는 Cloud Functions에서 추가할 수 있습니다.
- 만약 특정 상품에서 트리거할 경우, Cloud Functions에 전달해야 합니다.
Cronjob 트리거 설정하기
Cronjob 트리거를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요.로 설정하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류에서 Cronjob을 선택하세요. 하단에 필수 정보 입력 영역이 나타납니다.
구분 상세 설명 Cronjob 설정 트리거의 반복 빈도를 설정 - 분, 시간, 일, 월, 요일 단위로 설정 가능
Timezone 설정 트리거의 기준 시간대를 설정 표. Cronjob 트리거 필수 정보 항목 - 필수 정보를 입력한 후, 확인 버튼을 클릭하세요.
- 추가를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
API Gateway 트리거 설정하기
API Gateway 트리거를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요.로 설정하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류에서 API Gateway을 선택하세요. 하단에 필수 정보 입력 영역이 나타납니다.
구분 상세 설명 API명 API 선택 - 기존에 생성된 API를 선택하거나 새로 생성 가능
스테이지 배포 대상 선택 - 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
표. API Gateway 트리거 필수 정보 항목 - 필수 정보를 입력한 후, 확인 버튼을 클릭하세요.
- 추가를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
멀티 트리거 설정하기
하나의 함수에 여러개의 트리거를 연결하여 사용할 수 있습니다.
트리거 수정하기
추가된 트리거를 수정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 수정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 목록에서 설정값을 수정할 트리거의 수정 버튼을 클릭하세요. 트리거 수정 팝업창이 열립니다.
- 트리거 수정 팝업창에서 설정값을 수정한 후, 확인 버튼을 클릭하세요.
- 설정값은 트리거의 종류에 따라 달라집니다(Cronjob 트리거, API Gateway 트리거 참고).
- 수정을 알리는 팝업창이 열리면 확인을 클릭하세요.
트리거 삭제하기
트리거를 삭제하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭의 트리거 목록에서 삭제할 트리거를 선택한 후, 삭제 버튼을 클릭하세요.
- 트리거 삭제를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
2.2 - AIOS 연계하기
AIOS 연계하기
Cloud Functions와 AIOS를 연계하여 LLM을 활용할 수 있습니다.
AIOS LLM 프라이빗 엔드포인트
AIOS LLM 프라이빗 엔드포인트의 URL은 다음과 같습니다.
- Samsung Cloud Platform for Samsung: https://aios.private.kr-west1.s.samsungsdscloud.com
- Samsung Cloud Platform for Enterprize: https://aios.private.kr-west1.e.samsungsdscloud.com
AIOS 서비스의 리전별 제공 여부와 제공 모델에 대한 자세한 내용은 다음을 참조하세요.
- 리전별 AIOS 서비스의 제공 여부: AIOS 서비스 - 리전별 제공 현황 참고
- AIOS 서비스 제공 LLM 모델: AIOS 서비스 - LLM 제공 모델 참고
Blueprint 소스코드 변경하기
Cloud Functions와 AIOS를 연계하려면 각 리전 내 사용하는 LLM Endpoint에 맞춰 Blueprint에 있는 URL 주소를 변경해야 합니다. Blueprint 소스코드를 변경하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Cloud Functions 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 URL로 호출할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 코드 탭을 클릭하여 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 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 body | Request Body를 파싱합니다. | PHP 미지원 |
| Send HTTP requests | Cloud 함수에서 HTTP 요청을 전송합니다. | PHP 미지원 |
| Print logs | 사용자의 Samsung Cloud Platform Console Request를 로그로 출력합니다. | PHP 미지원 |
| Throw a custom error | 에러 로직을 직접 입력하여 에러를 처리합니다. | |
| Using Environment Variable | Cloud 함수 내에 환경 변수를 구성하여 실행합니다. |
Hello World
Hello World 응답 받기 설정 및 함수 호출 예시(함수 URL 이용)를 설명합니다.
Hello World 설정하기
Hello World를 설정하려면 다음 절차를 따르세요.
모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
Function 목록 페이지에서 URL로 호출할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
구성 탭을 클릭한 후, 함수 URL 항목의 수정 버튼을 클릭하세요. 함수 URL 수정 팝업창이 열립니다.
함수 URL 수정 팝업창에서 활성화 여부를 사용으로 설정한 후, 확인 버튼을 클릭하세요.
구분 상세 설명 활성화 여부 함수 URL의 사용 여부를 설정 인증 유형 함수 URL에 대한 요청 시 IAM 인증 사용 여부 선택 접근 제어 접근 가능한 IP를 추가하여 관리 가능 - 사용으로 설정한 후, 퍼블릭 접근 IP 입력 및 추가 가능
표. 트리거 추가 시 필수 입력 항목코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 소스코드
- Node.js 소스코드
함수 호출 확인하기
Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 응답을 확인합니다.
Hello Serverless World!
Execution after timeout
제한시간 이후 함수 실행(Execution after timeout) 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.
Execution after timeout 설정하기
Execution after timeout을 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
- 필수 정보는 트리거 종류에 따라 달라집니다.
트리거 종류 입력 항목 API Gateway - API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
- 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
Cronjob - 예시를 참고하여 트리거의 반복 빈도(분, 시, 일, 월, 요일)를 입력
- Timezone 설정: 적용할 기준 시간대를 선택
표. 트리거 추가 시 필수 입력 항목
- 필수 정보는 트리거 종류에 따라 달라집니다.
- 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 소스코드
- Node.js 소스코드
함수 호출 확인하기
Function 상세 페이지의 구성 탭에서 함수 URL을 호출하고 일정 시간이 지난 후, 응답을 확인합니다.
Hello Serverless World!
HTTP request body
Request Body 파싱하기 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.
HTTP request body 설정하기
HTTP request body를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
- 필수 정보는 트리거 종류에 따라 달라집니다.
트리거 종류 입력 항목 API Gateway - API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
- 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
Cronjob - 예시를 참고하여 트리거의 반복 빈도(분, 시, 일, 월, 요일)를 입력
- Timezone 설정: 적용할 기준 시간대를 선택
표. 트리거 추가 시 필수 입력 항목
- 필수 정보는 트리거 종류에 따라 달라집니다.
- 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 소스코드
- Node.js 소스코드
함수 호출 확인하기
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를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
- 필수 정보는 트리거 종류에 따라 달라집니다.
트리거 종류 입력 항목 API Gateway - API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
- 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
Cronjob - 예시를 참고하여 트리거의 반복 빈도(분, 시, 일, 월, 요일)를 입력
- Timezone 설정: 적용할 기준 시간대를 선택
표. 트리거 추가 시 필수 입력 항목
- 필수 정보는 트리거 종류에 따라 달라집니다.
- 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 소스코드
- Node.js 소스코드
함수 호출 확인하기
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 설정하기
Print logs 응답 받기를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
- 필수 정보는 트리거 종류에 따라 달라집니다.
트리거 종류 입력 항목 API Gateway - API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
- 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
Cronjob - 예시를 참고하여 트리거의 반복 빈도(분, 시, 일, 월, 요일)를 입력
- Timezone 설정: 적용할 기준 시간대를 선택
표. 트리거 추가 시 필수 입력 항목
- 필수 정보는 트리거 종류에 따라 달라집니다.
- 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 responseimport 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 responsePrint logs - Python 소스코드
- Node.js 소스코드
함수 호출 확인하기
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를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
- 필수 정보는 트리거 종류에 따라 달라집니다.
트리거 종류 입력 항목 API Gateway - API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
- 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
Cronjob - 예시를 참고하여 트리거의 반복 빈도(분, 시, 일, 월, 요일)를 입력
- Timezone 설정: 적용할 기준 시간대를 선택
표. 트리거 추가 시 필수 입력 항목
- 필수 정보는 트리거 종류에 따라 달라집니다.
- 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 소스코드
- Node.js 소스코드
함수 호출 확인하기
Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 로그 탭에서 에러 발생 여부를 확인합니다.
Using Environment Variable
환경 변수 사용(Using Environment Variable) 설정 및 함수 호출 예시(함수 URL 사용)를 설명합니다.
Using Environment Variable 설정하기
Using Environment Variable를 설정하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 트리거를 설정할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- 트리거 탭을 클릭한 후, 트리거 추가 버튼을 클릭하세요. 트리거 추가 팝업창이 열립니다.
- 트리거 추가 팝업창에서 트리거 종류 항목을 선택한 후, 하단에 표시되는 필수 정보를 입력하고 확인 버튼을 클릭하세요.
- 필수 정보는 트리거 종류에 따라 달라집니다.
트리거 종류 입력 항목 API Gateway - API명: 기존에 생성된 API를 선택하거나 새로 생성 가능
- 스테이지: 기존에 생성된 스테이지를 선택하거나 새로 생성 가능
Cronjob - 예시를 참고하여 트리거의 반복 빈도(분, 시, 일, 월, 요일)를 입력
- Timezone 설정: 적용할 기준 시간대를 선택
표. 트리거 추가 시 필수 입력 항목
- 필수 정보는 트리거 종류에 따라 달라집니다.
- 코드 탭으로 이동한 후, 수정 버튼을 클릭하세요. Function 코드 수정 페이지로 이동합니다.
- 성공 및 실패 케이스에 대한 처리 로직을 추가한 후, 저장 버튼을 클릭하세요.
- 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 소스코드
- Node.js 소스코드
- 구성 탭으로 이동한 후, 환경 변수 영역의 수정 버튼을 클릭하세요. 환경 변수 수정 팝업창이 열립니다.
- 환경 변수 정보를 입력한 후, 확인 버튼을 클릭하세요.
구분 상세 설명 이름 Key값을 입력 값 Value값을 입력 표. 환경 변수 입력 항목
함수 호출 확인하기
Function 상세 페이지의 구성 탭에서 함수 URL을 호출한 후, 로그 탭에서 환경 변수값을 확인합니다.
2.4 - PrivateLink 서비스 연계하기
Cloud Functions와 PrivateLink 서비스를 연계하여 Samsung Cloud Platform 내부의 VPC와 VPC, VPC와 서비스를 외부 인터넷 없이 연결할 수 있습니다.
데이터가 내부 네트워크만 이용하게되어 보안성이 높고, 퍼블릭 IP, NAT, VPN, 인터넷 게이트웨이 등이 필요하지 않습니다.
PrivateLink 서비스 활성화하기
PrivateLink Service를 연계하기 위해 서비스를 먼저 활성화해야 합니다.
PrivateLink 서비스를 활성화하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 PrivateLink를 연계할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- Function 상세 페이지에서 구성 탭을 클릭하세요.
- Private 연결 구성에서 PrivateLink Service의 수정 버튼을 클릭하세요. PrivateLink Service 수정 팝업창이 열립니다.
- PrivateLink Service 수정 팝업창에서 활성화 여부의 사용 항목을 체크한 후, 확인 버튼을 클릭하세요. 구성 탭의 Private 연결 구성에 PrivateLink Service 정보가 표시됩니다.
| 구분 | 상세 설명 |
|---|---|
| Private URL | PrivateLink Service URL 정보 |
| PrivateLink Service ID | PrivateLink Service ID 정보 |
| 요청 Endpoint 관리 | PrivateLink Service 연결을 요청한 PrivateLink Endpoint 목록
|
PrivateLink 서비스 연계하기
PrivateLink Service를 연계하여 함수를 다른 VPC에서 프라이빗하게 접근할 수 있도록 노출시킬 수 있습니다.
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-keyx-scf-secret-key
PrivateLink Endpoint 생성하기
사용자 VPC의 PrivateLink Service에 접근하기 위한 Entry Point를 생성합니다.
PrivateLink Endpoint를 생성하려면 다음 절차를 따르세요.
- 모든 서비스 > Compute > Cloud Functions 메뉴를 클릭하세요. Cloud Functions의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Function 메뉴를 클릭하세요. Function 목록 페이지로 이동합니다.
- Function 목록 페이지에서 PrivateLink를 연계할 자원을 클릭하세요. Function 상세 페이지로 이동합니다.
- Function 상세 페이지에서 구성 탭을 클릭하세요.
- Private 연결 구성에서 PrivateLink Endpoint의 추가 버튼을 클릭하세요. PrivateLink Endpoint 추가 팝업창이 열립니다.
- PrivateLink Service 추가 팝업창에서 PrivateLink Service ID와 Alias 정보를 입력한 후, 확인 버튼을 클릭하세요.
- 생성을 알리는 팝업창이 열리면 확인 버튼을 클릭하세요. 구성 탭의 Private 연결 구성에 PrivateLink Endpoint 정보가 표시됩니다.
| 구분 | 상세 설명 |
|---|---|
| PrivateLink Endpoint ID | PrivateLink Endpoint ID 정보 |
| PrivateLink Service ID | PrivateLink Service ID 정보 |
| Alias | PrivateLink Endpoint 접근을 위해 IP 주소 대신 사용 가능한 hostalias 정보 |
| 상태 | 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)
});
}
});
});
}3 - API Reference
4 - CLI Reference
5 - Release Note
Cloud Functions
- AIOS 서비스와 연계하여 함수를 이용할 수 있습니다.
- Cloud Functions와 AIOS를 연계하여 LLM을 활용할 수 있습니다.
- PrivateLink 서비스와 연계하여 함수를 이용할 수 있습니다.
- Private 연결(PrivateLink)을 통해 Samsung Cloud Platform의 VPC와 VPC, VPC와 서비스 사이에 인터넷을 거치지 않고 내부적 연결할 수 있습니다.
- Java Runtime 실행 파일을 업로드하는 기능이 추가되었습니다.
- Object Storage에 Java Runtime 실행 압축 파일(.jar/.zip)을 가져와서 설정할 수 있습니다.
- Cloud Functions 서비스를 정식 출시하였습니다.
- 서버 프로비저닝 필요 없이 함수 형태의 애플리케이션을 간편하게 실행하는 서버리스 컴퓨팅 기반의 FaaS (Function as a Service)입니다.
