Используйте Cloud Run в паре с Firebase Hosting для генерации и предоставления динамического контента или для создания REST API в виде микросервисов.
С помощью Cloud Run вы можете развернуть приложение, упакованное в образ контейнера. Затем, используя Firebase Hosting , вы можете направлять HTTPS-запросы для запуска вашего контейнеризированного приложения.
- Cloud Run поддерживает несколько языков программирования (включая Go, Node.js, Python и Java), что дает вам возможность использовать любой язык программирования и фреймворк по вашему выбору.
- Cloud Run автоматически и горизонтально масштабирует образ контейнера для обработки поступающих запросов, а затем уменьшает масштаб при снижении спроса.
- Вы платите только за ресурсы процессора, памяти и сети, используемые во время обработки запросов.
Примеры использования и примеры работы Cloud Run в интеграции с Firebase Hosting можно найти в нашем обзоре бессерверных вычислений .
В этом руководстве показано, как:
- Напишите простое приложение "Hello World".
- Containerize an app and upload it to Artifact Registry
- Разверните образ контейнера в Cloud Run
- Прямая отправка запросов Hosting вашему контейнеризированному приложению.
Обратите внимание, что для повышения производительности отображения динамического контента вы можете дополнительно настроить параметры кэширования .
Прежде чем начать
Перед использованием Cloud Run необходимо выполнить ряд подготовительных задач, включая настройку учетной записи Cloud Billing , включение API Cloud Run и установку инструмента командной строки gcloud .
Настройте выставление счетов за ваш проект.
Cloud Run предлагает бесплатный лимит использования , но для его использования или тестирования вам все равно потребуется учетная запись Cloud Run Cloud Billing связанная с вашим проектом Firebase.
Включите API и установите SDK.
Включите API Cloud Run в консоли Google API:
Откройте страницу Cloud Run API в консоли Google API.
При появлении запроса выберите свой проект Firebase.
На странице Cloud Run API нажмите кнопку «Включить» .
Установите и инициализируйте Cloud SDK.
Убедитесь, что инструмент
gcloudнастроен для правильного проекта:gcloud config list
Шаг 1 : Напишите пример приложения.
Обратите внимание, что Cloud Run поддерживает множество других языков в дополнение к языкам, показанным в следующем примере.
Идти
Создайте новую директорию с именем
helloworld-go, затем перейдите в неё:mkdir helloworld-go
cd helloworld-go
Создайте новый файл с именем
helloworld.goи добавьте в него следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT.
Ваше приложение завершено и готово к контейнеризации и загрузке в Artifact Registry .
Node.js
Создайте новую директорию с именем
helloworld-nodejs, затем перейдите в неё:mkdir helloworld-nodejs
cd helloworld-nodejs
Создайте файл
package.jsonсо следующим содержимым:Создайте новый файл с именем
index.jsи добавьте в него следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT.
Ваше приложение завершено и готово к контейнеризации и загрузке в Artifact Registry .
Python
Создайте новую директорию с именем
helloworld-python, затем перейдите в неё:mkdir helloworld-python
cd helloworld-python
Создайте новый файл с именем
app.pyи добавьте в него следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT.
Ваше приложение завершено и готово к контейнеризации и загрузке в Artifact Registry .
Java
Установите Java SE 8 или более позднюю версию JDK и CURL .
Обратите внимание, что это необходимо сделать только для создания нового веб-проекта на следующем шаге. Dockerfile, который будет описан позже, загрузит все зависимости в контейнер.
В консоли создайте новый пустой веб-проект, используя cURL, а затем выполните команды распаковки:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zipunzip helloworld.zip
Это создаст проект SpringBoot.
Update the
SpringBootApplicationclass insrc/main/java/com/example/helloworld/HelloworldApplication.javaby adding a@RestControllerto handle the/mapping and also add a@Valuefield to provide theTARGETenvironment variable:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT.
Ваше приложение завершено и готово к контейнеризации и загрузке в Artifact Registry .
Шаг 2 : Контейнеризуйте приложение и загрузите его в Artifact Registry
Для контейнеризации тестового приложения создайте новый файл с именем
Dockerfileв той же директории, что и исходные файлы. Скопируйте следующее содержимое в этот файл.Идти
Node.js
Python
Java
Создайте образ контейнера с помощью Cloud Build , выполнив следующую команду из каталога, содержащего ваш Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
В случае успеха вы увидите сообщение SUCCESS, содержащее название изображения.
(gcr.io/ PROJECT_ID /helloworld).
Образ контейнера теперь хранится в Artifact Registry и при желании может быть использован повторно.
Обратите внимание, что вместо Cloud Build вы можете использовать локально установленную версию Docker для сборки контейнера локально .
Шаг 3 : Разверните образ контейнера в Cloud Run
Для достижения наилучшей производительности разместите ваш сервис Cloud Run совместно с Hosting , используя следующие регионы:
-
us-west1 -
us-central1 -
us-east1 -
europe-west1 -
asia-east1
Переадресация запросов в Cloud Run с Hosting поддерживается в следующих регионах:
-
asia-east1 -
asia-east2 -
asia-northeast1 -
asia-northeast2 -
asia-northeast3 -
asia-south1 -
asia-south2 -
asia-southeast1 -
asia-southeast2 -
australia-southeast1 -
australia-southeast2 -
europe-central2 -
europe-north1 -
europe-southwest1 -
europe-west1 -
europe-west12 -
europe-west2 -
europe-west3 -
europe-west4 -
europe-west6 -
europe-west8 -
europe-west9 -
me-central1 -
me-west1 -
northamerica-northeast1 -
northamerica-northeast2 -
southamerica-east1 -
southamerica-west1 -
us-central1 -
us-east1 -
us-east4 -
us-east5 -
us-south1 -
us-west1 -
us-west2 -
us-west3 -
us-west4 -
us-west1 -
us-central1 -
us-east1 -
europe-west1 -
asia-east1
Развертывание выполняется с помощью следующей команды:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
При появлении запроса:
- Выберите регион (например,
us-central1) - Подтвердите название сервиса (например,
helloworld). - Ответьте
Y, чтобы разрешить неаутентифицированные вызовы.
- Выберите регион (например,
Подождите несколько минут, пока завершится развертывание. В случае успеха в командной строке отобразится URL-адрес сервиса. Например
https://helloworld- RANDOM_HASH -us-central1.a.run.appЧтобы получить доступ к развернутому контейнеру, откройте URL-адрес сервиса в веб-браузере.
На следующем шаге вы узнаете, как получить доступ к этому контейнеризированному приложению по URL-адресу Firebase Hosting , чтобы оно могло генерировать динамический контент для вашего сайта, размещенного на Firebase.
Шаг 4: Направляйте запросы на размещение вашего контейнеризированного приложения.
С помощью правил перезаписи вы можете направлять запросы, соответствующие определенным шаблонам, в одно место назначения.
В следующем примере показано, как направлять все запросы со страницы /helloworld на вашем Hosting на запуск и выполнение экземпляра контейнера helloworld .
Убедитесь, что:
У вас установлена последняя версия Firebase CLI .
Вы инициализировали Firebase Hosting .
Подробные инструкции по установке CLI и инициализации Hosting см. в руководстве по началу работы с Hosting .
Откройте файл
firebase.json.Добавьте следующую конфигурацию
rewriteв разделhosting:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
Разверните конфигурацию хостинга на своем сайте, выполнив следующую команду из корневого каталога вашего проекта:
firebase deploy --only hosting
With this feature, you can ensure that the revision of your Cloud Run service for generating your site's dynamic content is kept in sync with your static Hosting resources and Hosting config. Also, this feature allows you to preview your rewrites to Cloud Run on Hosting preview channels.
If you add
"pinTag": trueto arunblock of thehosting.rewritesconfig, your static Hosting resources and configuration will be pinned to the most recent revision of the Cloud Run service, at the time of deploy. If you roll back a version of your site, the revision of the "pinned" Cloud Run service is also rolled back.This feature relies on Cloud Run tags , which have a limit of 1000 tags per service and 2000 tags per region. This means that after hundreds of deploys, the oldest versions of a site may stop working.
Your container is now reachable via the following URLs:
Ваши поддомены Firebase:
PROJECT_ID .web.app/иPROJECT_ID .firebaseapp.com/Любые подключенные пользовательские домены :
CUSTOM_DOMAIN /
Visit the Hosting configuration page for more details about rewrite rules . You can also learn about the priority order of responses for various Hosting configurations.
Протестируйте локально.
During development, you can run and test your container image locally. For detailed instructions, visit the Cloud Run documentation .
Следующие шаги
Set up caching of your dynamic content on a global CDN.
Interact with other Firebase services using the Firebase Admin SDK .
Learn more about Cloud Run , including detailed how-to guides for setting up, managing, and configuring containers.
Review the pricing and the quotas and limits for Cloud Run .