Объедините Cloud Run с хостингом Firebase, чтобы создавать и обслуживать динамический контент или создавать REST API в виде микросервисов.
С помощью Cloud Run вы можете развернуть приложение, упакованное в образ контейнера. Затем, используя хостинг Firebase, вы можете направлять HTTPS-запросы для запуска вашего контейнерного приложения.
- Cloud Run поддерживает несколько языков (включая Go, Node.js, Python и Java), что дает вам возможность использовать язык программирования и платформу по вашему выбору.
- Cloud Run автоматически и горизонтально масштабирует образ контейнера для обработки полученных запросов, а затем уменьшает масштаб, когда спрос снижается.
- Вы платите только за процессор, память и сеть, использованные во время обработки запроса.
Примеры использования и примеры Cloud Run, интегрированные с хостингом Firebase, см. в нашем обзоре бессерверных технологий .
В этом руководстве показано, как:
- Напишите простое приложение Hello World.
- Контейнеризируйте приложение и загрузите его в реестр контейнеров.
- Разверните образ контейнера в Cloud Run
- Запросы прямого хостинга к вашему контейнерному приложению
Обратите внимание: чтобы повысить производительность обслуживания динамического контента, вы можете дополнительно настроить параметры кэша .
Прежде чем вы начнете
Прежде чем использовать Cloud Run, вам необходимо выполнить некоторые первоначальные задачи, включая настройку учетной записи Cloud Billing, включение API Cloud Run и установку инструмента командной строки gcloud
.
Настройте биллинг для вашего проекта
Cloud Run предлагает бесплатную квоту на использование , но для использования или опробования Cloud Run у вас все равно должен быть платежный аккаунт Cloud , связанный с вашим проектом Firebase.
Включите API и установите SDK
Включите Cloud Run API в консоли Google API:
Откройте страницу Cloud Run API в консоли API Google.
При появлении запроса выберите свой проект Firebase.
Нажмите «Включить» на странице Cloud Run API.
Установите и инициализируйте Cloud SDK.
Убедитесь, что инструмент
gcloud
настроен для правильного проекта:gcloud config list
Шаг 1. Напишите пример приложения.
Обратите внимание, что Cloud Run поддерживает множество других языков помимо языков, показанных в следующем примере.
Идти
Создайте новый каталог с именем
helloworld-go
и перейдите в него:mkdir helloworld-go
cd helloworld-go
Создайте новый файл с именем
helloworld.go
и добавьте следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение готово к контейнеризации и загрузке в реестр контейнеров.
Node.js
Создайте новый каталог с именем
helloworld-nodejs
, затем перейдите в него:mkdir helloworld-nodejs
cd helloworld-nodejs
Создайте файл
package.json
со следующим содержимым:Создайте новый файл с именем
index.js
и добавьте следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение готово к контейнеризации и загрузке в реестр контейнеров.
Питон
Создайте новый каталог с именем
helloworld-python
и перейдите в него:mkdir helloworld-python
cd helloworld-python
Создайте новый файл с именем
app.py
и добавьте следующий код:Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды
PORT
.
Ваше приложение готово к контейнеризации и загрузке в реестр контейнеров.
Джава
Установите 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
.
Ваше приложение готово к контейнеризации и загрузке в реестр контейнеров.
Шаг 2. Поместите приложение в контейнер и загрузите его в реестр контейнеров.
Контейнеризируйте пример приложения, создав новый файл с именем
Dockerfile
в том же каталоге, что и исходные файлы. Скопируйте следующее содержимое в свой файл.Идти
Node.js
Питон
Джава
Создайте образ контейнера с помощью Cloud Build, выполнив следующую команду из каталога, содержащего ваш Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
В случае успеха вы увидите сообщение УСПЕХ, содержащее имя изображения.
(gcr.io/ PROJECT_ID /helloworld
).
Образ контейнера теперь хранится в реестре контейнеров и при желании может быть использован повторно.
Обратите внимание, что вместо Cloud Build вы можете использовать локально установленную версию Docker для локальной сборки контейнера .
Шаг 3. Разверните образ контейнера в Cloud Run.
Разверните с помощью следующей команды:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
При появлении запроса:
- Выберите регион (например
us-central1
) - Подтвердите имя службы (например,
helloworld
). - Ответьте
Y
, чтобы разрешить неаутентифицированные вызовы.
- Выберите регион (например
Для достижения наилучшей производительности разместите службу Cloud Run вместе с ��остингом, используя следующие регионы:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Перезапись в Cloud Run с хостинга поддерживается в следующих регионах:
-
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 , чтобы оно могло генерировать динамический контент для вашего сайта, размещенного на Firebase.
Шаг 4. Направьте запросы на хостинг в ваше контейнерное приложение.
С помощью правил перезаписи вы можете направлять запросы, соответствующие определенным шаблонам, в один пункт назначения.
В следующем примере показано, как направить все запросы со страницы /helloworld
на вашем хостинг-сайте, чтобы инициировать запуск и запуск вашего экземпляра контейнера helloworld
.
Убедись в том, что:
У вас установлена последняя версия Firebase CLI .
Вы инициализировали хостинг Firebase.
Подробные инструкции по установке CLI и инициализации хостинга см. в руководстве «Начало работы с хостингом» .
Откройте файл
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 /
Посетите страницу конфигурации хостинга для получения более подробной информации о правилах перезаписи . Также вы можете узнать о приоритете ответов для различных конфигураций хостинга.
Тестируйте локально
Во время разработки вы можете запускать и тестировать образ контейнера локально. Подробные инструкции можно найти в документации Cloud Run .
Следующие шаги
Настройте кеширование вашего динамического контента в глобальной CDN.
Взаимодействуйте с другими сервисами Firebase с помощью Firebase Admin SDK .
Узнайте больше об Cloud Run, включая подробные инструкции по установке, управлению и настройке контейнеров.
Ознакомьтесь с ценами , квотами и ограничениями для Cloud Run.