Ich möchte mithilfe von Apps Script eine HTTP-POST-Anfrage (mit JSON-Daten) an eine Cloud Run Function senden, sehe aber keinen solchen Eintrag in den Cloud Run Function-Protokollen. Die Apps Script API ist in meinem GCP-Projekt aktiviert und ich habe auch die GCP-Projektnummer in den Projekteinstellungen angegeben.
Die mit meinem Konto verknüpften Rollen: Besitzer, Cloud Run-Quellentwickler, Dienstkontobenutzer, Dienstnutzungskonsument
Die mit dem Dienstkonto verknüpften Rollen, die ich speziell für Cloud Run Functions erstellt habe: Cloud Functions-Entwickler, Cloud Run-Administrator, Dienstkonto-Token-Ersteller, Dienstkonto Benutzer
Einige Informationen aus meinem Code:
appsscript.json:
Code: Select all
...
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/script.container.ui",
"https://www.googleapis.com/auth/cloud-platform",
"openid"
],
...
Code: Select all
var options = {
"method": "post",
"contentType": "application/json",
"payload": jsonData,
"headers": {
"Authorization": "Bearer "+ScriptApp.getIdentityToken() // gcloud auth print-identity-token
}
};
...
// url: Cloud Run Functions URL
var response = UrlFetchApp.fetch(url, options);
Code: Select all
import functions_framework
@functions_framework.http
def http_function(request):
content_type = request.headers["content-type"]
if content_type == "application/json":
try:
request_json = request.get_json(silent=True)
data = request_json
except Exception as e:
return "No JSON data provided", 400
return f"{data}"
Code: Select all
requestCode: Select all
content-typeCode: Select all
responseCode: Select all
{ Date: 'Fri, 04 Apr 2025 09:20:23 GMT', 'Content-Length': '181', 'Content-Type': 'text/html; charset=utf-8', 'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000', 'X-Cloud-Trace-Context': 'e85c4f564777ce1ae6d02cd31da8d566;o=1', Server: 'Google Frontend' }Code: Select all
HTTP Response Code: 500Tatsächlich habe ich auch versucht, Appscript.GetOAuthToken() zu verwenden, wie von @TheMaster empfohlen:
Code: Select all
HTTP Response Code: 401Fehler: Nicht autorisiert … Ihr Client hat keine Berechtigung für die angeforderte URL
In der gcloud-Shell habe ich den folgenden „CLI-Testbefehl“ ausprobiert, den ich im Abschnitt „Testdienst“ gefunden habe:
Code: Select all
curl -X POST https://[service URL] -H "Authorization: bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" -d '{"name": "Developer"}'Kann mir jemand helfen, meine Funktion endlich dazu zu bringen, die Anfrage anzunehmen?
Wenn ich wichtige Informationen nicht geteilt habe, lassen Sie es mich bitte wissen.
Mobile version