Используйте 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".
- Создайте контейнер для приложения и загрузите его в 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.
Обновите класс
SpringBootApplicationвsrc/main/java/com/example/helloworld/HelloworldApplication.java, добавив аннотацию@RestControllerдля обработки сопоставления с символом/, а также поле@Valueдля указания переменной средыTARGET:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
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
Эта функция позволяет обеспечить синхронизацию изменений в службе Cloud Run для генерации динамического контента вашего сайта со статическими ресурсами Hosting и конфигурацией Hosting . Кроме того, эта функция позволяет предварительно просматривать ваши правила перезаписи в каналах предварительного просмотра Cloud Run на Hosting .
Если вы добавите
"pinTag": trueв блокrunв конфигурацииhosting.rewrites, ваши статические ресурсы и конфигурация Hosting будут привязаны к самой последней версии службы Cloud Run на момент развертывания. Если вы откатите версию своего сайта, версия "привязанной" службы Cloud Run также будет откачена.Эта функция основана на тегах Cloud Run , которые имеют ограничение в 1000 тегов на сервис и 2000 тегов на регион. Это означает, что после сотен развертываний самые старые версии сайта могут перестать работать.
Теперь ваш контейнер доступен по следующим URL-адресам:
Ваши поддомены Firebase:
PROJECT_ID .web.app/иPROJECT_ID .firebaseapp.com/Любые подключенные пользовательские домены :
CUSTOM_DOMAIN /
Для получения более подробной информации о правилах перезаписи перейдите на страницу настроек Hosting . Там же вы можете узнать о порядке приоритета ответов для различных конфигураций Hosting .
Протестируйте локально.
В процессе разработки вы можете запускать и тестировать образ контейнера локально. Подробные инструкции см. в документации Cloud Run .
Следующие шаги
Настройте кэширование динамического контента на глобальной CDN-сети.
Взаимодействуйте с другими сервисами Firebase, используя Firebase Admin SDK .
Узнайте больше о Cloud Run , включая подробные руководства по настройке, управлению и конфигурированию контейнеров.
Ознакомьтесь с ценами , квотами и лимитами Cloud Run .