1. Прежде чем начать
Cloud Run — это управляемая вычислительная платформа, которая позволяет запускать контейнеры без отслеживания состояния, которые можно вызвать с помощью HTTP-запросов. Cloud Run является бессерверным; это устраняет необходимость в управлении инфраструктурой, поэтому вы можете сосредоточиться на самом важном — создании отличных приложений. Он создан на основе Knative и позволяет вам запускать контейнеры с помощью Cloud Run (полностью управляемого) или Cloud Run для Anthos. Цель этой лаборатории кода — помочь вам создать образ контейнера и развернуть его в Cloud Run.
Предварительные условия
Н/Д
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Облачная оболочка
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud.
Эта виртуальная машина на базе Debian оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам понадобится для этой лаборатории кода, — это браузер (да, он работает на 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
? Узнайте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления 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
. Теперь ваше приложение готово к контейнеризации, тестированию и загрузке в реестр контейнеров.
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
Развертывание контейнерного приложения в 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
позволяет получить доступ к приложению без аутентификации. Параметр --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 в Google Cloud .
Дополнительные сведения о создании HTTP-контейнера без отслеживания состояния, подходящего для Cloud Run, из источника кода и его отправке в реестр контейнеров см. в следующих ресурсах:
Чтобы узнать больше о Knative, базовом проекте с открытым исходным кодом, см. Knative .