- 인쇄
- PDF
Cloud Functions FAQ
- 인쇄
- PDF
사용 가이드를 읽기 전 자주 하는 질문에 대한 답변으로 궁금증을 빠르게 해소할 수 있습니다. 만약 다음의 자주 하는 질문에서 원하는 답을 얻지 못한 경우 사용 가이드에서 원하는 내용을 찾아서 확인해 보십시오.
Cloud Functions FAQ는 다음과 같은 몇 가지 주제로 구성되어 있습니다.
서비스 일반
Cloud Functions에 대해 일반적으로 자주하는 질문과 답변은 다음과 같습니다.
Q. Cloud Functions은 어떤 용도로 사용할 수 있습니까?
A. Cloud Functions과 연동된 서비스에 따라 웹 서버나 API 서버, 로그 저장용 Rule 서버, 배치 작업 등 조합에 따라 다양한 용도로 사용할 수 있습니다. 서비스 단위를 작게 나눌 수 있다면 일반적인 마이크로 프로그래밍 형태로 작성하여 좀 더 큰 비지니스 로직의 구현도 가능합니다.
Q. Cloud Functions는 어떤 사용자가 이용하면 더욱 유용합니까?
A. 서버 구입이나 구축에 부담이 있는 스타트 업이나 서버 관리가 힘든 영세 상인, 대학생 등 간단히 코드를 작성하여 서비스를 제작해 보고 싶은 누구에게나 좋습니다. 사용량이 많아지기 전까지 수익 창출이 힘든 앱이나 게임에서도 유용하게 사용할 수 있습니다.
시스템
시스템과 관련하여 자주하는 질문과 답변은 다음과 같습니다.
Q. Native Library의 사용이 가능합니까?
A. 런타임 환경에 기본적으로 포함되지 않은 Native Library는 액션 코드 첨부 파일에 포함할 수 있습니다. 하지만 런타임별 실행 환경이 상이하고 별도 고지없이 변경될 수 있으므로 사용을 권장하지 않습니다.
Q. 런타임별 지원하는 운영체제 종류와 버전이 있습니까?
A. 런타임별 지원하는 운영체제 종류와 버전은 내부 정책에 따라 변경 가능성이 있기 때문에 운영체제 환경에 독립적인 코드 작성을 권장합니다.
제한 사양
제한 사양과 관련하여 자주하는 질문과 답변은 다음과 같습니다.
Q. 코드 사이즈의 제한이 있습니까?
A. Cloud Functions 사용 준비를 참고해 주십시오.
Q. CPU 사용량 제한이 있습니까?
A. CPU 사용량은 메모리 사용량에 비례하며 제약 사항은 별도로 존재하지 않습니다. 또한 내부 인프라 및 다른 액션 동작 여부 등에 영향을 받아 특정한 값으로 한정하기 어렵습니다. 다만 액션 컨테이너에서 사용할 수 있는 최대 프로세스 개수는 1,024개로 제한하고 있습니다.
네트워크
Cloud Functions를 이용하는 네트워크 환경 구성과 관련하여 자주하는 질문과 답변은 다음과 같습니다.
Q. ACG에서 Cloud Functions 액션만 허용이 가능하도록 설정할 수 있습니까?
A. ACG에서 인바운드 접근 소스에 cloudfunctions-vpc-<VPC_ID> ACG 그룹을 추가하거나, VPC 환경인 경우 Cloud Functions 액션에 연결된 VPC나 VPC Subnet 대역대를 ACG 인바운드 접근 소스로 설정할 수 있습니다.
Q. 액션이 실행되는 서버 IP 대역대나 IP 규칙이 있습니까?
A. IP 대역대는 실행하는 상황에 따라 내부 스케줄링 알고리즘에 의해 결정되기 때문에 특정하기 어렵습니다. IP 규칙은 Cloud Functions를 VPC 환경에서 이용 중인 경우 위 ACG 관련 설정에 대한 답변을 참고해 주십시오.
Q. VPC 환경의 Cloud Functions에서 NAT G/W 없이 Ncloud API를 호출할 수 있습니까?
A. VPC 환경에 생성한 Cloud Functions 액션에서는 별도 NAT G/W 없이 Ncloud API를 호출할 수 있습니다. 추가로, Object Storage 프라이빗 엔드포인트로도 인터넷 연결 없이 내부망을 통해 접근할 수 있습니다. Object Storage에 대한 자세한 내용은 Object Storage 사용 가이드를 참조해 주십시오.
로그
로그와 관련하여 자주하는 질문과 답변은 다음과 같습니다.
Q. 실행 결과 로그를 다운로드할 수 있습니까?
A. Cloud Functions 실행 결과 로그는 네이버 클라우드 플랫폼의 Cloud Log Analytics에 저장됩니다. Cloud Log Analytics에서 엑셀 파일로 다운로드하거나 Object Storage의 내보내기 기능을 활용하여 다운로드할 수 있습니다.
리소스
액션, 트리거, 패키지과 관련하여 자주하는 질문과 답변은 다음과 같습니다.
Q. Java, C#을 이용하여 액션은 어떻게 생성할 수 있습니까?
A. Java의 경우 Jar 빌드 시 외부 라이브러리 jar가 모두 포함된 uber(fat) jar 형태로 패키징하여 액션을 생성할 수 있습니다. C#은 dotnet add package
명령어를 통해서 필요 패키지를 추가하여 액션을 생성할 수 있습니다. Java, C# 외에 런타임별 액션 생성 방법은 이 가이드의 Cloud Functions 예제 > 런타임별 액션 생성과 활용을 참고해 주십시오.
Q. 액션에서 특정 경로에 위치한 파일을 사용하거나 참조할 수 있습니까?
A. Cloud Functions 실행 환경은 stateless하여 실행되는 호스트의 특정 경로에 일부 파일을 영구적으로 위치하여 사용할 수 없습니다. Object Storage와 같은 Cloud Storage 사용을 권장합니다. 다만 외부 라이브러리 사용처럼 압축 파일에 필요한 파일을 첨부하고 코드에서 상대 경로로 참조할 수 있습니다.
Q. DB Connection과 같이 비용이 많이 드는 리소스의 재활용이 가능합니까?
A. 각각의 액션 실행은 stateless하기 때문에 커넥션 유지를 보장할 수 없습니다. 따라서 액션 호출이 잦을 경우 실행 속도 향상을 위해서 실행된 컨테이너를 재활용하고 첨부된 코드와 같이 커넥션을 재활용할 수는 있지만 명시적으로 커넥션 종료가 되지 않아 장애의 요인이 될 수 있기 때문에 사용을 권장하지 않습니다. 다음 예제 코드를 참고해 주십시오.
from kafka import KafkaProducer
from kafka.errors import KafkaError
import json, requests
# Create NAVER Cloud Data Streaming Service connection
producer = None
def main(args):
try:
reuse = True
global producer
if producer is None:
reuse = False
producer = KafkaProducer(
bootstrap_servers=['10.0.20.6:9092', '10.0.20.7:9092', '10.0.20.8:9092'],
acks=1,
value_serializer=lambda v: json.dumps(v, ensure_ascii = False).encode('utf-8'),
key_serializer=lambda k: k.encode('utf-8'))
# Send messages
producer.send('iot.demo', key=args['deviceId'], value=args)
producer.flush()
# Return a result
return {"result": "success", "reuse": reuse}
except Exception as ex:
# Return an error result
return {"result": "error", "error": str(ex)}
연동 서비스
연동 서비스에 관련하여 자주 하는 질문과 답변은 다음과 같습니다.
Q. API Gateway를 통해 실행된 액션의 결과값을 HTTP Response Body로 받으려면 어떻게 해야 합니까?
A. HTTP Request Query Parameter로 "blocking=true&result=true" 값을 추가해 주십시오. 다만 액션이 1분 이상 실행되어 HTTP Request가 1분을 넘어 가면 activationId(실행 UUID) 값만 Response로 전달됩니다.
Q. API Gateway를 통해 실행된 액션의 HTTP Response Header를 커스터마이징할 수 있습니까?
A. 액션 설정 중 웹 액션 설정을 활성화 한 후 웹 액션의 타입을 json이 아닌 http로 요청하면 다음 예제 코드와 같이 Response Header, Body 등을 정의할 수 있습니다.
function main(params) {
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json', 'Custom-Header': 'Cloud Functions' },
body: { 'name': 'NAVER CLOUD'}
};
}
Q. Cloud Functions 코드에 다른 서비스를 연동할 수 있습니까?
A. 액션 코드 내에서 전달되거나 가공된 데이터를 연동하고자 하는 서비스의 OpenAPI로 호출하여 연동할 수 있습니다. 서비스별 OpenAPI 사용 방법은 API 가이드를 참고해 주십시오.