Consigli su Google Cloud S3

@Pfaffman ha separato queste informazioni su Google Cloud, che non rientrano necessariamente nell’OP, ma dovrebbero essere salvate per coloro che hanno problemi con Google Cloud


Ciao,

Grazie per il suggerimento, ma non ha funzionato finché non ho cambiato il ruolo da Storage Legacy Object Owner a Storage Legacy Bucket Owner.

È specificamente scritto nella descrizione comando durante la selezione del ruolo:

Storage Legacy Object Owner

Accesso in lettura/scrittura agli oggetti esistenti senza elencare.

Storage Legacy Bucket Owner

Accesso in lettura e scrittura ai bucket esistenti con elenco di oggetti/creazione/eliminazione.

Ora funziona, incluso l’elenco che abilita il backup automatico! evvai!!

3 Mi Piace

Informazioni sull’utilizzo di S3 su Google Buckets:

Come ho menzionato qui:
https://meta.discourse.org/t/using-object-storage-for-uploads-s3-clones/148916/334
Posso confermare che l’elenco funziona e il backup automatico funziona utilizzando un account di servizio con il ruolo di proprietario del bucket legacy di archiviazione sul bucket.

Sii consapevole che l’utilizzo di S3 per Google Bucket implica la selezione di una regione che abbia lo stesso nome in Amazon che in Google.
Trovo sciocco dover scegliere da un menu a discesa con convalida lato server (ho provato a manipolare l’API senza successo) invece di digitarlo.

Ciò implica che non è possibile utilizzare un bucket in Europa, ad esempio, poiché il prefisso su Amazon è EU e EUROPE su Google, né è possibile utilizzare il multi-regione.

AWS:

Nome regione Codice
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
Cina (Beijing) cn-north-1
Cina (Ningxia) cn-northwest-1
Europa (Francoforte) eu-central-1
Europa (Irlanda) eu-west-1
Europa (Londra) eu-west-2
Europa (Milano) eu-south-1
Europa (Parigi) eu-west-3
Europa (Stoccolma) eu-north-1
Medio Oriente (Bahrain) me-south-1
Sud America (San Paolo) sa-east-1

Google:

Continente Nome regione Descrizione regione
Nord America
NORTHAMERICA-NORTHEAST1 Montréal icona foglia Basso CO2
NORTHAMERICA-NORTHEAST2 Toronto icona foglia Basso CO2
US-CENTRAL1 Iowa icona foglia Basso CO2
US-EAST1 South Carolina
US-EAST4 Northern Virginia
US-EAST5 Columbus
US-SOUTH1 Dallas
US-WEST1 Oregon icona foglia Basso CO2
US-WEST2 Los Angeles
US-WEST3 Salt Lake City
US-WEST4 Las Vegas
Sud America
SOUTHAMERICA-EAST1 San Paolo icona foglia Basso CO2
SOUTHAMERICA-WEST1 Santiago
Europa
EUROPE-CENTRAL2 Varsavia
EUROPE-NORTH1 Finlandia icona foglia Basso CO2
EUROPE-SOUTHWEST1 Madrid icona foglia Basso CO2
EUROPE-WEST1 Belgio icona foglia Basso CO2
EUROPE-WEST2 Londra
EUROPE-WEST3 Francoforte
EUROPE-WEST4 Paesi Bassi
EUROPE-WEST6 Zurigo icona foglia Basso CO2
EUROPE-WEST8 Milano
EUROPE-WEST9 Parigi icona foglia Basso CO2
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 Giacarta
Australia
AUSTRALIA-SOUTHEAST1 Sydney
AUSTRALIA-SOUTHEAST2 Melbourne

Trovo anche sciocco dover impostare queste opzioni nelle Impostazioni dei file. Non ho usato S3 per caricare file, lo uso solo per il backup. È necessario avere un bucket diverso per i caricamenti e i backup, ma c’è solo un posto dove impostare la regione, ovvero nelle Impostazioni dei file.

Spero che questo faccia risparmiare tempo a qualcun altro per capirlo.

PS: L’ho debuggato usando https://discourse.example.com/logs/

Impossibile elencare i backup da S3: il vincolo di posizione specificato non è valido. –\u003e Problema di regione

Impossibile elencare i backup da S3: accesso negato. –\u003e Proprietario legacy dell’oggetto di archiviazione invece di proprietario legacy del bucket di archiviazione

1 Mi Piace

Se si configura utilizzando le variabili d’ambiente come descritto nell’OP, e si imposta DISCOURSE_S3_ENDPOINT come consigliato, DISCOURSE_S3_REGION viene ignorato, rendendo questo un problema non rilevante.

2 Mi Piace

Grazie,
Il fatto è che uso l’installazione “one-click” della VM Bitnami dal Google Cloud Marketplace.
È probabilmente possibile personalizzare le variabili d’ambiente ma non è semplice.
Impostare l’endpoint nell’interfaccia utente non ignora la regione.

Grazie comunque

Grazie mille!
In effetti, ho dimenticato di aggiungere lo snippet.

Sfortunatamente, ricevo il seguente errore:

Aws::S3::Errors::InvalidArgument: Argomento non valido.

Questo è molto coerente con l’errore che ho ricevuto mentre usavo l’interfaccia Web, ma non c’è molto su cui lavorare per risolvere il problema…

Ho trovato questa discussione che suggerisce che potrebbe esserci un’incompatibilità con Google Storage rispetto ad Amazon S3.

Potrebbe essere rotto per Google Storage?

Stack completo durante l’esecuzione manuale del task:

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: Argomento non valido.
/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: Non sto considerando di cambiare bucket, ma mi chiedo cosa succederebbe alle immagini precedentemente caricate sul disco della VM

EDIT (RISOLTO):
@gerhard @Falco
Ho scoperto qual era il problema abilitando il http_wire_trace.
La risposta di argomento non valido da googleapis lo spiega:
Impossibile inserire ACL legacy per un oggetto quando è abilitato l’accesso a livello di bucket uniforme. Leggi di più su Uniform bucket-level access  |  Cloud Storage  |  Google Cloud

Ho abilitato l’ACL granulare sul bucket invece dell’ACL uniforme perché l’header impostato durante il caricamento specifica che è pubblico. (Avevo un ACL uniforme e ho impostato l’intero bucket su pubblico)

Non ho il diritto di aggiornare l’OP, ma penso che dovrebbe menzionare che affinché i bucket Google funzionino, l’account di servizio necessita del ruolo Storage Legacy Bucket Owner sul bucket di backup e il bucket di caricamento deve utilizzare l’ACL granulare.

Spero che questo faccia risparmiare tempo alla community.
Grazie ancora a @Falco @pfaffman @gerhard @tuanpembual per l’aiuto qui.

2 Mi Piace