Cloud Function??
클라우드에서 코드를 실행하는 서버리스 서비스로, HTTP 혹은 이벤트에 의해 트리거 시킬 수 있다. AWS에서 Lambda와 같은 서비스라고 생각했다.
https://cloud.google.com/functions/docs/concepts/overview?hl=ko
Cloud Functions 개요 | Cloud Functions Documentation | Google Cloud
검색을 단순화하고 문서 이용 환경을 개선하기 위해 1세대 및 2세대 문서가 개별 집합으로 분할됩니다. 의견 보내기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류
cloud.google.com
Function 만들기
1. GCP 콘솔에서 Cloud Function 검색 후 접속 → 함수 만들기
2. 환경에서 2세대 선택
- 2세대는 Cloud Run 및 Eventarc에서 제공하는 서비스로서의 기능 제품이라고 한다.
- 1세대보다 향상된 인프라와 더 넓은 지원범위를 지원하며, 신규 함수에 대해서는 2세대 선택을 권장한다.
(https://cloud.google.com/functions/docs/concepts/version-comparison?hl=ko)
3. 함수이름, 리전 설정후 트리거 유형 선택
- HTTPS: HTTP(S) 요청에 대한 응답으로 함수를 실행할 수 있다.
- Pub/Sub 트리거: Pub/Sub 메시지에 대한 응답으로 함수를 호출할 수 있다.
- Cloud Storage 트리거: Cloud Storage의 변경사항에 대한 응답으로 함수를 호출할 수 있다.
- Firestore 트리거: Firestore 데이터베이스의 이벤트에 의해 트리거
4. 인증에서 인증 필요 선택 - IAM으로 승인된 호출자만 호출 가능하도록 설정
- 인증되지 않은 호출은 IAM 권한과 관계없이 누구나 호출가능한 공개된 API를 만들때 적합하다.
5. 런타임 설정
- 런타임 서비스 계정: 해당 함수가 다른 GCP 서비스에 대한 필요한 권한을 가지는 서비스 계정을 선택하거나 생성
- 런타임 설정들은 필요에 맞게 설정하면 됨. 여기서는 기본값으로 설정하고 넘어감
6. 코드 작성 후 배포
- 코드에서 Python 3.11 선택 후 코드 편집
import functions_framework
@functions_framework.http
def hello_get(request):
return "Hello World!"
- 필요한 라이브러리는 requirments.txt에 기재
호출 테스트
위에서 인증을 요구하는 함수로 설정하였기 때문에, id token을 발급받아서 header값에 넣어서 요청해주어야한다. 이때, Function 호출을 위한 id token을 발급받기 위해서는 Cloud Function 호출 권한이 있는 IAM Service Account 혹은 User가 필요하다.
1. 함수를 호출하려는 사용자 혹은 서비스 계정에 아래 권한이 부여되어 있는지 확인하고, 없다면 추가
- 1세대: cloudfunctions.functions.invoke (Cloud Functions 호출자 역할로 사용가능)
- 2세대: run.routes.invoke (Cloud Run 호출자 역할로 사용가능)
2. 아래와 같은 세팅이 되어 있는 상태에서 코드를 실행하여 호출 결과를 확인 할 수있음
- Cloud Run 호출자 역할을 가진 사용자로 Gcloud CLI를 통한 ADC(어플리케이션 기본 사용자 인증 정보) 설정
(https://cloud.google.com/docs/authentication/provide-credentials-adc?hl=ko#google-idp)
import urllib
import google.auth.transport.requests
import google.oauth2.id_token
"""
CloudFuntion의 HTTP 인증 호출을 하기 위한 token 가지고 와서 URL을 호출
CloudFuntion에서는 endpoint와 audience가 function's URL로 동일하다.
"""
audience = "<Function URL>"
endpoint = audience
req = urllib.request.Request(endpoint)
# google 라이브러리를 활용해서 인증
auth_req = google.auth.transport.requests.Request()
id_token = google.oauth2.id_token.fetch_id_token(auth_req, audience)
req.add_header("Authorization", f"Bearer {id_token}")
response = urllib.request.urlopen(req)
print(response)
'Google Cloud Platform' 카테고리의 다른 글
파이썬에서 Google GCS에 파일 업로드 (0) | 2024.05.05 |
---|