BigQuery를 사용하여 쿼리를 제출하고 결과를 반환하는 Cloud Run 함수를 만듭니다.

이 튜토리얼에서는 쿼리를 BigQuery에 제출하는 HTTP Cloud Run 함수를 작성하는 방법을 보여줍니다.

애플리케이션 준비

  1. 샘플 애플리케이션 저장소를 로컬 머신에 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    

    또는 zip 파일로 샘플을 다운로드하고 압축을 풉니다.

  2. 샘플 코드가 있는 디렉토리로 변경합니다.

    cd nodejs-docs-samples/functions/v2/helloBigQuery
    
  3. 다음 샘플 코드를 살펴봅니다. 이 샘플은 지정된 데이터 세트에서 최소 400회 이상 발생하는 단어에 대한 쿼리를 제출하고 결과를 반환합니다.

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    const functions = require('@google-cloud/functions-framework');
    
    /**
     * HTTP Cloud Function that returns BigQuery query results
     *
     * @param {Object} req Cloud Function request context.
     * @param {Object} res Cloud Function response context.
     */
    functions.http('helloBigQuery', async (req, res) => {
      // Define the SQL query
      // Queries the public Shakespeare dataset using named query parameter
      const sqlQuery = `
          SELECT word, word_count
                FROM \`bigquery-public-data.samples.shakespeare\`
                WHERE corpus = @corpus
                AND word_count >= @min_word_count
                ORDER BY word_count DESC`;
    
      const options = {
        query: sqlQuery,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        params: {corpus: 'romeoandjuliet', min_word_count: 400},
      };
    
      // Execute the query
      try {
        const [rows] = await bigquery.query(options);
        // Send the results
        res.status(200).send(rows);
      } catch (err) {
        console.error(err);
        res.status(500).send(`Error querying BigQuery: ${err}`);
      }
    });

함수 배포하기

HTTP 트리거를 사용하여 함수를 배포하려면 다음 안내를 따르세요.

  1. 샘플 코드가 포함된 디렉터리에서 다음 명령어를 실행합니다.

    gcloud run deploy FUNCTION \
       --source . \
       --function FUNCTION_ENTRYPOINT \
       --base-image BASE_IMAGE \
       --region REGION \
       --allow-unauthenticated

    다음과 같이 바꿉니다.

    • FUNCTION을 배포하려는 함수의 이름(예: my-bigquery-function)으로 바꿉니다. 이 매개변수를 완전히 생략할 수 있지만 생략하면 이름을 입력하라는 메시지가 표시됩니다.

    • FUNCTION_ENTRYPOINT를 소스 코드에 있는 함수의 진입점으로 바꿉니다. 이는 함수가 실행될 때 Cloud Run이 실행하는 코드입니다. 이 플래그의 값은 소스 코드에 있는 함수 이름 또는 정규화된 클래스 이름이어야 합니다. 샘플 함수에 지정해야 하는 진입점은 helloBigQuery입니다.

    • BASE_IMAGE를 함수의 기본 이미지 환경으로 바꿉니다(예: nodejs22). 기본 이미지 및 각 이미지에 포함된 패키지에 대한 자세한 내용은 런타임 기본 이미지를 참조하세요.

    • REGION을 함수를 배포하려는 Google Cloud 리전으로 바꿉니다. 예를 들면 europe-west1입니다.

    선택사항:

    • 웹훅과 같이 공개 HTTP 함수를 만드는 경우 --allow-unauthenticated 플래그를 지정합니다. 이 플래그는 Cloud Run IAM 호출자 역할을 특수 식별자 allUser에 할당합니다. 서비스를 만든 후 나중에 IAM을 사용하여 이 설정을 수정할 수 있습니다.

함수 테스트

  1. 함수 배포가 완료되면 uri 속성을 복사합니다.

  2. 브라우저에서 이 URI에 방문합니다.

    쿼리 기준과 일치하는 단어 목록과 각 단어가 대상 데이터 세트에 표시되는 횟수를 볼 수 있습니다.