Веб-приложение, выполняемое учетной записью пользователя: как применяются квоты для выполнения UrlFetchApp учетной записью службы?

Просматривая различные сообщения SO (например, это) о квотах, обстоятельства настолько различны, что я не понимаю, как они применимы к веб-приложению, с которым я работаю. Вот функции этого веб-приложения, которые могут иметь отношение к квотам:

  1. Веб-приложение находится в учетной записи «[email protected]».
  2. Веб-приложение запускается под пользователем, с доступом для любого пользователя Gmail.
  3. Разрешения для проекта веб-приложения: userinfo.email; скрипт.внешний_запрос; и script.send_mail.
  4. Чтение и запись в электронные таблицы Google выполняются учетной записью службы проекта с помощью выполнения UrlFetchApp, где электронные таблицы совместно используются учетной записью службы.
  5. Разрешения для учетной записи службы: электронные таблицы и script.external_request.

Квоты, вызывающие обеспокоенность, относятся к проекту веб-приложения и его сервисной учетной записи, а не к отдельным пользователям.

Например, если к учетной записи службы применяется ограничение в 30 одновременных запусков, то это может быть большой проблемой, поскольку, безусловно, может быть более 30 пользователей, одновременно запускающих выполнения (включая UrlFetch, выполняемый учетной записью службы). Или квоты применяются отдельно к каждому «экземпляру» сервисного аккаунта для каждого пользователя?

Итак, основной вопрос: какие квоты будут применяться к проекту или к совокупным действиям его сервисного аккаунта от имени всех пользователей?

КОНКРЕТНО

При выполнении веб-приложения от имени пользователя и доступе из любой учетной записи Gmail выполняется ли выполнение следующего кода (в соответствии с политиками квот службы Google) для пользовательские квоты или для веб-приложения квоты проектного/служебного аккаунта?

 var clientToken = //Service account's oAuth authentication token
 var urlSheet = `https://docs.google.com/spreadsheets/d/${ssID}/gviz/tq?tqx=out:json&gid=${sheetId}&tq=${encodeURI(query)}`;

 var res = UrlFetchApp.fetch(urlSheet, {"method": "get", headers: {authorization: "Bearer " + clientToken}}).getContentText();

Спасибо за любые разъяснения по этому поводу.

Я должен извиниться за мое плохое знание английского языка. Могу я спросить вас о текущих настройках ваших веб-приложений? Могу я спросить вас о настройке Execute as: и Who has access to the app:?

Tanaike 21.03.2022 01:26

@Tanaike Еще раз спасибо за ответ. # 2 в моем вопросе означало указать, что: выполнить от имени пользователя и получить доступ любому пользователю Gmail.

DougMS 21.03.2022 04:06

Спасибо за ответ. Я должен извиниться за мое плохое знание английского языка, снова. К сожалению, я все еще не могу понять ваш ответ. Но я хотел бы попытаться понять это. Когда я смог правильно понять это, я хотел бы думать о решении. Я был бы признателен, если бы вы могли простить мое плохое знание английского языка.

Tanaike 21.03.2022 06:12

@Tanaike Спасибо за вашу готовность помочь. Ваш опыт - огромная помощь. Пожалуйста, обратите внимание на более узкий фокус, который я добавил вместе с небольшим блоком кода под заголовком БОЛЬШЕ КОНКРЕТНО в этом вопросе. Я надеюсь, что это яснее.

DougMS 21.03.2022 18:41

Спасибо за ответ. Я все еще не могу понять ваши настройки веб-приложений. Поэтому я не могу думать о вашей нынешней ситуации. Так что придется еще раз задать тот же вопрос. Могу я спросить вас о значениях Execute as: и Who has access to the app: в ваших развернутых веб-приложениях? Прошу прощения за это.

Tanaike 22.03.2022 02:15

@Tanaike Веб-приложение настроено на: Выполнение как: «Пользователь получает доступ к веб-приложению». У кого есть доступ к приложению: «Все, у кого есть аккаунт Google». (не аноним).

DougMS 22.03.2022 03:24

Спасибо за ответ. В вашей ситуации ваши веб-приложения развертываются как Execute as: User accessing the web app и Who has access to the app: Anyone with Google account. И ваш текущий сценарий — это ваш сценарий показа, и вы хотите получить доступ к веб-приложениям, используя учетную запись службы. Правильно ли я понимаю? Если я правильно понимаю, можете ли вы предоставить сценарии своих веб-приложений и клиентской части?

Tanaike 22.03.2022 03:29

@Tanaike Пожалуйста, ознакомьтесь с упрощенным кодом и формулировкой моего вопроса выше под заголовком «БОЛЕЕ КОНКРЕТНО». Интерфейсы на стороне клиента представляют собой html-формы в html-файлах веб-приложения. Приписывается ли выполнение UrlFetchApp с проверкой подлинности клиента службы квоте для пользователя или квоте для проекта веб-приложения? Я ожидаю, что это приписывается пользователю, когда веб-приложение выполняется от имени пользователя. Спасибо.

DougMS 22.03.2022 14:29

Итак, просто для ясности, единственная часть, которая использует учетную запись службы, — это токен при совершении вызовов? Насколько я понимаю, UrlFetchApp тоже попадет в пользовательское исполнение.

Emel 05.04.2022 10:03

@Emel, спасибо, что посмотрели это. UrlFetchApp подключается (чтение/запись) к электронным таблицам проекта с авторизацией под токеном служебной учетной записи, где электронные таблицы передаются на адрес Gmail служебной учетной записи. Веб-приложение выполняется от имени пользователя, что дает сценарию доступ к адресу Gmail пользователя, прошедшего проверку подлинности. Единственные разрешения, предоставленные пользователем, предназначены для userinfo.email, script.send_email и script.external_request (т. е. для функций выборки). Как вы понимаете, все эти функции скрипта попадают в квоты пользователя? Спасибо еще раз.

DougMS 06.04.2022 18:05

Я думаю, что вся необходимая вам информация находится внутри этого отвечать. Apps Script quota apply per user invoking a service.

Emel 07.04.2022 10:44

@Emel Еще раз спасибо. Я ожидаю, что квоты применяются к учетной записи службы, а не к пользователю, поэтому 20 000 вызовов на получение URL-адресов в день являются стандартной квотой. Однако ответ, на который вы ссылаетесь, остается для меня неоднозначным, потому что неясно, использует ли вопрошающий (который отмечает, что его тестирование показывает, что квота применяется к пользователю этого приложения) учетную запись службы для вызовов.

DougMS 07.04.2022 19:42

@Emel Если вы хотите ввести свой последний комментарий в качестве ответа, я отмечу его как принятый ответ. Спасибо еще раз.

DougMS 07.04.2022 19:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
13
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как уже упоминалось здесь, вызовы UrlFetchApp будут засчитываться в отношении учетной записи службы, выполняющей вызов, поскольку именно она используется для их совершения.

Все другие услуги, такие как использование SpreadsheetApp или любой другой услуги, предлагаемой скриптом Google Apps, будут засчитываться в учетную запись пользователя, запускающего скрипт: Apps Script quota apply per user invoking a service..

Другие вопросы по теме