Используйте 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
Включите Cloud Run API в Google API Console:
Откройте страницу Cloud Run API в Google API Console.
Выберите проект 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
Разверните его с помощью следующей команды:
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 при получении запросов со страницы /helloworld сайта Hosting.
Убедитесь, что выполняются следующие условия:
У вас установлена последняя версия 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
Теперь ваш контейнер доступен по следующим URL:
Ваши субдомены Firebase:
PROJECT_ID.web.app/иPROJECT_ID.firebaseapp.com/Все подключенные собственные домены.
CUSTOM_DOMAIN/
Дополнительную информацию о правилах перезаписи можно найти на странице конфигурации Hosting. Вы также можете узнать о приоритете ответов для различных конфигураций Hosting.
Локальное тестирование
Во время разработки вы можете запускать и тестировать образ контейнера локально. Подробные инструкции можно найти в документации по Cloud Run.
Дальнейшие действия
Настройте кеширование динамического контента в глобальной сети доставки контента.
Взаимодействуйте с другими сервисами Firebase с помощью Firebase Admin SDK.
Подробнее о Cloud Run, в том числе подробные практические руководства по настройке контейнеров и управлению ими…
Ознакомьтесь с ценами, а также квотами и ограничениями для Cloud Run.