Объедините 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.
- Контейнеризируйте приложение и загрузите его в Container Registry
- Разверните образ контейнера в Cloud Run
- Запросы прямого Hosting к вашему контейнерному приложению
Обратите внимание: чтобы повысить производительность обслуживания динамического контента, вы можете дополнительно настроить параметры кэша .
Прежде чем начать
Прежде чем использовать Cloud Run , вам необходимо выполнить некоторые первоначальные задачи, включая настройку учетной записи Cloud Billing , включение API Cloud Run и установку инструмента командной строки gcloud
.
Настройте биллинг для вашего проекта
Cloud Run предлагает бесплатную квоту на использование , но для использования или опробования Cloud Run у вас все равно должен быть Cloud Billing связанный с вашим проектом Firebase.
Включите API и установите SDK.
Включите Cloud Run API в консоли 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
.
Ваше приложение готово к контейнеризации и загрузке в Container Registry .
Node.js
Создайте новый каталог с именем
helloworld-nodejs
, затем перейдите в него:mkdir helloworld-nodejs
cd helloworld-nodejs
Создайте файл
package.json
со следующим содержимым:Создайте новый файл с именем
index.js
и добавьте следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение готово к контейнеризации и загрузке в Container Registry .
Питон
Создайте новый каталог с именем
helloworld-python
и перейдите в него:mkdir helloworld-python
cd helloworld-python
Создайте новый файл с именем
app.py
и добавьте следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение готово к контейнеризации и загрузке в Container Registry .
Ява
Установите 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.zip
unzip helloworld.zip
Это создаст проект SpringBoot.
Обновите класс
SpringBootApplication
вsrc/main/java/com/example/helloworld/HelloworldApplication.java
, добавив@RestController
для обработки сопоставления/
, а также добавьте поле@Value
для предоставления переменной средыTARGET
:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение готово к контейнеризации и загрузке в Container Registry .
Шаг 2. Поместите приложение в контейнер и загрузите его в Container Registry
Контейнеризируйте пример приложения, создав новый файл с именем
Dockerfile
в том же каталоге, что и исходные файлы. Скопируйте следующее содержимое в свой файл.Идти
Node.js
Питон
Ява
Создайте образ контейнера с помощью Cloud Build , выполнив следующую команду из каталога, содержащего ваш Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
В случае успеха вы увидите сообщение УСПЕХ, содержащее имя изображения.
(gcr.io/ PROJECT_ID /helloworld
).
Образ контейнера теперь хранится в Container Registry и при желании может быть использован повторно.
Обратите внимание, что вместо Cloud Build вы можете использовать локально установленную версию Docker для локальной сборки контейнера .
Шаг 3. Разверните образ контейнера в Cloud Run
Разверните с помощью следующей команды:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
При появлении запроса:
- Выберите регион (например
us-central1
) - Подтвердите имя службы (например,
helloworld
). - Ответьте
Y
, чтобы разрешить неаутентифицированные вызовы.
- Выберите регион (например
Для достижения наилучшей производительности разместите службу 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
Подождите несколько минут, пока развертывание завершится. В случае успеха в командной строке отображается 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 .