Tipps zu Google Cloud S3

@Pfaffman hat diese Informationen zu Google Cloud ausgelagert, die nicht unbedingt in die OP passen, aber für diejenigen gespeichert werden sollten, die Probleme mit Google Cloud haben


Hallo,

Danke für den Tipp, aber er hat bei mir erst funktioniert, als ich die Rolle von „Storage Legacy Object Owner“ zu „Storage Legacy Bucket Owner“ geändert habe.

Es steht ausdrücklich in der Quickinfo, während die Rolle ausgewählt wird:

Storage Legacy Object Owner

Lese-/Schreibzugriff auf vorhandene Objekte ohne Auflistung.

Storage Legacy Bucket Owner

Lese- und Schreibzugriff auf vorhandene Buckets mit Auflistung/Erstellung/Löschung von Objekten.

Jetzt funktioniert es, einschließlich der Auflistung, was das automatische Backup ermöglicht! Hurra!!

3 „Gefällt mir“

Über die Verwendung von S3 auf Google Buckets:

Wie ich hier erwähnt habe:
https://meta.discourse.org/t/using-object-storage-for-uploads-s3-clones/148916/334
Ich kann bestätigen, dass das Auflisten funktioniert und das automatische Backup mit einem Dienstkonto mit der Rolle „Storage Legacy Bucket Owner“ für den Bucket funktioniert.

Beachten Sie, dass bei der Verwendung von S3 für Google Bucket nur eine Region ausgewählt werden darf, die in Amazon denselben Namen hat wie in Google.
Ich finde es albern, dass man aus einer Dropdown-Liste mit Backend-Validierung auswählen muss (ich habe versucht, mit der API zu experimentieren, ohne Erfolg), anstatt sie einzugeben.

Dies bedeutet, dass Sie beispielsweise keinen Bucket in Europa verwenden können, da der Präfix in Amazon EU und in Google EUROPE lautet, und Sie können auch keine Multi-Region verwenden.

AWS:

Region Name Code
US East (Ohio) us-east-2
US East (N. Virginia) us-east-1
US West (N. California) us-west-1
US West (Oregon) us-west-2
Africa (Cape Town) af-south-1
Asia Pacific (Hong Kong) ap-east-1
Asia Pacific (Jakarta) ap-southeast-3
Asia Pacific (Mumbai) ap-south-1
Asia Pacific (Osaka) ap-northeast-3
Asia Pacific (Seoul) ap-northeast-2
Asia Pacific (Singapore) ap-southeast-1
Asia Pacific (Sydney) ap-southeast-2
Asia Pacific (Tokyo) ap-northeast-1
Canada (Central) ca-central-1
China (Beijing) cn-north-1
China (Ningxia) cn-northwest-1
Europe (Frankfurt) eu-central-1
Europe (Ireland) eu-west-1
Europe (London) eu-west-2
Europe (Milan) eu-south-1
Europe (Paris) eu-west-3
Europe (Stockholm) eu-north-1
Middle East (Bahrain) me-south-1
South America (São Paulo) sa-east-1

Google:

Continent Region Name Region Description
North America
NORTHAMERICA-NORTHEAST1 Montréal
NORTHAMERICA-NORTHEAST2 Toronto
US-CENTRAL1 Iowa
US-EAST1 South Carolina
US-EAST4 Northern Virginia
US-EAST5 Columbus
US-SOUTH1 Dallas
US-WEST1 Oregon
US-WEST2 Los Angeles
US-WEST3 Salt Lake City
US-WEST4 Las Vegas
South America
SOUTHAMERICA-EAST1 São Paulo
SOUTHAMERICA-WEST1 Santiago
Europe
EUROPE-CENTRAL2 Warsaw
EUROPE-NORTH1 Finland
EUROPE-SOUTHWEST1 Madrid
EUROPE-WEST1 Belgium
EUROPE-WEST2 London
EUROPE-WEST3 Frankfurt
EUROPE-WEST4 Netherlands
EUROPE-WEST6 Zürich
EUROPE-WEST8 Milan
EUROPE-WEST9 Paris
Asia
ASIA-EAST1 Taiwan
ASIA-EAST2 Hong Kong
ASIA-NORTHEAST1 Tokyo
ASIA-NORTHEAST2 Osaka
ASIA-NORTHEAST3 Seoul
ASIA-SOUTH1 Mumbai
ASIA-SOUTH2 Delhi
ASIA-SOUTHEAST1 Singapore
Indonesia
ASIA-SOUTHEAST2 Jakarta
Australia
AUSTRALIA-SOUTHEAST1 Sydney
AUSTRALIA-SOUTHEAST2 Melbourne

Ich finde es auch albern, diese Optionen in den Dateieinstellungen festlegen zu müssen. Ich habe S3 nicht zum Hochladen von Dateien verwendet, sondern nur für Backups. Es ist erforderlich, einen separaten Bucket für Uploads und Backups zu haben, aber es gibt nur eine Stelle, an der die Region eingestellt werden kann, und zwar in den Dateieinstellungen.

Ich hoffe, das erspart jemandem Zeit bei der Fehlersuche.

PS: Ich habe es mit https://discourse.example.com/logs/ debuggt

Failed to list backups from S3: The specified location constraint is not valid. –\u003e Region problem

Failed to list backups from S3: Access denied. –\u003e Storage Legacy Object Owner anstelle von Storage Legacy Bucket Owner

1 „Gefällt mir“

Wenn Sie die Einrichtung mit den Umgebungsvariablen wie in der OP beschrieben vornehmen und DISCOURSE_S3_ENDPOINT wie empfohlen festlegen, wird DISCOURSE_S3_REGION ignoriert, was dies zu keinem Problem macht.

2 „Gefällt mir“

Danke,
Die Sache ist, dass ich die Bitnami VM One-Click-Installation aus dem Google Cloud Marketplace verwende.
Es ist wahrscheinlich möglich, die Umgebungsvariablen anzupassen, aber nicht einfach.
Das Einstellen des Endpunkts in der Benutzeroberfläche ignoriert die Region nicht.

Trotzdem danke.

Vielen Dank!
Ich habe vergessen, den Codeausschnitt hinzuzufügen.

Leider erhalte ich folgende Fehlermeldung:

Aws::S3::Errors::InvalidArgument: Ungültiges Argument.

Das passt sehr gut zu der Fehlermeldung, die ich bei der Verwendung der Weboberfläche erhalten habe, aber es gibt nicht viel, womit ich das Problem lösen kann…
Ich habe diesen Thread gefunden, der darauf hindeutet, dass es möglicherweise eine Inkompatibilität mit Google Storage im Vergleich zu Amazon S3 gibt.
Könnte dies für Google Storage fehlerhaft sein?

Vollständiger Stacktrace bei manueller Ausführung des Tasks:

root@discourse-2-app:/var/www/discourse# sudo -E -u discourse bundle exec rake s3:upload_assets --trace
** Invoke s3:upload_assets (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke s3:ensure_cors_rules (first_time)
** Invoke environment
** Execute s3:ensure_cors_rules
Installing CORS rules...
skipping
** Execute s3:upload_assets
Uploading: assets/docker-manager-app-ecd2975f42c4096057a046c086d6a43905c8a18442900d5293ae9a3489422bb0.js
rake aborted!
Aws::S3::Errors::InvalidArgument: Ungültiges Argument.
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/dualstack.rb:27:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/accelerate.rb:56:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/client.rb:12369:in `put_object'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/object.rb:1472:in `put'
/var/www/discourse/lib/s3_helper.rb:75:in `upload'
/var/www/discourse/lib/tasks/s3.rake:37:in `block in upload'
/var/www/discourse/lib/tasks/s3.rake:36:in `open'
/var/www/discourse/lib/tasks/s3.rake:36:in `upload'
/var/www/discourse/lib/tasks/s3.rake:192:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/s3.rake:191:in `each'
/var/www/discourse/lib/tasks/s3.rake:191:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/rake:25:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/rake:25:in `<top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:485:in `exec'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:31:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:25:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:48:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:36:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets

PS: Ich ziehe nicht in Betracht, den Bucket zu wechseln, frage mich aber, was mit den zuvor auf der VM-Festplatte hochgeladenen Bildern passieren würde.

EDIT (GELÖST):
@gerhard @Falco
Ich habe das Problem gefunden, indem ich http_wire_trace aktiviert habe.
Die Fehlermeldung “Ungültiges Argument” von googleapis erklärt es:
“Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at Uniform bucket-level access  |  Cloud Storage  |  Google Cloud
Ich habe die feingranulare ACL für den Bucket anstelle der uniformen ACL aktiviert, da der beim Upload gesetzte Header angibt, dass er öffentlich ist. (Ich hatte eine uniforme ACL und habe den gesamten Bucket auf öffentlich gesetzt).

Ich habe nicht die Berechtigung, den OP zu aktualisieren, aber ich denke, es sollte erwähnt werden, dass das Dienstkonto die Rolle Storage Legacy Bucket Owner für den Backup-Bucket benötigt und der Upload-Bucket die feingranulare ACL verwenden muss, damit Google Buckets funktionieren.

Ich hoffe, das spart der Community Zeit.
Vielen Dank nochmals an @Falco @pfaffman @gerhard @tuanpembual für die Hilfe hier.

2 „Gefällt mir“