1. 소개
이 실습에서는 Google Cloud의 AI 기반 공동작업 도구인 Gemini를 사용하여 오류 로그를 분석하고, 문제의 근본 원인을 식별하고, 해결 방법을 찾아 Cloud 함수 배포 문제를 해결합니다.
실습할 내용…
- Cloud Shell 터미널과 gcloud CLI를 사용하여 관련 Google API를 사용 설정하고 제공된 코드로 Cloud 함수를 만드는 등 환경을 설정합니다.
- 캡처된 정보를 이해하기 위해 Cloud Logging 로그 요약을 사용하여 로그 요약을 생성합니다.
- Gemini와 채팅하여 문제 해결 및 해결을 위해 Gemini의 도움을 받습니다.
학습할 내용…
- Google Cloud Observability와 함께 Gemini를 사용하고 문제를 해결하는 방법을 알아봅니다.
- Gemini의 도움을 받아 Cloud 함수 로그를 찾고 이해하는 방법을 알아봅니다.
필요한 항목…
- Chrome 웹브라우저
- 결제가 사용 설정된 Google Cloud 프로젝트
- API를 사용 설정하고 리소스를 조작할 수 있도록 프로젝트에 대한 액세스 권한이 있는 Google 계정
이 실습은 초보자를 포함한 모든 수준의 DevOps 및 플랫폼 엔지니어와 소프트웨어 개발자를 대상으로 합니다. 문제 해결 과정에서 Gemini의 기능을 직접 경험하는 데 중점을 두겠습니다.
2. 설정
이 섹션에서는 실습을 시작하는 데 필요한 모든 사항을 다룹니다.
환경 구성
1. https://console.cloud.google.com을 열어 Cloud 콘솔에 로그인합니다.
2. 이 실습에서 사용할 Google Cloud 프로젝트를 선택합니다.
3. 콘솔에서 Cloud Functions 페이지를 엽니다. 탐색 메뉴 (왼쪽 상단 아이콘 ❯ 콘솔 창의 왼쪽 상단)에서 Cloud Functions를 선택하면 됩니다.
또는 'Cloud Functions'를 검색해도 됩니다. 를 입력합니다.
함수 목록 상단의 '함수 만들기' 버튼을 클릭합니다.
이전에 이 프로젝트에서 Cloud Functions를 사용한 적이 없는 경우 작업을 위해 Google API를 사용 설정하라는 메시지가 표시됩니다.
계속하려면 '사용 설정'을 클릭하세요.
4. 새 Cloud 함수의 기본 속성을 정의합니다.
- 이름을 '
codelab-cf
'(으)로 설정합니다. - 인증되지 않은 호출 허용 옵션을 선택합니다.
단계를 완료하려면 창의 왼쪽 하단 영역에 있는 '다음' 버튼을 클릭합니다.
'다음'을 클릭하면 추가 Google API를 사용 설정하라는 메시지가 표시될 수 있습니다. 4단계에서와 같이 사용을 클릭합니다.
Cloud 함수의 런타임 및 코드 설정
이 Codelab에서는 Python을 프로그래밍 언어로 사용합니다. Python에 익숙하지 않더라도 걱정하지 마세요. Python에 대한 지식이 없어도 이 Codelab을 완료할 수 있습니다.
5. Python 3.11을 함수의 런타임으로 선택
런타임이 변경되면 인라인 편집기에 표시되는 소스 코드가 변경됩니다.
6. 아래 코드를 인라인 편집기에 복사하여 자동 생성 빠른 시작 예를 수정하세요.
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
이 코드는 GET 요청에서 path
속성을 읽고, 버킷 이름을 가져올 경로를 파싱한 후 Google Cloud Storage API를 호출하여 이 경로에 저장된 객체의 목록을 가져옵니다. 이 함수 (get_object_list
)는 Flask 객체인 요청을 입력 인수로 받아 객체의 이름을 JSON 배열로 반환합니다.
7. 인라인 편집기에 있는 파일 목록에서 requirements.txt
파일을 선택합니다. 아래 코드를 인라인 편집기에 복사하여 현재 종속 항목 목록을 새 종속 항목으로 바꿉니다.
google-cloud-storage
8. Cloud 함수를 배포하려면 왼쪽 하단에서 배포를 클릭하세요.
배포 프로세스가 완료될 때까지 몇 분 정도 기다려야 할 수 있습니다. 설정 안내를 잘 따랐다면 배포가 실패로 보고될 것입니다.
3. 문제 찾기 및 해결
이 섹션에서는 로그 설명 기능과 기타 Gemini 지원을 사용하여 문제와 해결 방법을 식별합니다.
1. 배포에 실패합니다. 추가 정보와 배포 로그 확인 옵션을 알려주는 오류 메시지가 표시됩니다. '로그 보기'를 클릭하여 배포 로그를 확인합니다.
배포 로그는 동일한 브라우저의 별도의 탭에서 열립니다. 이 Codelab을 완료하려면 탭 간에 이동해야 합니다.
로그 보기를 클릭할 때 로그 줄이 표시되지 않거나 몇 줄만 표시될 수 있습니다. 이러한 이벤트의 경우 로그 탐색기의 쿼리 창에서 시간 범위 선택기를 사용하고 지난 30분을 선택합니다.
2. 열린 탭에서 로그를 검토합니다. 로그 요약이 예외 호출 스택의 여러 줄처럼 보이는 점에 유의하세요. Cloud 함수가 stdout
또는 stderr
에 출력된 텍스트를 캡처하고 각 줄을 별도의 로그 항목으로 작성하기 때문입니다. 기타 로그 행에는 종료 오류 코드에 대한 정보와 Cloud Functions 및 Cloud Run API에서 보고하는 추가 정보가 요약되어 있습니다.
행을 클릭하면 특정 로그에 대한 자세한 정보를 볼 수 있습니다. 확장된 로그에는 로그에 대한 모든 정보를 복사하고, 모든 필드를 펼쳐 로그 항목의 모든 데이터를 표시하고, Gemini를 사용하여 로그 항목을 설명할 수 있는 추가 UI 요소가 있습니다.
4. 예외 호출 스택은 그다지 유익하지 않습니다. 로그를 살펴보고 예외의 스택 트레이스 로그의 끝을 찾습니다. "Container called exit(1)
" 문장입니다. 다음 로그 요약은 다음과 같습니다.
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
조사해 보시기 바랍니다. 이 줄을 클릭하여 로그 항목을 펼칩니다. 그런 다음 '이 로그 항목 설명'을 클릭합니다. 버튼을 클릭하면 선택한 로그에 대한 추가 정보를 볼 수 있습니다.
이전에 이 프로젝트에서 Gemini를 사용한 적이 없는 경우 필수 API를 사용 설정하라는 메시지가 표시됩니다. API를 사용 설정하라는 메시지가 표시되면 사용 설정을 클릭하여 계속 진행합니다.
경우에 따라 Gemini에 메시지를 표시할 때 오류가 발생할 수 있습니다. 이러한 이벤트에서는 응답을 받으려면 프롬프트 작업을 한 번 더 반복합니다. 예를 들어 이 로그 항목 설명을 클릭합니다. 버튼을 다시 클릭합니다.
5. Gemini에서 제공한 설명을 검토합니다. 제공된 설명이 불충분하거나 불분명한 경우 다음 프롬프트 중 하나를 사용하거나 직접 질문을 작성하여 Gemini가 추가 정보를 제공하도록 요청합니다.
이 로그에 관한 추가 정보를 제공해 주실 수 있나요?
오류에 관한 추가 정보를 제공해 주실 수 있나요?
6. 그런 다음 Gemini에 문제 해결을 위한 제안을 요청합니다. 예를 들어 Gemini에게 질문해 보세요.
문제 해결 방법
오류 해결을 위한 해결 방법 제안
오류 해결 방법 제안
Gemini의 대답은 현재 컨텍스트와 프롬프트의 문구 및 형식에 따라 달라질 수 있습니다. Gemini는 Cloud 함수의 소스 코드에 이름이 hello_http
인 함수가 있는지 확인할 것을 권장합니다.
7. 현재 Cloud Functions 로그를 보여주는 탭이 표시됩니다. 오류가 있는 Cloud 함수 배포 페이지가 표시된 이전 탭을 선택하고 '수정'을 클릭합니다.
8. 인증이 여전히 인증되지 않은 호출 허용으로 설정되어 있는지 확인하고 필요한 경우 선택사항을 업데이트합니다.
9. 하단에 있는 '다음'을 클릭하여 인라인 편집기를 확인합니다. Gemini 추천을 따라 함수 이름을 get_order_list
에서 hello_http
로 변경합니다.
편집을 마친 후 '배포'를 클릭합니다.
배포 프로세스가 완료될 때까지 몇 분 정도 기다려야 할 수 있습니다. 배포가 성공적으로 완료되고 오류 메시지가 표시되지 않는지 확인합니다.
배포 프로세스가 완료될 때까지 Console에 마지막 오류 메시지가 계속 표시될 수 있습니다.
10. curl
로 다음 HTTPS 요청을 전송하여 Cloud 함수가 작동하는지 확인합니다. Cloud Shell을 사용하거나 curl
및 gcloud
CLI가 설치된 터미널에서 사용할 수 있습니다.Cloud Shell 터미널에서 다음 명령어를 실행합니다.
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
터미널에서 이 명령어를 실행하려면 gcloud CLI를 사용하여 인증하고 프로젝트 ID 값을 환경 변수 GOOGLE_CLOUD_PROJECT
로 설정해야 합니다.
보너스
hello_http
함수의 이름은 Python 런타임이 선택되었을 때 HTTP 트리거 Cloud 함수의 기본 진입점으로 정의되었습니다. 대안은 get_order_list
를 소스 코드에서 함수 이름으로 유지하고 인라인 편집기 위에 있는 Cloud 함수의 진입점 필드를 런타임 필드에서 오른쪽으로 업데이트하는 것입니다.
진입점을 hello_http
에서 get_order_list
로 변경하면 배포 문제가 해결됩니다.
4. 삭제
삭제하려면 프로젝트를 종료하거나 Cloud 함수 인스턴스를 삭제하면 됩니다. 아래와 같이 콘솔을 사용하거나 CLI 명령어를 사용하여 Cloud Functions를 삭제할 수 있습니다.
gcloud functions delete codelab-cf --region=us-central1
5. 축하합니다.
축하합니다. Gemini를 사용하여 애플리케이션의 문제를 해결하고 Gemini를 사용하여 로그를 이해하고 Google Cloud 관련 질문에 대한 답변을 얻는 데 어떻게 도움이 되는지 알아보았습니다.