본문으로 건너뛰기

GCP Cloud Functions에서 Cheerio 실행하기

GCP Functions에서 CheerioCrawler 기반 프로젝트를 실행하는 것은 생각보다 간단합니다. 프로젝트 코드를 약간만 수정하면 됩니다.

프로젝트 수정하기​

먼저 npx crawlee create 명령어로 로컬에 Crawlee 프로젝트를 생성합니다. package.json 파일의 "main" 필드를 "src/main.js"로 설정하세요.

package.json
{
"name": "my-crawlee-project",
"version": "1.0.0",
"main": "src/main.js",
...
}

이제 main.js 파일을 다음과 같이 수정합니다:

  • 크롤러 생성자에 별도의 Configuration 인스턴스를 전달합니다(persistStorage 옵션을 false로 설정).
src/main.js
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로 내보냅니다
src/main.js
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에서 이 스크립트를 실행할 수 있습니다.