1. Обзор
В ходе этой лабораторной работы вы узнаете, как использовать события сегмента Cloud Storage и Eventarc для запуска обработки событий. Вы будете использовать функции Cloud Run для анализа данных и обработки изображений. Функция будет использовать API Google Vision и сохранит полученное изображение обратно в корзину Cloud Storage.
Что вы узнаете
Как построить конвейер обработки изображений.
- Настройка сегментов хранилища
- Создайте функции Cloud Run для чтения и записи объектов в Cloud Storage.
- Развертывание триггера Eventarc
- Интегрируйте Vision API для обнаружения изображений продуктов питания
- Протестируйте и подтвердите комплексное решение
Предварительные условия
- Эта лабораторная работа предполагает знакомство с облачной консолью и средами оболочки.
- Предыдущий опыт работы с облачным хранилищем, функциями Cloud Run или Vision API будет полезен, но не обязателен.
2. Настройка и требования
Настройка облачного проекта
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Активировать Cloud Shell
Активируйте Cloud Shell, щелкнув значок справа от панели поиска.
Настройка среды
- Создайте переменные среды, связанные с проектом и ресурсами, выполнив приведенные ниже команды в терминале Cloud Shell.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NAME=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export UPLOAD_BUCKET_NAME=menu-item-uploads-$PROJECT_ID
export UPLOAD_BUCKET=gs://menu-item-uploads-$PROJECT_ID
export BUCKET_THUMBNAILS=gs://menu-item-thumbnails-$PROJECT_ID
export MENU_SERVICE_NAME=menu-service
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
- Включите API, необходимые для лаборатории
gcloud services enable \
vision.googleapis.com \
cloudfunctions.googleapis.com \
pubsub.googleapis.com \
cloudbuild.googleapis.com \
logging.googleapis.com \
eventarc.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
--quiet
- Клонировать репозиторий
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions
3. Настройте сегменты облачного хранилища.
Создание сегментов хранения
Создайте сегменты Cloud Storage для загрузки и эскизов для вашего конвейера обработки изображений.
Используйте команду gsutil mb и уникальное имя, чтобы создать два сегмента:
- Сегмент загрузки, в который изображения будут загружаться первыми.
- Область миниатюр для хранения созданных миниатюр изображений.
Создайте корзину для загрузки новых изображений:
gsutil mb -p $PROJECT_ID -l $REGION $UPLOAD_BUCKET
Пример вывода:
Creating gs://menu-item-uploads-cymbal-eats-8399-3119/...
Создайте корзину для хранения созданных миниатюр:
gsutil mb -p $PROJECT_ID -l $REGION $BUCKET_THUMBNAILS
Пример вывода:
Creating gs://menu-item-thumbnails-cymbal-eats-8399-3119/...
Обновить разрешения сегмента
Обновите разрешения сегмента хранилища, чтобы предоставить пользователям разрешения на чтение.
Используйте команду gsutil iam ch, чтобы предоставить разрешение на чтение и запись объектов в вашей корзине:
gsutil iam ch allUsers:objectViewer $UPLOAD_BUCKET
gsutil iam ch allUsers:objectViewer $BUCKET_THUMBNAILS
Пример вывода
Updated IAM policy for project [cymbal-eats-8399-3119]. [...]
4. Настройте учетные записи служб
Создайте специальную учетную запись службы для Cloud Function для обработки миниатюр:
export CF_SERVICE_ACCOUNT=thumbnail-service-sa
gcloud iam service-accounts create ${CF_SERVICE_ACCOUNT}
Предоставьте роль artifactregistry.reader
, чтобы разрешить операции чтения из реестра артефактов:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/artifactregistry.reader"
Предоставьте роль storage.objectCreator
, чтобы разрешить сохранение сгенерированных изображений в сегменте миниатюр:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/storage.objectCreator"
Предоставьте роль run.invoker
, чтобы разрешить вызов службы Cloud Run:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/run.invoker"
Предоставьте роль eventarc.eventReceiver
, чтобы разрешить получение событий от поставщиков:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/eventarc.eventReceiver"
Предоставьте роль pubsub.publisher
учетной записи службы Cloud Storage. Это позволит сервисному аккаунту публиковать события при загрузке изображений в корзину.
GCS_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)
gcloud projects add-iam-policy-binding $PROJECT_NUMBER \
--member "serviceAccount:$GCS_SERVICE_ACCOUNT" \
--role "roles/pubsub.publisher"
5. Обзор функций обработки изображений
Создайте функцию для загрузки изображения из Cloud Storage, изменения размера изображения и загрузки изображения обратно в Cloud Storage. Функция вызовет Vision API, чтобы присвоить изображению метку описания. Функция проверит метку описания. Если метка идентифицирует изображение как «Еда», в службу меню будет отправлено событие для обновления изображения и миниатюры пункта меню.
Запуск функции
Функции Cloud Storage основаны на уведомлениях Pub/Sub от Cloud Storage и поддерживают аналогичные типы событий:
В ходе этой лабораторной работы вы развернете и активируете функцию, когда объект будет завершен в облачном хранилище.
Завершение объекта
События завершения объекта срабатывают, когда «запись» объекта облачного хранилища успешно завершена. В частности, это означает, что создание нового объекта или перезапись существующего объекта вызывает это событие. Операции обновления архива и метаданных игнорируются этим триггером.
6. Интегрируйте облачное хранилище
Cloud Storage — сервис для хранения ваших объектов в Google Cloud. Объект — это неизменяемая часть данных, состоящая из файла любого формата. Вы храните объекты в контейнерах, называемых корзинами. Все сегменты связаны с проектом, и вы можете группировать свои проекты в рамках организации. Клиентские библиотеки и API обеспечивают интеграцию с Cloud Storage.
В ходе этой лабораторной работы вы будете использовать клиентскую библиотеку для чтения и записи объектов в Cloud Storage.
Установка клиентской библиотеки
Облачные клиентские библиотеки доступны на многих популярных языках программирования. Чтобы начать использовать библиотеки, вам необходимо установить клиентскую библиотеку.
Использование клиентской библиотеки
Детали реализации во многом зависят от языка программирования. Чтобы использовать клиентскую библиотеку в своем приложении, первым делом необходимо импортировать зависимости Cloud Storage. Например, в проекте Node.js импорт добавляется в файл package.json. В приведенном ниже фрагменте показано уведомление о файле package.json этой лабораторной работы.
пакет.json
{ "name": "thumbnail-service", "version": "0.1.0", "dependencies": { "@google-cloud/functions-framework": "^3.0.0", "@google-cloud/storage": "^5.18.2", "@google-cloud/vision": "^2.4.2", ... } }
Зарегистрируйте обратный вызов CloudEvent
Зарегистрируйте обратный вызов CloudEvent с помощью Functions Framework , который будет запускаться Cloud Storage при загрузке нового изображения в корзину.
index.js
functions.cloudEvent('process-thumbnails', async (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); ...
Создание объекта ссылки на хранилище
После импорта клиентских библиотек вам потребуется создать новый клиент хранилища и сегменты, с которыми будет взаимодействовать ваше приложение.
index.js
const storage = new Storage(); const bucket = storage.bucket(file.bucket); const thumbBucket = storage.bucket(process.env.BUCKET_THUMBNAILS);
Загрузка объектов облачного хранилища
index.js
await bucket.file(file.name).download({ destination: originalFile });
Загрузить объекты в облачное хранилище
Вы можете отправлять запросы на загрузку в Cloud Storage тремя способами: одним запросом, возобновляемой загрузкой или многочастной загрузкой через XML API. Для больших загрузок или потоковой загрузки используйте возобновляемую загрузку. С помощью XML API файлы загружаются по частям и собираются как единый объект. Для небольших объектов используйте загрузку по одному запросу.
Код ниже загружает изображение в облачное хранилище с помощью загрузки одним запросом.
index.js
const thumbnailImage = await thumbBucket.upload(thumbFile);
7. Интегрируйте Vision API
Cloud Vision позволяет разработчикам легко интегрировать функции распознавания изображений в приложения, включая маркировку изображений, распознавание лиц и ориентиров, оптическое распознавание символов (OCR) и маркировку непристойного контента.
Установка клиентской библиотеки
Облачные клиентские библиотеки доступны на многих популярных языках программирования. Чтобы начать использовать библиотеки, вам необходимо установить клиентскую библиотеку.
Создайте клиент аннотатора изображений
Чтобы получить доступ к API Google с помощью официальных клиентских SDK, вы создаете объект службы на основе документа обнаружения API, который описывает API для SDK. Вам нужно будет получить его из службы обнаружения Vision API, используя свои учетные данные.
index.js
const client = new vision.ImageAnnotatorClient();
Создайте запрос Vision API
Vision API может выполнять обнаружение функций в файле изображения, отправляя содержимое файла изображения в виде строки в кодировке Base64 в теле вашего запроса.
Чтобы создать запрос с использованием ресурса изображений для аннотации вашего изображения. Запрос к этому API принимает форму объекта со списком запросов. Каждый элемент в этом списке содержит два бита информации:
- Данные изображения в кодировке Base64
- Список функций, которые вы хотели бы аннотировать для этого изображения.
index.js
const client = new vision.ImageAnnotatorClient(); const visionRequest = { image: { source: { imageUri: `gs://${file.bucket}/${file.name}` } }, features: [ { type: 'LABEL_DETECTION' }, ] }; const visionPromise = client.annotateImage(visionRequest);
8. Развертывание функций Cloud Run
Этот сервис изменения размера изображений является частью более крупной системы Cymbal Eats. В этом разделе вы развернете только компоненты, связанные с функцией обработки изображений. Полная установка включает в себя пользовательский интерфейс для загрузки изображения и последующий запрос на сохранение полученных метаданных. Эти возможности не устанавливаются в рамках данной лабораторной работы.
Во время развертывания функции будут созданы следующие компоненты:
- Функции облачного запуска
- Триггер Eventarc
- Тема Pub/Sub и подписка
В терминале CloudShell выполните приведенную ниже команду, чтобы развернуть функции Cloud Run с помощью триггерной корзины в menu-item-uploads-$PROJECT_ID
:
Чтобы развернуть функции Cloud Run непосредственно в Cloud Run, вы сначала развернете функцию, а затем создадите для нее триггер.
Разверните функции запуска облака:
gcloud beta run deploy process-thumbnails \
--source=thumbnail \
--function process-thumbnails \
--region $REGION \
--base-image google-22-full/nodejs20 \
--no-allow-unauthenticated \
--project=$PROJECT_ID \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--set-env-vars=BUCKET_THUMBNAILS=$BUCKET_THUMBNAILS,MENU_SERVICE_URL=$MENU_SERVICE_URL \
--max-instances=1 \
--quiet
Пример вывода:
Done. Service [process-thumbnails] revision [process-thumbnails-00001-abc] has been deployed and is serving 100 percent of traffic. Service URL: https://process-thumbnails-000000000.us-east1.run.app
Создайте триггер:
gcloud eventarc triggers create process-thumbnails-trigger \
--location=$REGION \
--destination-run-service=process-thumbnails \
--destination-run-region=$REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$UPLOAD_BUCKET_NAME" \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"
Пример вывода:
Creating trigger [process-thumbnails-trigger] in project [qwiklabs-gcp-02-53f8532696e1], location [us-east1]...done. WARNING: It may take up to 2 minutes for the new trigger to become active.
Если развертывание триггера не удалось из-за проблемы с разрешениями, дождитесь распространения изменений IAM, полученных на предыдущем шаге. Обычно это занимает 1–2 минуты, а затем повторите развертывание еще раз.
Пример вывода ошибки:
...If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent... [...]
В облачной консоли просмотрите службу Cloud Run , созданную для этой функции:
В облачной консоли просмотрите триггер Eventarc , созданный для функции:
В облачной консоли просмотрите тему Pub/Sub и подписку , созданные для триггера Eventarc:
9. Протестируйте и подтвердите комплексное решение
Загрузите новую фотографию в Cloud Storage и следите за ходом конвейера по мере анализа изображений. Вы протестируете комплексное решение, отслеживая журналы облачных функций.
Загрузка изображения
- Сохраните это изображение на свой локальный компьютер.
- Переименуйте файл 1.jpg.
- Откройте консоль облачного хранилища .
- Нажмите на ведро меню-пункт-загрузки-....
- Нажмите ЗАГРУЗИТЬ ФАЙЛЫ.
- Загрузите файл 1.jpg в корзину хранилища.
- В Cloud Console перейдите к Cloud Run.
- Нажмите на миниатюры процессов
- Нажмите на вкладку ЖУРНАЛЫ
- Перейдите в корзину Menu-item-thumbnails-$PROJECT_ID Cloud Storage .
- Убедитесь, что миниатюра изображения создана в сегменте миниатюр.
Загрузка изображения непродовольственной продукции
Чтобы убедиться, что функция работает правильно, вы загрузите изображение, не содержащее объекта, который можно было бы отнести к категории «Еда».
- Сохраните это изображение на свой локальный компьютер.
- Переименуйте файл 2.jpg.
- Откройте консоль облачного хранилища .
- Нажмите на ведро меню-пункт-загрузки-....
- Нажмите ЗАГРУЗИТЬ ФАЙЛЫ.
- Загрузите файл 2.jpg в хранилище.
- В Cloud Console перейдите к Cloud Run.
- Нажмите на миниатюры процессов
- Нажмите на вкладку ЖУРНАЛЫ
10. Поздравляем!
Поздравляем, вы закончили лабораторную работу!
Что дальше:
Ознакомьтесь с другими лабораториями Cymbal Eats:
- Запуск облачных рабочих процессов с помощью Eventarc
- Подключение к частному CloudSQL из Cloud Run
- Подключение к полностью управляемым базам данных из Cloud Run
- Безопасное бессерверное приложение с прокси-сервером с функцией идентификации (IAP)
- Запуск заданий Cloud Run с помощью Cloud Scheduler
- Безопасное развертывание в Cloud Run
- Защита входящего трафика Cloud Run
- Подключение к частному AlloyDB из GKE Autopilot
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.
1. Обзор
В ходе этой лабораторной работы вы узнаете, как использовать события сегмента Cloud Storage и Eventarc для запуска обработки событий. Вы будете использовать функции Cloud Run для анализа данных и обработки изображений. Функция будет использовать API Google Vision и сохранит полученное изображение обратно в корзину Cloud Storage.
Что вы узнаете
Как построить конвейер обработки изображений.
- Настройка сегментов хранилища
- Создайте функции Cloud Run для чтения и записи объектов в Cloud Storage.
- Развертывание триггера Eventarc
- Интегрируйте Vision API для обнаружения изображений продуктов питания
- Протестируйте и подтвердите комплексное решение
Предварительные условия
- Эта лабораторная работа предполагает знакомство с облачной консолью и средами оболочки.
- Предыдущий опыт работы с облачным хранилищем, функциями Cloud Run или Vision API будет полезен, но не обязателен.
2. Настройка и требования
Настройка облачного проекта
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Активировать Cloud Shell
Активируйте Cloud Shell, щелкнув значок справа от панели поиска.
Настройка среды
- Создайте переменные среды, связанные с проектом и ресурсами, выполнив приведенные ниже команды в терминале Cloud Shell.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NAME=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export UPLOAD_BUCKET_NAME=menu-item-uploads-$PROJECT_ID
export UPLOAD_BUCKET=gs://menu-item-uploads-$PROJECT_ID
export BUCKET_THUMBNAILS=gs://menu-item-thumbnails-$PROJECT_ID
export MENU_SERVICE_NAME=menu-service
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
- Включите API, необходимые для лаборатории
gcloud services enable \
vision.googleapis.com \
cloudfunctions.googleapis.com \
pubsub.googleapis.com \
cloudbuild.googleapis.com \
logging.googleapis.com \
eventarc.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
--quiet
- Клонировать репозиторий
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions
3. Настройте сегменты облачного хранилища.
Создание сегментов хранения
Создайте сегменты Cloud Storage для загрузки и миниатюр для конвейера обработки изображений.
Используйте команду gsutil mb и уникальное имя, чтобы создать два сегмента:
- Сегмент загрузки, в который изображения будут загружаться в первую очередь.
- Область миниатюр для хранения созданных миниатюр изображений.
Создайте корзину для загрузки новых изображений:
gsutil mb -p $PROJECT_ID -l $REGION $UPLOAD_BUCKET
Пример вывода:
Creating gs://menu-item-uploads-cymbal-eats-8399-3119/...
Создайте корзину для хранения созданных миниатюр:
gsutil mb -p $PROJECT_ID -l $REGION $BUCKET_THUMBNAILS
Пример вывода:
Creating gs://menu-item-thumbnails-cymbal-eats-8399-3119/...
Обновить разрешения сегмента
Обновите разрешения сегмента хранилища, чтобы предоставить пользователям разрешения на чтение.
Используйте команду gsutil iam ch, чтобы предоставить разрешение на чтение и запись объектов в вашей корзине:
gsutil iam ch allUsers:objectViewer $UPLOAD_BUCKET
gsutil iam ch allUsers:objectViewer $BUCKET_THUMBNAILS
Пример вывода
Updated IAM policy for project [cymbal-eats-8399-3119]. [...]
4. Настройте учетные записи служб
Создайте специальную учетную запись службы для Cloud Function для обработки миниатюр:
export CF_SERVICE_ACCOUNT=thumbnail-service-sa
gcloud iam service-accounts create ${CF_SERVICE_ACCOUNT}
Предоставьте роль artifactregistry.reader
, чтобы разрешить операции чтения из реестра артефактов:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/artifactregistry.reader"
Предоставьте роль storage.objectCreator
, чтобы разрешить сохранение сгенерированных изображений в сегменте миниатюр:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/storage.objectCreator"
Предоставьте роль run.invoker
, чтобы разрешить вызов службы Cloud Run:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/run.invoker"
Предоставьте роль eventarc.eventReceiver
, чтобы разрешить получение событий от поставщиков:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/eventarc.eventReceiver"
Предоставьте роль pubsub.publisher
учетной записи службы Cloud Storage. Это позволит сервисному аккаунту публиковать события при загрузке изображений в корзину.
GCS_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)
gcloud projects add-iam-policy-binding $PROJECT_NUMBER \
--member "serviceAccount:$GCS_SERVICE_ACCOUNT" \
--role "roles/pubsub.publisher"
5. Обзор функций обработки изображений
Создайте функцию для загрузки изображения из Cloud Storage, изменения размера изображения и загрузки изображения обратно в Cloud Storage. Функция вызовет Vision API, чтобы присвоить изображению метку описания. Функция проверит метку описания. Если метка идентифицирует изображение как «Еда», в службу меню будет отправлено событие для обновления изображения и миниатюры пункта меню.
Запуск функции
Функции Cloud Storage основаны на уведомлениях Pub/Sub от Cloud Storage и поддерживают аналогичные типы событий:
В ходе этой лабораторной работы вы развернете и активируете функцию, когда объект будет завершен в облачном хранилище.
Завершение объекта
События завершения объекта срабатывают, когда «запись» объекта облачного хранилища успешно завершена. В частности, это означает, что создание нового объекта или перезапись существующего объекта вызывает это событие. Операции обновления архива и метаданных игнорируются этим триггером.
6. Интегрируйте облачное хранилище
Cloud Storage — сервис для хранения ваших объектов в Google Cloud. Объект — это неизменяемая часть данных, состоящая из файла любого формата. Вы храните объекты в контейнерах, называемых корзинами. Все сегменты связаны с проектом, и вы можете группировать свои проекты в рамках организации. Клиентские библиотеки и API обеспечивают интеграцию с Cloud Storage.
В ходе этой лабораторной работы вы будете использовать клиентскую библиотеку для чтения и записи объектов в Cloud Storage.
Установка клиентской библиотеки
Облачные клиентские библиотеки доступны на многих популярных языках программирования. Чтобы начать использовать библиотеки, вам необходимо установить клиентскую библиотеку.
Использование клиентской библиотеки
Детали реализации во многом зависят от языка программирования. Чтобы использовать клиентскую библиотеку в своем приложении, первым делом необходимо импортировать зависимости Cloud Storage. Например, в проекте Node.js импорт добавляется в файл package.json. В приведенном ниже фрагменте показано уведомление о файле package.json этой лабораторной работы.
пакет.json
{ "name": "thumbnail-service", "version": "0.1.0", "dependencies": { "@google-cloud/functions-framework": "^3.0.0", "@google-cloud/storage": "^5.18.2", "@google-cloud/vision": "^2.4.2", ... } }
Зарегистрируйте обратный вызов CloudEvent
Зарегистрируйте обратный вызов CloudEvent с помощью Functions Framework , который будет запускаться Cloud Storage при загрузке нового изображения в корзину.
index.js
functions.cloudEvent('process-thumbnails', async (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); ...
Создание объекта ссылки на хранилище
После импорта клиентских библиотек вам потребуется создать новый клиент хранилища и сегменты, с которыми будет взаимодействовать ваше приложение.
index.js
const storage = new Storage(); const bucket = storage.bucket(file.bucket); const thumbBucket = storage.bucket(process.env.BUCKET_THUMBNAILS);
Загрузка объектов облачного хранилища
index.js
await bucket.file(file.name).download({ destination: originalFile });
Загрузить объекты в облачное хранилище
Вы можете отправлять запросы на загрузку в Cloud Storage тремя способами: одним запросом, возобновляемой загрузкой или многочастной загрузкой через XML API. Для больших загрузок или потоковой загрузки используйте возобновляемую загрузку. С помощью XML API файлы загружаются по частям и собираются как единый объект. Для небольших объектов используйте загрузку по одному запросу.
Код ниже загружает изображение в облачное хранилище с помощью загрузки одним запросом.
index.js
const thumbnailImage = await thumbBucket.upload(thumbFile);
7. Интегрируйте Vision API
Cloud Vision позволяет разработчикам легко интегрировать функции распознавания изображений в приложения, включая маркировку изображений, распознавание лиц и ориентиров, оптическое распознавание символов (OCR) и маркировку непристойного контента.
Установка клиентской библиотеки
Облачные клиентские библиотеки доступны на многих популярных языках программирования. Чтобы начать использовать библиотеки, вам необходимо установить клиентскую библиотеку.
Создайте клиент аннотатора изображений
Чтобы получить доступ к API Google с помощью официальных клиентских SDK, вы создаете объект службы на основе документа обнаружения API, который описывает API для SDK. Вам нужно будет получить его из службы обнаружения Vision API, используя свои учетные данные.
index.js
const client = new vision.ImageAnnotatorClient();
Создайте запрос Vision API
Vision API может выполнять обнаружение функций в файле изображения, отправляя содержимое файла изображения в виде строки в кодировке Base64 в теле вашего запроса.
Чтобы создать запрос с использованием ресурса изображений для аннотации вашего изображения. Запрос к этому API принимает форму объекта со списком запросов. Каждый элемент в этом списке содержит два бита информации:
- Данные изображения в кодировке Base64
- Список функций, которые вы хотели бы аннотировать для этого изображения.
index.js
const client = new vision.ImageAnnotatorClient(); const visionRequest = { image: { source: { imageUri: `gs://${file.bucket}/${file.name}` } }, features: [ { type: 'LABEL_DETECTION' }, ] }; const visionPromise = client.annotateImage(visionRequest);
8. Развертывание функций Cloud Run
Этот сервис изменения размера изображений является частью более крупной системы Cymbal Eats. В этом разделе вы развернете только компоненты, связанные с функцией обработки изображений. Полная установка включает в себя пользовательский интерфейс для загрузки изображения и последующий запрос на сохранение полученных метаданных. Эти возможности не устанавливаются в рамках данной лабораторной работы.
Во время развертывания функции будут созданы следующие компоненты:
- Функции облачного запуска
- Триггер Eventarc
- Тема Pub/Sub и подписка
В терминале CloudShell выполните приведенную ниже команду, чтобы развернуть функции Cloud Run с помощью триггерной корзины в menu-item-uploads-$PROJECT_ID
:
Чтобы развернуть функции Cloud Run непосредственно в Cloud Run, вы сначала развернете функцию, а затем создадите для нее триггер.
Разверните функции запуска облака:
gcloud beta run deploy process-thumbnails \
--source=thumbnail \
--function process-thumbnails \
--region $REGION \
--base-image google-22-full/nodejs20 \
--no-allow-unauthenticated \
--project=$PROJECT_ID \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--set-env-vars=BUCKET_THUMBNAILS=$BUCKET_THUMBNAILS,MENU_SERVICE_URL=$MENU_SERVICE_URL \
--max-instances=1 \
--quiet
Пример вывода:
Done. Service [process-thumbnails] revision [process-thumbnails-00001-abc] has been deployed and is serving 100 percent of traffic. Service URL: https://process-thumbnails-000000000.us-east1.run.app
Создайте триггер:
gcloud eventarc triggers create process-thumbnails-trigger \
--location=$REGION \
--destination-run-service=process-thumbnails \
--destination-run-region=$REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$UPLOAD_BUCKET_NAME" \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"
Пример вывода:
Creating trigger [process-thumbnails-trigger] in project [qwiklabs-gcp-02-53f8532696e1], location [us-east1]...done. WARNING: It may take up to 2 minutes for the new trigger to become active.
Если развертывание триггера не удалось из-за проблемы с разрешениями, дождитесь распространения изменений IAM, полученных на предыдущем шаге. Обычно это занимает 1–2 минуты, а затем повторите развертывание еще раз.
Пример вывода ошибки:
...If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent... [...]
В облачной консоли просмотрите службу Cloud Run , созданную для этой функции:
В облачной консоли просмотрите триггер Eventarc , созданный для функции:
В облачной консоли просмотрите тему Pub/Sub и подписку , созданные для триггера Eventarc:
9. Протестируйте и подтвердите комплексное решение
Загрузите новую фотографию в Cloud Storage и следите за ходом конвейера по мере анализа изображений. Вы протестируете комплексное решение, отслеживая журналы облачных функций.
Загрузка изображения
- Сохраните это изображение на свой локальный компьютер.
- Переименуйте файл 1.jpg.
- Откройте консоль облачного хранилища .
- Нажмите на ведро меню-пункт-загрузки-....
- Нажмите ЗАГРУЗИТЬ ФАЙЛЫ.
- Загрузите файл 1.jpg в корзину хранилища.
- В Cloud Console перейдите к Cloud Run.
- Нажмите на миниатюры процессов
- Нажмите на вкладку ЖУРНАЛЫ
- Перейдите в корзину Menu-item-thumbnails-$PROJECT_ID Cloud Storage .
- Убедитесь, что миниатюра изображения создана в области миниатюр.
Загрузка изображения непродовольственной продукции
Чтобы убедиться, что функция работает правильно, вы загрузите изображение, не содержащее объекта, который можно было бы отнести к категории «Еда».
- Сохраните это изображение на свой локальный компьютер.
- Переименуйте файл 2.jpg.
- Откройте консоль облачного хранилища .
- Нажмите на ведро меню-пункт-загрузки-....
- Нажмите ЗАГРУЗИТЬ ФАЙЛЫ.
- Загрузите файл 2.jpg в хранилище.
- В Cloud Console перейдите к Cloud Run.
- Нажмите на миниатюры процессов
- Нажмите на вкладку ЖУРНАЛЫ
10. Поздравляем!
Поздравляем, вы закончили лабораторную работу!
Что дальше:
Ознакомьтесь с другими лабораториями Cymbal Eats:
- Запуск облачных рабочих процессов с помощью Eventarc
- Подключение к частному CloudSQL из Cloud Run
- Подключение к полностью управляемым базам данных из Cloud Run
- Безопасное бессерверное приложение с прокси-сервером с функцией идентификации (IAP)
- Запуск заданий Cloud Run с помощью Cloud Scheduler
- Безопасное развертывание в Cloud Run
- Защита входящего трафика Cloud Run
- Подключение к частному AlloyDB из GKE Autopilot
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.
1. Обзор
В ходе этой лабораторной работы вы узнаете, как использовать события сегмента Cloud Storage и Eventarc для запуска обработки событий. Вы будете использовать функции Cloud Run для анализа данных и обработки изображений. Функция будет использовать API Google Vision и сохранит полученное изображение обратно в корзину Cloud Storage.
Что вы узнаете
Как построить конвейер обработки изображений.
- Настройка сегментов хранилища
- Создайте функции Cloud Run для чтения и записи объектов в Cloud Storage.
- Развертывание триггера Eventarc
- Интегрируйте Vision API для обнаружения изображений продуктов питания
- Протестируйте и подтвердите комплексное решение
Предварительные условия
- Эта лабораторная работа предполагает знакомство с облачной консолью и средами оболочки.
- Предыдущий опыт работы с облачным хранилищем, функциями Cloud Run или Vision API будет полезен, но не обязателен.
2. Настройка и требования
Настройка облачного проекта
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Активировать Cloud Shell
Активируйте Cloud Shell, щелкнув значок справа от панели поиска.
Настройка среды
- Создайте переменные среды, связанные с проектом и ресурсами, выполнив приведенные ниже команды в терминале Cloud Shell.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NAME=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export UPLOAD_BUCKET_NAME=menu-item-uploads-$PROJECT_ID
export UPLOAD_BUCKET=gs://menu-item-uploads-$PROJECT_ID
export BUCKET_THUMBNAILS=gs://menu-item-thumbnails-$PROJECT_ID
export MENU_SERVICE_NAME=menu-service
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
- Включите API, необходимые для лаборатории
gcloud services enable \
vision.googleapis.com \
cloudfunctions.googleapis.com \
pubsub.googleapis.com \
cloudbuild.googleapis.com \
logging.googleapis.com \
eventarc.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
--quiet
- Клонировать репозиторий
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions
3. Настройте сегменты облачного хранилища.
Создание сегментов хранения
Создайте сегменты Cloud Storage для загрузки и миниатюр для конвейера обработки изображений.
Используйте команду gsutil mb и уникальное имя, чтобы создать два сегмента:
- Сегмент загрузки, в который изображения будут загружаться в первую очередь.
- Область миниатюр для хранения созданных миниатюр изображений.
Создайте ведро для загрузки новых изображений:
gsutil mb -p $PROJECT_ID -l $REGION $UPLOAD_BUCKET
Пример вывода:
Creating gs://menu-item-uploads-cymbal-eats-8399-3119/...
Создайте ведро для хранения сгенерированных миниатюр:
gsutil mb -p $PROJECT_ID -l $REGION $BUCKET_THUMBNAILS
Пример вывода:
Creating gs://menu-item-thumbnails-cymbal-eats-8399-3119/...
Обновите разрешения ведра
Обновите разрешения на ведро для хранения, чтобы разрешить разрешения для чтения пользователям.
Используйте команду GSUTIL IAM CH, чтобы дать разрешение читать и записать объекты в своем ведре:
gsutil iam ch allUsers:objectViewer $UPLOAD_BUCKET
gsutil iam ch allUsers:objectViewer $BUCKET_THUMBNAILS
Пример вывода
Updated IAM policy for project [cymbal-eats-8399-3119]. [...]
4. Настройка учетных записей служб
Создайте пользовательскую учетную запись службы для функции облака для обработки миниатюр:
export CF_SERVICE_ACCOUNT=thumbnail-service-sa
gcloud iam service-accounts create ${CF_SERVICE_ACCOUNT}
Предоставьте роль artifactregistry.reader
, чтобы разрешить прочитать операции из реестра артефактов:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/artifactregistry.reader"
Предоставьте роль storage.objectCreator
.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/storage.objectCreator"
Предоставьте роль run.invoker
, чтобы разрешить призыв к услугам Cloud Run:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/run.invoker"
Предоставьте роль eventarc.eventReceiver
, чтобы разрешить получать мероприятия от поставщиков:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/eventarc.eventReceiver"
Предоставьте роли pubsub.publisher
в учетную запись Service Service. Это позволит учетной записи службы публиковать события, когда изображения загружаются в ведро.
GCS_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)
gcloud projects add-iam-policy-binding $PROJECT_NUMBER \
--member "serviceAccount:$GCS_SERVICE_ACCOUNT" \
--role "roles/pubsub.publisher"
5. Обзор функции обработки изображений
Создайте функцию для загрузки изображения с облачного хранилища, изменения размера изображения и загрузите изображение обратно в облачное хранилище. Функция будет вызвать API Vision, чтобы назначить этикетку описания изображению. Функция проверит этикетку описания. Если этикетка определяет изображение как «еду», событие будет отправлено в службу меню, чтобы обновить изображение пункта меню и миниатюр.
Запуска функции
Функции облачного хранилища основаны на пабе/подразделениях из облачного хранилища и поддержки аналогичных типов событий:
В этой лаборатории вы будете развернуть и запустить функцию, когда объект будет завершен в облачном хранилище.
Объект завершит
Object завершить триггер событий, когда «запись» объекта облачного хранения успешно завершена. В частности, это означает, что создание нового объекта или перезапись существующего объекта запускает это событие. Архив и операции обновления метаданных игнорируются этим триггером.
6. Интегрировать облачное хранилище
Cloud Storage - это услуга для хранения ваших объектов в Google Cloud. Объект - это неизменная часть данных, состоящая из файла любого формата. Вы храните объекты в контейнерах, называемых ведрами. Все ведра связаны с проектом, и вы можете группировать свои проекты в рамках организации. Клиентские библиотеки и API делают интеграцию с облачным хранилищем
В этой лаборатории вы будете использовать клиентскую библиотеку для чтения и записи объектов в облачное хранилище.
Установка клиентской библиотеки
Облачные клиентские библиотеки доступны во многих популярных языках программирования. Чтобы начать использовать библиотеки, вы должны установить клиентскую библиотеку.
Использование клиентской библиотеки
Детали реализации в большом уровне зависят от языка программирования. Чтобы использовать клиентскую библиотеку в вашем приложении, первым шагом является импорт зависимости облачного хранилища. Например, в проекте Node.js импорт добавляется в файл package.json. На приведенном ниже фрагменте показан уведомление этой лаборатории.
package.json
{ "name": "thumbnail-service", "version": "0.1.0", "dependencies": { "@google-cloud/functions-framework": "^3.0.0", "@google-cloud/storage": "^5.18.2", "@google-cloud/vision": "^2.4.2", ... } }
Зарегистрируйте обратный вызов CloudEvent
Зарегистрируйте обратный вызов CloudEvent в рамках функций , которая будет запускается облачным хранилищем, когда новое изображение будет загружено в ведро.
index.js
functions.cloudEvent('process-thumbnails', async (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); ...
Создание справочного объекта хранилища
После того, как клиентские библиотеки импортируются, вам нужно создать новый клиент для хранения и ведра, с которыми ваше приложение будет взаимодействовать.
index.js
const storage = new Storage(); const bucket = storage.bucket(file.bucket); const thumbBucket = storage.bucket(process.env.BUCKET_THUMBNAILS);
Скачать объекты облачного хранилища
index.js
await bucket.file(file.name).download({ destination: originalFile });
Загрузить объекты в облачное хранилище
Вы можете отправлять запросы на загрузку в облачное хранилище тремя способами: одноразовое, возобновляемое или XML API-загрузка. Для более крупных загрузок или потоковой загрузки используйте резюме загрузки. С XML API -файлы загружаются в частях и собираются в виде одного объекта. Для более мелких объектов используйте загрузки с одним запросом.
Приведенный ниже код загружает изображение в облачное хранилище, используя загрузку с одним запросом.
index.js
const thumbnailImage = await thumbBucket.upload(thumbFile);
7. интегрировать API Vision
Cloud Vision позволяет разработчикам легко интегрировать функции обнаружения зрения в приложения, включая маркировку изображений, обнаружение лица и ориентира, оптическое распознавание символов (OCR) и теги явного контента.
Установка клиентской библиотеки
Облачные клиентские библиотеки доступны во многих популярных языках программирования. Чтобы начать использовать библиотеки, вы должны установить клиентскую библиотеку.
Создать клиент аннотатора изображения
Чтобы получить доступ к API Google, используя официальные клиентские SDK, вы создаете объект службы на основе документа Discoy API, который описывает API для SDK. Вам нужно будет извлечь его из службы Discovery Vision API, используя ваши учетные данные.
index.js
const client = new vision.ImageAnnotatorClient();
Построить запрос на API Vision
API Vision может выполнять обнаружение функций в файле изображения, отправив содержимое файла изображения в виде кодируемой строки Base64 в теле вашего запроса.
Чтобы построить запрос, используя ресурс изображений для аннотирования вашего изображения. Запрос на этот API принимает форму объекта с списком запросов. Каждый элемент в этом списке содержит два бита информации:
- Base64-кодированные данные изображения
- Список функций, которые вы хотели бы аннотировать об этом изображении.
index.js
const client = new vision.ImageAnnotatorClient(); const visionRequest = { image: { source: { imageUri: `gs://${file.bucket}/${file.name}` } }, features: [ { type: 'LABEL_DETECTION' }, ] }; const visionPromise = client.annotateImage(visionRequest);
8. Развертывание функций Cloud Run
Этот сервис изменения размера изображения является частью более крупной системы тарелки. В этом разделе вы будете развернуть только компоненты, связанные с функцией обработки изображений. Полная установка включает в себя пользовательский интерфейс для загрузки изображения и ниже по течению для хранения полученных метаданных. Эти возможности не установлены как часть этой лаборатории.
Следующие компоненты будут созданы во время развертывания функции:
- Функции Cloud Run
- Eventarc Trigger
- Паб/подменная тема и подписка
В терминале Cloudshell запустите команду ниже, чтобы развернуть функции Cloud Run с помощью триггерного ведра на menu-item-uploads-$PROJECT_ID
:
Чтобы развернуть функции Cloud Run непосредственно на Cloud Run, вы сначала развернете функцию, а затем создаст для нее триггер.
Развернуть функции Cloud Run:
gcloud beta run deploy process-thumbnails \
--source=thumbnail \
--function process-thumbnails \
--region $REGION \
--base-image google-22-full/nodejs20 \
--no-allow-unauthenticated \
--project=$PROJECT_ID \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--set-env-vars=BUCKET_THUMBNAILS=$BUCKET_THUMBNAILS,MENU_SERVICE_URL=$MENU_SERVICE_URL \
--max-instances=1 \
--quiet
Пример вывода:
Done. Service [process-thumbnails] revision [process-thumbnails-00001-abc] has been deployed and is serving 100 percent of traffic. Service URL: https://process-thumbnails-000000000.us-east1.run.app
Создайте триггер:
gcloud eventarc triggers create process-thumbnails-trigger \
--location=$REGION \
--destination-run-service=process-thumbnails \
--destination-run-region=$REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$UPLOAD_BUCKET_NAME" \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"
Пример вывода:
Creating trigger [process-thumbnails-trigger] in project [qwiklabs-gcp-02-53f8532696e1], location [us-east1]...done. WARNING: It may take up to 2 minutes for the new trigger to become active.
Если развертывание триггера не удалось из -за проблемы с разрешением - подождите, пока IAM изменяется с предыдущего шага на распространение. Обычно занимает 1-2 минуты, а затем снова повторно разверните развертывание.
Пример вывода ошибки:
...If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent... [...]
В облачной консоли просмотрите сервис Cloud Run , который был создан для функции:
В облачной консоли просмотрите триггер Eventarc , который был создан для функции:
В облачной консоли, обзоре паб/подменная тема и подписка , которые были созданы для триггера EventArc:
9. Проверьте и проверяйте сквозное решение
Загрузите новую фотографию в облачное хранилище и контролируйте прогресс трубопровода при анализе изображений. Вы протестируете сквозное решение, контролируя журналы облачных функций.
Загрузка изображения
- Сохраните это изображение на местной машине
- Переименовать файл 1.JPG
- Откройте консоли облачного хранения
- Нажмите на меню-item-uploads -... ведра
- Нажмите «Загрузить файлы»
- Загрузить 1.jpg в ведро для хранения
- В облачной консоли перейдите к Cloud Run
- Нажмите на процесс-по пятнам
- Нажмите на вкладку журналов
- Перейдите в меню - элемент-настенный
- Убедитесь, что изображение миниатюры было создано в ведре миниатюр
Загрузка непродовольственного изображения
Чтобы проверить функцию, работает должным образом, вы загрузите изображение, которое не содержит объекта, который будет классифицирован как элемент «питания».
- Сохраните это изображение на местной машине
- Переименовать файл 2.jpg
- Откройте консоли облачного хранения
- Нажмите на меню-item-uploads -... ведра
- Нажмите «Загрузить файлы»
- Загрузить 2.jpg в ведро для хранения
- В облачной консоли перейдите к Cloud Run
- Нажмите на процесс-по пятнам
- Нажмите на вкладку журналов
10. Поздравляю!
Поздравляю, вы закончили лабораторию!
Что дальше:
Исследуйте другие тарелки, которые питают коделаб:
- Запуск облачных рабочих процессов с Eventarc
- Подключение к частному Cloudsql из Cloud Run
- Подключение к полностью управляемым базам данных из Cloud Run
- Безопасное без серверного приложения с Proxy Identity Aware (IAP)
- Запуск заданий по облачным запускам с помощью облачного планировщика
- Надежно развертывание в Cloud Run
- Защита трафика ввода в облачном пробежек
- Подключение к частному AlloyDB от GKE Autopilot
Очистить
Чтобы избежать внесения сборов в вашей учетной записи Google Cloud за ресурсы, используемые в этом уроке, либо удалите проект, который содержит ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ устранить выставление счетов - это удалить проект, который вы создали для учебного пособия.