1. Введение
Обзор
Cloud Run Functions — это новый способ развертывания рабочих нагрузок с использованием привычных парадигм обработки событий GCF и сигнатур функций. Вместо использования нашего жестко регламентированного процесса сборки и конфигураций развертывания, Cloud Run Functions предоставляет вам прямой контроль над базовой службой, созданной в Cloud Run.
С помощью функций Cloud Run мы обеспечиваем простой пользовательский интерфейс развертывания из источника Cloud Run, предоставляя разработчикам полный контроль над своими рабочими нагрузками с помощью конфигураций Cloud Run.
В этом разделе вы узнаете, как развернуть функцию, управляемую событиями, в Node.js. Вы развернете функцию, которая будет запускаться всякий раз, когда объект будет финализирован в хранилище Google Cloud Storage.
В этом практическом занятии используются примеры на Node.js. Однако вы можете использовать примеры кода Cloud Functions 2-го поколения на любом языке по вашему выбору:
- примеры функций Python
- Примеры функций Nodejs
- Примеры функций Go
- Примеры функций Java
- Примеры функций PHP
- Примеры функций Ruby
- Примеры функций .NET
Что вы узнаете
- Как развернуть управляемую событиями функцию Cloud Run, которая запускается всякий раз, когда объект загружается в хранилище GCS.
- Как создать сервисный аккаунт с соответствующими ролями для получения событий из Cloud Storage и вызова функции Cloud Run?
2. Настройте переменные среды и включите API.
Обновить интерфейс командной строки gcloud
Для выполнения этого практического задания требуется установленная последняя версия интерфейса командной строки gcloud. Обновить интерфейс можно, выполнив команду:
gcloud components update
Включить API
Прежде чем начать использовать этот практический пример, вам потребуется включить несколько API. Для работы с этим практическим примером необходимы следующие API. Вы можете включить эти API, выполнив следующую команду:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
Настройка переменных среды
Вы можете установить переменные окружения, которые будут использоваться на протяжении всего этого практического занятия.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. Создайте сегмент хранения и учетную запись службы.
Создайте хранилище (сумку для хранения).
Создать сегмент Cloud Storage можно, выполнив следующую команду:
gsutil mb -l us-central1 gs://$BUCKET_NAME
Создайте учетную запись службы
В этом примере вам потребуется создать учетную запись службы с необходимыми разрешениями EventArc и ролью вызывающего пользователя Cloud Run, чтобы получать события из Cloud Storage и вызывать функцию Cloud Run.
Сначала создайте учетную запись службы.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
Далее предоставьте учетной записи службы, связанной с вашим триггером Eventarc, роль Eventarc Event Receiver (roles/eventarc.eventReceiver) в проекте, чтобы триггер мог получать события от поставщиков событий.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Затем предоставьте учетной записи службы роль вызывающего пользователя Cloud Run, чтобы она могла вызывать функцию.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
4. Создайте и разверните функцию.
Сначала создайте директорию для исходного кода и перейдите в неё с помощью команды `cd`.
mkdir ../$SERVICE_NAME && cd $_
Затем создайте файл package.json со следующим содержимым:
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
Далее создайте файл index.js со следующим содержимым:
const functions = require("@google-cloud/functions-framework");
// Register a CloudEvent callback with the Functions Framework that will
// be triggered by Cloud Storage.
functions.cloudEvent("helloGCS", (cloudEvent) => {
console.log(`Event ID: ${cloudEvent.id}`);
console.log(`Event Type: ${cloudEvent.type}`);
const file = cloudEvent.data;
console.log(`Bucket: ${file.bucket}`);
console.log(`File: ${file.name}`);
console.log(`Metageneration: ${file.metageneration}`);
console.log(`Created: ${file.timeCreated}`);
console.log(`Updated: ${file.updated}`);
});
Теперь вы можете развернуть функцию Cloud Run, выполнив следующую команду:
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function helloGCS \
--region $REGION \
--no-allow-unauthenticated
Обратите внимание на следующее:
- Флаг –source используется для того, чтобы указать Cloud Run на необходимость встроить функцию в исполняемый контейнерный сервис.
- Флаг –function (новый) используется для установки точки входа нового сервиса в качестве сигнатуры функции, которую вы хотите вызвать.
- (необязательно) параметр –no-allow-unauthenticated, чтобы предотвратить публичный вызов вашей функции.
Вы можете просмотреть свой новый сервис crf-event-codelab , выполнив следующую команду:
gcloud beta run services describe $SERVICE_NAME
5. Создайте событие.
Мы можем создать триггер Eventarc для отправки сообщений нашей функции каждый раз, когда объект завершает свою работу в Google Cloud Storage:
BUCKET_REGION=$REGION
gcloud eventarc triggers create $TRIGGER_NAME \
--location=$REGION \
--destination-run-service=$SERVICE_NAME \
--destination-run-region=$BUCKET_REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$BUCKET_NAME" \
--service-account=$SERVICE_ACCOUNT_ADDRESS
Обратите внимание на следующее:
- gcs-function-trigger — это имя триггера.
- crf-event-codelab — это название сервиса Cloud Run, в котором развернута наша функция.
- Для флага –event-filters не используйте префикс gs:// в имени вашего хранилища.
Подробное руководство по настройке службы триггеров из Cloud Storage с использованием Eventarc можно найти в документации Cloud Run здесь: https://cloud.google.com/run/docs/tutorials/eventarc
6. Проверьте функцию
После завершения развертывания вы увидите URL-адрес сервиса. Для вызова функции необходимо отправить аутентифицированный запрос с вашим токеном идентификации или токеном идентификации субъекта, имеющего роль Cloud Run Invoker, как показано ниже:
# get the Service URL SERVICE_URL="$(gcloud run services describe $SERVICE_NAME --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
После развертывания функции и создания триггера мы готовы ее вызвать.
Создайте файл и загрузите его в свой сегмент Cloud Storage. Это можно сделать через веб-интерфейс Cloud Console или с помощью инструмента командной строки gsutil, например.
echo "hello world" > test.txt gsutil cp test.txt gs://$BUCKET_NAME
После успешной загрузки файла будет сгенерировано событие, и ваша функция выведет основную информацию об объекте, например, имя файла. Вы можете найти этот вывод в записях журнала функции в консоли Cloud. В качестве альтернативы вы можете запросить этот вывод с помощью интерфейса командной строки gcloud:
gcloud logging read "resource.labels.service_name=$SERVICE_NAME AND textPayload: File" --format=json
и вы должны увидеть следующий результат.
"textPayload": "File: test.txt"
7. Поздравляем!
Поздравляем с завершением практического занятия!
Мы рекомендуем ознакомиться с документацией по функциям Cloud Run.
Что мы рассмотрели
- Как развернуть управляемую событиями функцию Cloud Run, которая запускается всякий раз, когда объект загружается в хранилище GCS.
- Как создать сервисный аккаунт с соответствующими ролями для получения событий из Cloud Storage и вызова функции Cloud Run?
8. Уборка
Чтобы избежать непреднамеренных списаний средств (например, если эта служба Cloud Run будет случайно запущена больше раз, чем предусмотрено вашим ежемесячным лимитом вызовов Cloud Run в бесплатном тарифе ), вы можете либо удалить службу Cloud Run, либо удалить проект, созданный на шаге 2.
Чтобы удалить службы Cloud Run, перейдите в консоль Cloud Run по адресу https://console.cloud.google.com/run/ и удалите службу crf-event-codelab созданную вами в этом практическом задании.
Если вы решите удалить весь проект, перейдите по ссылке https://console.cloud.google.com/cloud-resource-manager , выберите проект, созданный на шаге 2, и нажмите «Удалить». После удаления проекта вам потребуется изменить проекты в вашем Cloud SDK. Список всех доступных проектов можно просмотреть, выполнив gcloud projects list .