1. Прежде чем начать

Cloud Run — это управляемая вычислительная платформа, позволяющая запускать контейнеры без сохранения состояния, вызываемые с помощью HTTP-запросов. Cloud Run не использует серверную архитектуру; это избавляет от необходимости управления инфраструктурой, позволяя сосредоточиться на самом важном — создании отличных приложений. Платформа построена на основе Knative , что позволяет выбирать между запуском контейнеров с помощью Cloud Run (полностью управляемая) или Cloud Run для Anthos. Цель этого практического занятия — создать образ контейнера и развернуть его в Cloud Run.
Предварительные требования
Н/Д
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в Cloud Console и создайте новый проект или используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)
Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Облачная оболочка
Хотя Google Cloud можно управлять удаленно с ноутбука, для этого вам понадобится Cloud Shell — среда командной строки, работающая в Google Cloud.
Эта виртуальная машина на базе Debian содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Это означает, что для выполнения этого практического задания вам понадобится только браузер (да, он работает и на Chromebook).
- Для активации Cloud Shell из консоли Cloud Console просто нажмите «Активировать Cloud Shell».
(На подготовку и подключение к среде должно уйти всего несколько минут).
После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш PROJECT_ID .
gcloud auth list
вывод команды
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
вывод команды
[core] project = <PROJECT_ID>
Если по какой-либо причине проект не создан, просто выполните следующую команду:
gcloud config set project <PROJECT_ID>
Ищете свой PROJECT_ID ? Проверьте, какой ID вы использовали на этапах настройки, или найдите его на панели управления Cloud Console:
Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.
echo $GOOGLE_CLOUD_PROJECT
вывод команды
<PROJECT_ID>
- Наконец, установите зону по умолчанию и конфигурацию проекта.
gcloud config set compute/zone us-central1-f
Вы можете выбрать различные зоны. Для получения дополнительной информации см. раздел «Регионы и зоны» .
Включите API Cloud Run
В Cloud Shell включите API Cloud Run.
gcloud services enable run.googleapis.com
В результате должно получиться сообщение, похожее на это:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Напишите пример приложения.
Вы создадите простое приложение на Node.js на основе Express, которое будет обрабатывать HTTP-запросы.
Для сборки приложения используйте Cloud Shell, чтобы создать новую директорию с именем helloworld-nodejs и перейти в неё.
mkdir helloworld-nodejs cd helloworld-nodejs
Создайте файл package.json со следующим содержимым:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
Самое важное, что приведенный выше файл содержит команду запуска скрипта и зависимость от веб-фреймворка Express.
Далее, в той же директории создайте файл index.js и скопируйте в него следующее содержимое:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды PORT . Теперь ваше приложение готово к контейнеризации, тестированию и загрузке в Container Registry.
4. Контейнеризуйте ваше приложение и загрузите его в реестр контейнеров.
Для контейнеризации тестового приложения создайте новый файл с именем Dockerfile в той же директории, что и исходные файлы, и скопируйте в него следующее содержимое:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
Теперь соберите образ контейнера с помощью Cloud Build, выполнив следующую команду из каталога, содержащего Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT — это переменная среды, содержащая идентификатор вашего проекта Google Cloud при работе в Cloud Shell. Вы также можете получить её, выполнив gcloud config get-value project .
После отправки в реестр вы увидите сообщение SUCCESS содержащее имя образа ( gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld ). Образ сохраняется в реестре контейнеров и может быть использован повторно при необходимости.
Вы можете вывести список всех образов контейнеров, связанных с вашим текущим проектом, с помощью этой команды:
gcloud container images list
Если вы хотите запустить и протестировать приложение локально из Cloud Shell, вы можете сделать это с помощью стандартной команды docker :
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
В Cloud Shell нажмите « Предварительный просмотр веб-страницы» .
и выберите «Предварительный просмотр» на порту 8080 .

Откроется окно браузера с надписью "Hello World!".

Вы также можете просто использовать curl localhost:8080 .
5. Развертывание в облаке
Развертывание вашего контейнеризированного приложения в Cloud Run выполняется с помощью следующей команды (убедитесь, что вы указали правильное имя образа для созданного вами приложения или использовали предварительно собранный образ gcr.io/cloudrun/hello ):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
Параметр --allow-unauthenticated deploy позволяет получить доступ к приложению без аутентификации. Параметр --platform managed \ deploy означает, что вы запрашиваете полностью управляемую среду (а не инфраструктуру Kubernetes через Anthos).
Подождите несколько минут, пока завершится развертывание. После завершения в командной строке отобразится URL-адрес службы.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
Теперь вы можете получить доступ к развернутому контейнеру, открыв URL-адрес сервиса в веб-браузере:

Cloud Run автоматически и горизонтально масштабирует образ контейнера для обработки поступающих запросов, а затем уменьшает его масштаб при снижении спроса. Вы платите только за ресурсы ЦП, памяти и сети, используемые во время обработки запросов.
6. Уборка
Хотя Cloud Run не взимает плату, когда услуга не используется, с вас все равно может взиматься плата за хранение созданного образа контейнера.
Вы можете либо удалить свой проект Google Cloud, чтобы избежать списания средств, что прекратит выставление счетов за все ресурсы, используемые для этого проекта, либо просто удалить образ helloworld с помощью этой команды:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Для удаления службы Cloud Run используйте следующую команду:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. Поздравляем!
Поздравляем! Вы развернули приложение, упакованное в образ контейнера, в Cloud Run.
Узнать больше
Следующим хорошим шагом было бы ознакомиться с руководством Quickstart: Deploy to Cloud Run for Anthos on Google Cloud .
Для получения дополнительной информации о создании HTTP-контейнера без сохранения состояния, подходящего для Cloud Run, из исходного кода и его загрузке в Container Registry, см. следующие ресурсы:
Чтобы узнать больше о Knative, базовом проекте с открытым исходным кодом, см. Knative .