2014-10-13 17 views
8

Quali sono le best practice per ambienti di produzione e test (staging) in Google App Engine? È una buona idea impostare progetti separati?Best practice per ambienti di produzione e test in Google App Engin

Utilizziamo anche Google Cloud Storage e Cloud SQL. Mi piacerebbe evitare incidenti in cui qualcuno sta erroneamente lavorando in produzione quando ha intenzione di lavorare in prova.

Conserveremo molte cose in GCS. Dalla mia comprensione, gli ambienti GCS sono separati tra i progetti. Questo può essere desiderabile per noi. Ma, se vogliamo copiare il prodotto da testare, è possibile duplicare GCS da un'app all'altra?

In attesa di sentire come fanno gli altri.

+1

Possibile duplicato di [Come configurare un ambiente di gestione temporanea su Google App Engine] (http://stackoverflow.com/questions/3793860/how-to-set-up-a-staging-environment-on-google- app-engine) – andruso

risposta

1

vedo due modi per fare questo, tutto a seconda delle esigenze:

1) Utilizzando le versioni sulla vostra applicazione, un'istanza diversa nel Cloud SQL e diverso nome bucket per GCS è possibile utilizzare lo stesso progetto . Devi solo stare molto attento a stabilire a quale target è indirizzata ciascuna delle tue chiamate e indirizzarle nuovamente quando è attiva.

2) L'utilizzo di un progetto separato è probabilmente l'opzione più sicura, ma in entrambi i casi è necessario utilizzare un nome bucket univoco. I nomi dei bucket devono essere univoci in tutte le istanze GCS.

È abbastanza facile da copiare da un bucket all'altro dopo aver impostato le autorizzazioni. Utilizzando gsutil è possibile copiare dal secchio al secchio.

3

La risposta di Bruyere è tecnicamente corretta, puoi eseguire la versione della tua app o utilizzare progetti separati.

In pratica, ho fatto entrambi e si finisce sempre bisogno di separare i progetti per una tonnellata di buoni motivi:

  • non si potrebbe desiderare le stesse persone di avere i diritti per aggiornare la messa in scena env (tutti gli sviluppatori avrebbero questa capacità per esempio) e l'ambiente di produzione (in genere questo sarebbe limitato al lead tecnologico o al team di QA o al server di integrazione continua)
  • L'isolamento di due versioni del motore di app non è così facile, in particolare quando gestisci lavori cron, email o ricezione XMPP
  • Potresti non volere le stesse persone essere in grado di leggere/scrivere i dati di staging e i dati di produzione
  • Si desidera assicurarsi che l'app prod di App Engine non scriva nel bucket di Archiviazione temporanea di staging. Se fanno parte dello stesso progetto, per impostazione predefinita è possibile

La mia raccomandazione è di archiviare i dati relativi all'ambiente (bucket di cloud storage, url di Cloud SQL ecc.) In un file di configurazione caricato dall'applicazione. Se usi Java, personalmente uso un file di proprietà popolato da Maven basato su due profili (dev e prod, dev come predefinito).

Un altro punto importante è separare gli ambienti dall'inizio. Una volta che hai iniziato a supporre che entrambi gli ambienti vivranno nella stessa applicazione, molto del tuo codice verrà sviluppato sulla base di tale ipotesi e sarà più difficile tornare a due diversi progetti.