Соедините 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
- Прямые запросы хостинга к вашему контейнерному приложению
Обратите внимание, что для повышения производительности обслуживания динамического контента вы можете дополнительно настроить параметры кэширования .
Прежде чем вы начнете
Прежде чем использовать Cloud Run, вам необходимо выполнить некоторые начальные задачи, включая настройку учетной записи Cloud Billing, включение Cloud Run API и установку инструмента командной строки gcloud
.
Настройте биллинг для вашего проекта
Cloud Run предлагает бесплатную квоту на использование , но у вас все равно должна быть учетная запись Cloud Billing, связанная с вашим проектом Firebase, чтобы использовать или попробовать Cloud Run.
Включите 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
.
Ваше приложение завершено и готово к контейнеризации и загрузке в 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
В случае успеха вы увидите сообщение SUCCESS, содержащее имя изображения.
(gcr.io/ PROJECT_ID /helloworld
).
Образ контейнера теперь хранится в реестре контейнеров и при желании может быть повторно использован.
Обратите внимание, что вместо 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 , чтобы оно могло генерировать динамический контент для вашего сайта, размещенного в Firebase.
Шаг 4. Направляйте запросы на хостинг в ваше контейнерное приложение.
С помощью правил перезаписи вы можете направлять запросы, соответствующие определенным шаблонам, в одно место назначения.
В следующем примере показано, как направить все запросы со страницы /helloworld
на вашем хостинг-сайте на запуск и запуск вашего экземпляра контейнера helloworld
.
Убедись в том, что:
У вас установлена последняя версия интерфейса командной строки Firebase .
Вы инициализировали Firebase Hosting.
Подробные инструкции по установке 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) } } ] }
Разверните конфигурацию хостинга на своем сайте, выполнив следующую команду из корня каталога вашего проекта:
firebase deploy
Теперь ваш контейнер доступен по следующим URL-адресам:
Ваши поддомены Firebase:
PROJECT_ID .web.app/
иPROJECT_ID .firebaseapp.com/
Любые подключенные персональные домены :
CUSTOM_DOMAIN /
Посетите страницу конфигурации хостинга, чтобы узнать больше о правилах перезаписи . Вы также можете узнать о приоритетном порядке ответов для различных конфигураций хостинга.
Протестируйте локально
Во время разработки вы можете запускать и тестировать образ контейнера локально. Подробные инструкции см. в документации Cloud Run .
Следующие шаги
Настройте кэширование вашего динамического контента в глобальной CDN.
Взаимодействие с другими сервисами Firebase с помощью Firebase Admin SDK .
Узнайте больше о Cloud Run, включая подробные практические руководства по установке, управлению и настройке контейнеров.
Ознакомьтесь с ценами , квотами и ограничениями для Cloud Run.