Объедините Cloud Run с Firebase Hosting для генерации и обслуживания динамического контента или создания REST API в качестве микросервисов.
Используя Cloud Run , вы можете развернуть приложение, упакованное в образ контейнера. Затем, используя Firebase Hosting , вы можете направлять HTTPS-запросы для запуска вашего контейнерного приложения.
- Cloud Run поддерживает несколько языков (включая Go, Node.js, Python и Java), предоставляя вам возможность использовать язык программирования и фреймворк по вашему выбору.
- Cloud Run автоматически масштабирует образ контейнера по горизонтали для обработки полученных запросов, а затем уменьшает масштаб при снижении спроса.
- Вы платите только за ресурсы ЦП, памяти и сети, потребляемые при обработке запросов.
Примеры использования и примеры для Cloud Run , интегрированного с Firebase Hosting , см. в нашем обзоре Serverless .
В этом руководстве вы узнаете, как:
- Напишите простое приложение Hello World
- Контейнеризуйте приложение и загружайте его в Artifact Registry
- Разверните образ контейнера в Cloud Run
- Запросы на прямой Hosting для вашего контейнерного приложения
Обратите внимание, что для повышения производительности обслуживания динамического контента вы можете дополнительно настроить параметры кэширования .
Прежде чем начать
Перед использованием Cloud Run вам необходимо выполнить некоторые начальные задачи, включая настройку учетной записи Cloud Billing , включение API Cloud Run и установку инструмента командной строки gcloud
.
Настройте выставление счетов для вашего проекта
Cloud Run предлагает бесплатную квоту использования , но для использования или тестирования Cloud Run вам все равно потребуется учетная запись Cloud Billing связанная с вашим проектом Firebase.
Включите API и установите SDK
Включите Cloud Run API в консоли API Google:
Откройте страницу Cloud Run API в консоли API Google.
При появлении запроса выберите свой проект Firebase.
Нажмите «Включить» на странице API Cloud Run .
Установите и инициализируйте 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 .
Питон
Создайте новый каталог с именем
helloworld-python
, затем перейдите в него:mkdir helloworld-python
cd helloworld-python
Создайте новый файл с именем
app.py
, затем добавьте следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение завершено и готово к контейнеризации и загрузке в Artifact 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
.
Ваше приложение завершено и готово к контейнеризации и загрузке в Artifact Registry .
Шаг 2 : Контейнеризация приложения и загрузка его в Artifact Registry
Контейнеризуйте пример приложения, создав новый файл с именем
Dockerfile
в том же каталоге, что и исходные файлы. Скопируйте следующее содержимое в свой файл.Идти
Node.js
Питон
Ява
Создайте образ контейнера с помощью 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 .