GCP Cloud Functions에서 Cheerio 실행하기
GCP Functions에서 CheerioCrawler 기반 프로젝트를 실행하는 것은 생각보다 간단합니다. 프로젝트 코드를 약간만 수정하면 됩니다.
프로젝트 수정하기
먼저 npx crawlee create
명령어로 로컬에 Crawlee 프로젝트를 생성합니다. package.json
파일의 "main"
필드를 "src/main.js"
로 설정하세요.
{
"name": "my-crawlee-project",
"version": "1.0.0",
"main": "src/main.js",
...
}
이제 main.js
파일을 다음과 같이 수정합니다:
- 크롤러 생성자에 별도의
Configuration
인스턴스를 전달합니다(persistStorage
옵션을false
로 설정).
import { CheerioCrawler, Configuration } from 'crawlee';
import { router } from './routes.js';
const startUrls = ['https://crawlee.dev'];
const crawler = new CheerioCrawler({
requestHandler: router,
}, new Configuration({
persistStorage: false,
}));
await crawler.run(startUrls);
- 크롤러 호출을 별도의 핸들러 함수로 감싸줍니다. 이 함수는:
- 비동기 함수가 될 수 있습니다
- 두 개의 매개변수를 받습니다 -
req
(클라우드 함수로 들어오는 사용자 요청 정보)와res
(응답 객체)res.send(data)
를 호출하여 클라우드 함수에서 데이터를 반환할 수 있습니다
- 이 함수를
src/main.js
모듈에서 named export로 내보냅니다
import { CheerioCrawler, Configuration } from 'crawlee';
import { router } from './routes.js';
const startUrls = ['https://crawlee.dev'];
export const handler = async (req, res) => {
const crawler = new CheerioCrawler({
requestHandler: router,
}, new Configuration({
persistStorage: false,
}));
await crawler.run(startUrls);
return res.send(await crawler.getData())
}
Google Cloud Platform 배포하기
Google Cloud 대시보드에서 새로운 함수를 생성하고, 메모리와 CPU 할당량을 설정한 뒤 지역과 함수 타임아웃을 설정합니다.
배포 시에는 ZIP 업로드를 선택하세요. ZIP 패키지를 저장할 새로운 GCP 스토리지 버킷을 생성해야 합니다.
패키지 준비 시에는 프로젝트 폴더의 모든 내용을 ZIP으로 압축하되, node_modules
폴더는 제외해야 합니다. GCP는 AWS Lambda의 Layers와 같은 기능은 없지만, package.json
파일을 기반으로 프로젝트 설정을 자동으로 처리합니다.
또한 **진입점(Entry point)**을 src/main.js
파일에서 내보낸 함수 이름으로 설정해야 합니다. GCP는 package.json
의 main
필드에서 지정된 파일을 사용합니다.
함수 배포가 완료되면 "테스트" 탭에서 테스트해볼 수 있습니다. 이 탭에는 클라우드 함수를 호출하는 curl
스크립트가 있습니다. gcloud
CLI 애플리케이션을 로컬에 설치하지 않고도 코드 블록 위의 링크를 클릭하여 Cloud Shell에서 이 스크립트를 실행할 수 있습니다.