Cloud Functions for Firebase에서 도쿄 리전 사용

소개



Cloud Functions에서 headless Chrome이 움직이게 되었어요.
그래서 지금까지 heroku에서 움직였던 웹 스크래핑을 Cloud Functions로 이사했습니다.
Introducing headless Chrome support in Cloud Functions and App Engine

그러나 일본 국내의 웹 사이트를 스크레이핑하는 경우, 꽤 응답이 나빴기 때문에 도쿄 리전을 이용해 보았습니다.
(아무것도 지정하지 않고 배포하면 us-central1이됩니다.)

환경



Firebase CLI 5.1.1
Google Cloud SDK 220.0.0

도쿄 지역을 이용하는 방법



기능을 도쿄 리전에 배포하는 방법에는 여러 가지가 있습니다.
배포 후에는 지역만 변경할 수 없습니다(GCP에서도 동일).

소스 코드에서 리전 지정



Firebase 문서에서는 이 방법만 찾았습니다.
함수 배포 및 런타임 옵션 관리 | Firebase

설명된 대로 다음과 같이 리전을 지정하여 배포할 수 있습니다.

index.js
exports.sample = functions.region('asia-northeast1')
        .https.onRequest((req, res) => {
    console.log('hello tokyo reagion');
});

콘솔에서 확인하면 리전이 asia-northeast1이 되어



여러 리전에 배포



GCP의 Cloud Functions에서는 동일한 함수 이름이더라도 다른 리전이면 배포할 수 있습니다.

Cloud Functions Locations
You can deploy functions to different regions within a project, but once the region has been selected for a function it cannot be changed.
Functions in a given region in a given project must have unique (case insensitive) names, but functions across regions or across projects may share the same name.

Firebase에서 도쿄 리전에 배포 한 후 리전 지정을 지우고 배포하면 어떻게됩니까?
배포하려고 하면 다음과 같은 주의가 촉구됩니다.
The following functions are found in your project but do not exist in your local source code:
    sample(asia-northeast1)

If you are renaming a function or changing its region, it is recommended that you create the new function first before deleting the old one to prevent event loss. For more info, visit https://firebase.google.com/docs/functions/manage-functions#modify

? Would you like to proceed with deletion? Selecting no will continue the rest of the deployments. (y/N)

그대로 진행하면 GCP와 마찬가지로 여러 리전에 동일한 함수를 배포할 수 있었습니다.


Google Cloud SDK 사용



Google Cloud SDK는 선택적으로 지역 사양을 제공합니다.

Firebase CLI에는 그 옵션이 존재하지 않는 것 같기 때문에, 소스 코드에 손을 추가하지 않고, 복수의 리전에 배치하는 경우, 이 방법을 취할 수 밖에 없는 것인가…
$ gcloud functions deploy --help
NAME
    gcloud functions deploy - create or update a Google Cloud Function

SYNOPSIS
    gcloud functions deploy (NAME : --region=REGION)
        [--entry-point=ENTRY_POINT] [--memory=MEMORY] [--retry]
        [--runtime=RUNTIME] [--source=SOURCE] [--stage-bucket=STAGE_BUCKET]
        [--timeout=TIMEOUT] [--update-labels=[KEY=VALUE,...]]
        [--clear-labels | --remove-labels=[KEY,...]]
        [--trigger-bucket=TRIGGER_BUCKET | --trigger-http
          | --trigger-topic=TRIGGER_TOPIC
          | --trigger-event=EVENT_TYPE --trigger-resource=RESOURCE]
        [GCLOUD_WIDE_FLAG ...]


$ firebase deploy --help
Usage: deploy [options]

deploy code and assets to your Firebase project

Options:
  -p, --public <path>      override the Hosting public directory specified in firebase.json
  -m, --message <message>  an optional message describing this deploy
  -f, --force              delete Cloud Functions missing from the current working directory without confirmation
  --only <targets>         only deploy to specified, comma-separated targets (e.g. "hosting,storage"). For functions, can specify filters with colons to scope function deploys to only those functions (e.g. "--only functions:func1,functions:func2"). When filtering based on export groups (the exported module object keys), use dots to specify group names (e.g. "--only functions:group1.subgroup1,functions:group2)"
  --except <targets>       deploy to all targets except specified (e.g. "database")
  -h, --help               output usage information

사이고에게



결국 Firebase가 아닌 직접 GCP의 Cloud Functions를 사용해 버리는 편이 빠르지 않을까 하는 결론에…

좋은 웹페이지 즐겨찾기