Spostamento da un bucket S3 a un altro

Continuando la discussione da Come spostare il mio bucket di upload S3 da un provider a un altro?:

Sto cercando di passare da un bucket GCP a un bucket AWS S3. Il vecchio sistema non utilizza una CDN S3 (chi lo ha configurato, a quanto pare, non sapeva esattamente cosa stesse facendo).

Ho usato s3cmd per sincronizzare il vecchio bucket GCP con un filesystem locale, quindi l’ho usato di nuovo per caricare le risorse sul nuovo bucket S3. Il sistema è ora correttamente configurato con S3 e CDN del sito come descritto in Utilizzo dello storage oggetti per gli upload (S3 e cloni).

L’argomento collegato sopra suggeriva di usare rake posts:remap per aggiornare i post (immagino che dovrei anche ribaking tutti i post? O almeno quelli che corrispondono al vecchio bucket?).

Quando ho eseguito posts:remap, ha rimappato solo un post.

 Upload.order(Arel.sql('RANDOM()')).limit(10).pluck(:id, :url)

mostra che tutti quelli hanno il vecchio bucket… Ah, ecco il problema. Non serve rake posts:remap, ma discourse remap come descritto in Change the domain name or rename your Discourse.

Sì, penso di sì.

Mi occuperò di farlo a breve. @Falco, in linea di massima, si tratta di:

  • creare un nuovo bucket e una CDN per esso, ricostruire il container per utilizzare il nuovo bucket/CDN e assicurarsi che funzioni
  • configurare s3cmd per il vecchio bucket e sincronizzare i dati in locale
  • configurare s3cmd per il nuovo bucket e sincronizzare i dati sul nuovo bucket
  • eseguire discourse remap OLD-BUCKET-DOMAIN-NAME NEW-BUCKET-DOMAIN-NAME
  • ribaking

Sembra corretto?

Se usi la stessa CDN per il vecchio e il nuovo bucket, potresti evitare di dover fare il ribaking, ma ottenere il timing giusto sembra un po’ complicato (non puoi cambiare l’origine della CDN finché i dati non sono nel nuovo bucket, ma dovresti assicurarti in qualche modo che nulla venga caricato sul vecchio bucket durante il processo di sincronizzazione) — forse basta dire che è possibile.

2 Mi Piace

Forse è meglio utilizzare l’AWS CLI ufficiale per una guida?

Usa DbHelper.remap qui.

Non necessario

Usa la stessa CDN e cambia semplicemente l’origine della CDN nel pannello della CDN, oppure usa una nuova CDN e fai il remap con DbHelper.remap. In entrambi i casi non è necessario il rebake.

2 Mi Piace

Ah. OK. Ci guarderò. . . È possibile far funzionare la CLI di AWS con bucket non AWS?

Ehi Rafael. Sto per arrivare alla fine. La mia versione attuale di questa guida punta a aws cli e gsutil per sincronizzare dall’old al locale e dal locale al new (collego semplicemente a questi strumenti e fornisco un comando da riga di comando compilato con i nomi dei bucket in un segnaposto). Poi utilizza DbHelper per aggiornare le tabelle. Per il mio sito di dimensioni moderate, funziona piuttosto velocemente. Ottimo.

L’unico problema che ho ora è che la vecchia configurazione non aveva un s3_cdn_url, quindi quelle immagini sono ancora collegate direttamente al bucket (non al CDN) nei post. Il rebaking non aiuta. I nuovi upload sono correttamente collegati al CDN. Non puoi risolvere impostando DISCOURSE_S3_ENDPOINT: '' perché non ha alcun effetto, quindi dopo aver ripristinato il database ho dovuto cancellare l’impostazione del sito. Non è così grave, ma mi sono voluti diversi rebuild per capirlo.

La vecchia configurazione non aveva definito un S3 CDN. Posso risolvere questo problema rebaking tutti i 1250 post che contengono l’URL/hostname del bucket, ma questo causa il download e l’ottimizzazione di tutte quelle immagini (il vecchio server esegue la versione 2.7.0.beta5, quindi pensavo che avesse già alcune recenti ri-ottimizzazioni?). Questo mette sotto sforzo (carico medio 10-20) il mio povero server da 2GB (con Postgres e Redis su RDS ed Elasticache) per un bel po’ di tempo. Immagino che per questo sito potrei aver bisogno di un EC2 più grande comunque, ma sono ancora un po’ sorpreso che questo rebake metta il server in ginocchio (errori 500 nell’interfaccia utente).

Dovrei invece escogitare un modo per sostituire l’hostname del bucket con l’URL del CDN direttamente nel campo cooked di quei post?

@pfaffman Grazie per avermi indirizzato qui.
Ma il mio problema si è aggravato negli ultimi due passaggi.

Problema attuale: Alcune delle mie immagini mancano e vengono visualizzate piccole icone al loro posto. Se passi il puntatore sopra di esse, mostrano l’indirizzo ‘olds3bucket’. Ma quando ci clicchi sopra, vengono visualizzate correttamente a grandezza naturale e ora il percorso di ‘news3bucket’ viene mostrato nella barra degli indirizzi.

  1. Principalmente mi hai detto di sincronizzare i dati del vecchio bucket sul nuovo, cosa che ho già fatto con successo.
  2. Poi ho compilato le impostazioni del nuovo bucket nell’interfaccia web di Discourse, che sto già utilizzando da un anno.
  3. Ora dici di ‘rimappare’ l’URL del vecchio bucket con quello nuovo. E poi rigenerare. Qui sta il problema. Quando lo faccio (o anche se eseguo solo ‘rigenera’, o anche se seleziono ‘Rigenera HTML’ dal menu delle impostazioni del post, con o senza aver prima eseguito il passaggio di ‘rimappatura’), le mie immagini che venivano visualizzate solo come icone scompaiono completamente. Al loro posto viene mostrata solo una ‘spazio bianco’. Quindi devo immediatamente annullare/ripristinare.

Grazie ancora.
(Ho un sito web molto piccolo e, di conseguenza…).

rclone è un ottimo strumento che può sincronizzare con più backend. Attualmente lo utilizziamo per i backup.

Ciao Jay,

Scusa se riprendo l’argomento, ma hai fatto ulteriori progressi sulla guida? Grazie!