Applicazione web senza server e gestione eventi per il recupero dei dati e l'analytics
Questa esercitazione può comportare degli addebiti. Utilizza lo stimatore costi per generare una stima dei costi basata sul tuo utilizzo previsto.
In questa esercitazione, creerai un'applicazione per raccogliere automaticamente le statistiche del traffico GitHub per i repository e fornire la base per l'analisi del traffico. GitHub fornisce solo l'accesso ai dati del traffico per gli ultimi 14 giorni. Se vuoi analizzare le statistiche per un periodo di tempo più lungo, devi scaricare e archiviare tu stesso tali dati. In questa esercitazione, distribuisci un'applicazione senza server in un progetto IBM Cloud Code Engine. L'applicazione gestisce i metadati per i repository GitHub e fornisce accesso alle statistiche per l'analisi dei dati. I dati sul traffico vengono raccolti da GitHub su richiesta nell'applicazione o quando attivati dagli eventi Code Engine, ad esempio, quotidianamente. L'applicazione discussa in questa esercitazione implementa una soluzione pronta per più tenant con la serie iniziale di funzionalità che supporta una modalità a singolo tenant.
Obiettivi
- Distribuzione di un'applicazione di database Python containerizzata con supporto multi-tenant e accesso protetto
- Integrare l'ID applicazione come provider di autenticazione basato su OpenID Connect
- Configurare la raccolta senza server automatizzata delle statistiche del traffico GitHub
Prima di iniziare
Questa esercitazione richiede:
- la CLI IBM Cloud,
- Plugin IBM Cloud Code Engine,
- Plugin IBM Cloud® Container Registry,
- un account GitHub.
Puoi eseguire le sezioni che richiedono una shell in IBM® Cloud Shell.
Troverai le istruzioni per scaricare e installare questi strumenti per il tuo ambiente operativo nella guida Introduzione alle esercitazioni.
Configurazione del servizio e dell'ambiente (shell)
In questa sezione, configurerai i servizi necessari e preparerai l'ambiente. Tutto questo può essere fatto dall'ambiente shell (terminale).
-
Se non si è connessi, utilizzare
ibmcloud loginoibmcloud login --ssoper accedere in modo interattivo. -
Eseguire il gruppo di risorse e la regione eseguendo il comando
ibmcloud target.RESOURCE_GROUP_NAME=Default REGION=us-south ibmcloud target -r $REGION -g $RESOURCE_GROUP_NAME -
Creare un'istanza IBM Db2 SaaS con il piano gratuito (lite) e chiamarla ghstatsDB.
ibmcloud resource service-instance-create ghstatsDB dashdb-for-transactions free $REGION -
Crea un'istanza del servizio App ID. Utilizza ghstatsAppID come nome e il piano di livello graduale (Graduated tier).
ibmcloud resource service-instance-create ghstatsAppID appid graduated-tier $REGION -
Aggiungi un nuovo spazio dei nomi ghstats a IBM Cloud® Container Registry. Verrà utilizzato per fare riferimento alle immagini del contenitore. Esiste un registro globale e un registro regionale. Utilizzare il registro globale.
ibmcloud cr region-set global NAMESPACE=ghstatsYourInitials ibmcloud cr namespace-add $NAMESPACE
Preparazione (shell) di Code Engine
Con i servizi di cui è stato eseguito il provisioning e la configurazione generale, il prossimo passo è creare il progetto Code Engine, creare un'immagine contenitore per l'applicazione e distribuirla.
- Crea un progetto Code Engine denominato ghstats. Il comando lo imposta automaticamente come contesto Code Engine corrente.
ibmcloud ce project create --name ghstats - Crea una configurazione di build Code Engine, ad esempio, imposta il progetto per creare l'immagine del contenitore per te. Prende il codice dal repository GitHub per questa esercitazione e memorizza l'immagine nel registro nello spazio dei nomi precedentemente creato utilizzando le informazioni dell'utente registrato.
ibmcloud ce build create --name ghstats-build --source https://github.com/IBM-Cloud/github-traffic-stats --context-dir /backend --commit master --image private.icr.io/$NAMESPACE/codeengine-ghstats - Nota che il comando build create ha avuto l'effetto collaterale di creare un segreto di accesso al registro che consentirà al progetto di scrivere e leggere IBM Cloud® Container Registry.
ibmcloud ce registry list - Successivamente, eseguire il processo di build effettivo.
L'output indica ulteriori comandi da eseguire per seguire i log di stato della build man mano che procede. Qualcosa come:ibmcloud ce buildrun submit --build ghstats-buildibmcloud ce buildrun logs -f -n ghstats-build-run-123456-123456789
Distribuisci l'app (shell)
Una volta che la build è pronta, puoi utilizzare l'immagine del contenitore per distribuire l'applicazione, quindi eseguire il bind dei servizi di cui è stato precedentemente eseguito il provisioning.
-
Distribuire l'applicazione significa creare un'applicazione Code Engine denominata ghstats - app. Estrae l'immagine dal registro e dallo spazio dei nomi forniti.
ibmcloud ce app create --name ghstats-app --image private.icr.io/$NAMESPACE/codeengine-ghstats:latest --registry-secret ce-auto-icr-private-globalUna volta distribuita l'applicazione, si può verificare che sia disponibile all' URL mostrato nell'output. L'app non è configurata e quindi non è ancora utilizzabile. È possibile controllare lo stato di distribuzione utilizzando
ibmcloud ce app listo per i dettagli eseguendoibmcloud ce app get --name ghstats-app.Per impostazione predefinita, la scala minima è zero (0). Significa che Code Engine riduce le istanze in esecuzione a zero se non c'è alcun carico di lavoro sull'applicazione. In questo modo si risparmiano i costi, ma è necessario un breve riavvio dell'applicazione quando si esegue nuovamente l'aumento da zero. Puoi evitarlo utilizzando il parametro
--min 1durante la creazione o l'aggiornamento dell'applicazione. -
Per utilizzare i servizi di cui è stato eseguito il provisioning, devi associarli all'applicazione. Innanzitutto, esegui il bind di IBM Db2 SaaS, quindi di App ID:
ibmcloud ce application bind --name ghstats-app --service-instance ghstatsDBibmcloud ce application bind --name ghstats-app --service-instance ghstatsAppIDOgni
application bindcrea le risorse e le relazioni di raggruppamento:- Un ID del servizioIAM Service.
- Una chiave API IAM viene creata nell'ID del IAM Service.
- Una chiave di servizio della risorsa. Queste sono denominate (Credenziali del servizio nella console IBM Cloud. Prova il seguente comando per visualizzare la voce App ID:
ibmcloud resource service-keys --instance-name ghstatsAppIDInvece di eseguire il bind dei servizi all'applicazione, puoi anche utilizzare i segreti o le mappe di configurazione. Possono essere popolati da valori memorizzati nei file o passati come valori letterali. Un file di esempio per i segreti e le relative istruzioni si trova in Repository GitHub per questa esercitazione.
Configurazione dell'ID applicazione e GitHub (browser)
I passi riportati di seguito sono tutti eseguiti utilizzando il tuo browser Internet. Innanzitutto, si configura App ID per utilizzare la Cloud Directory e lavorare con l'applicazione. Dopodiché, crea un token di accesso GitHub. È necessario all'applicazione per recuperare i dati sul traffico.
-
Nell'elenco delle risorse IBM Cloud® apri la panoramica dei tuoi servizi. Individua l'istanza del servizio App ID nella sezione Services. Fai clic sulla sua voce per aprire i dettagli.
-
Nel dashboard del servizio, fai clic su Manage Authentication nel menu a sinistra. Visualizza un elenco dei provider di identità disponibili, ad esempio Facebook, Google, SAML 2.0 Federation e Cloud Directory. Passa Cloud Directory a Enabled, tutti gli altri provider a Disabled.
Potresti voler configurare Multi-Factor Authentication (MFA) e le regole password avanzate. Questi argomenti non vengono trattati in questa esercitazione.
-
Nella stessa finestra di dialogo, fai clic sulla scheda Authentication Settings. In Aggiungi URL di reindirizzamento web inserire l'url dell'applicazione +
/redirect_uri, ad esempiohttps://ghstats-app.56ab78cd90ef.us-south.codeengine.appdomain.cloud/redirect_uri.Per testare l'applicazione in locale, l' URL di reindirizzamento è
http://127.0.0.1:5000/redirect_uri. Puoi configurare più URL di reindirizzamento. Per testare l'applicazione in locale, copiare . env.local.template in .env, adattarlo e avviare l'applicazione conpython3 ghstats.py. -
Nel menu sulla sinistra, espandi Cloud Directory e fai clic su Users. Apre un elenco degli utenti in Cloud Directory. Fai clic sul pulsante Create User per aggiungere te stesso come primo utente. Ora hai terminato la configurazione del servizio App ID.
-
Nel browser, visitate Github.com e andate su Impostazioni -> Impostazioni sviluppatore -> Token di accesso personali. Fare clic sul pulsante Genera nuovo token (classico). Immettere Esercitazione GHStats per la Nota. Dopodiché, abilita public_repo nella categoria repo e read:org in admin:org. Ora, alla fine di tale pagina, fai clic su Generate token. Il nuovo token di accesso viene visualizzato nella pagina successiva. È necessario durante la seguente configurazione dell'applicazione.
GitHub Token di accesso
Configura e verifica l'applicazione Python
Dopo la preparazione, configura e verifica l'applicazione. L'applicazione è scritta in Python utilizzando il popolare microframework Flask. È possibile aggiungere repository per la raccolta di statistiche o rimuoverli. È possibile accedere ai dati sul traffico in una vista tabulare o come grafico a linee.
-
In un browser, apri l'URI dell'applicazione distribuita. Dovrebbe apparire una pagina di benvenuto.
Schermo di benvenuto -
Nel browser, aggiungi
/admin/initialize-appall'URI e accedi alla pagina. Viene utilizzato per inizializzare l'applicazione e i suoi dati. Fai clic sul pulsante Start initialization. Questa operazione ti porterà a una pagina di configurazione protetta da password. L'indirizzo email che hai utilizzato per l'accesso viene acquisito come identificazione per l'amministratore di sistema. Utilizza l'indirizzo email e la password che hai configurato in precedenza. -
Nella pagina di configurazione, immetti un nome (viene utilizzato per il messaggio iniziale), il tuo nome utente GitHub e il token di accesso che hai generato prima. Fai clic su Initialize. Ciò crea le tabelle database e inserisce alcuni valori di configurazione. Infine, crea i record del database per l'amministratore di sistema e per un tenant.
Primo passo -
Una volta terminato, vieni portato all'elenco dei repository gestiti. Ora puoi aggiungere i repository fornendo il nome dell'account GitHub o dell'organizzazione e il nome del repository. Dopo aver immesso i dati, fai clic su Add repository. Il repository, insieme a un identificativo di nuova assegnazione, deve comparire nella tabella. È possibile rimuovere i repository dal sistema inserendo il loro ID e facendo clic su Elimina repository.
Elenco di repository -
Per il test, fare clic su Amministrazione, quindi su Raccogli statistiche. Richiama i dati sul traffico su richiesta. Successivamente, fare clic su Repository e Traffico giornaliero. Dovrebbe visualizzare i dati raccolti.
Dati sul traffico
Imposta richiamo dati giornaliero (shell)
Con l'applicazione in posizione e configurata, l'ultima parte è avviare il richiamo giornaliero dei dati del traffico GitHub. Stai per creare una sottoscrizione cron. In modo simile a un lavoro cron, l'applicazione sottoscrive gli eventi sulla pianificazione specificata (evento).
-
Creare la sottoscrizione cron ghstats-daily con una pianificazione giornaliera alle 6 del mattino UTC con un evento POST al percorso /collectStats. Sostituisci SECRET_TOKEN_AS_IDENTIFIER con il tuo valore segreto scelto. Viene utilizzato per identificare il donatore di eventi per l'app.
ibmcloud ce subscription cron create --name ghstats-daily --destination ghstats-app --path /collectStats --schedule '0 6 * * *' --data '{"token":"SECRET_TOKEN_AS_IDENTIFIER"}' --content-type application/json -
Per rendere noto il token segreto all'applicazione, aggiorna l'applicazione. Sostituisci SECRET_TOKEN_AS_IDENTIFIER con il valore selezionato al passo precedente.
ibmcloud ce app update --name ghstats-app --registry-secret usicr --env EVENT_TOKEN=SECRET_TOKEN_AS_IDENTIFIERQuesto crea una nuova revisione dell'app. È possibile controllare che gli eventi siano stati ricevuti ed elaborati dall'app durante la navigazione nell'app in Amministrazione, quindi in Log di sistema.
Il comando precedente crea una pianificazione per le 6 am UTC al giorno. Per controllare direttamente che l'evento funzioni, scegli un'ora pochi minuti dopo l'ora corrente, convertita in UTC.
Conclusioni
In questa esercitazione, hai distribuito un'applicazione senza server in IBM Cloud Code Engine. L'origine dell'applicazione viene presa da un repository GitHub. Hai istruito Code Engine per creare l'immagine del contenitore e memorizzarla in IBM Cloud® Container Registry. Successivamente, è stato estratto da lì e distribuito come contenitore. L'applicazione è associata ai servizi IBM Cloud.
L'applicazione e la gestione eventi associata consentono di recuperare automaticamente i dati sul traffico per i repository GitHub. Le informazioni su tali repository, incluso il token di accesso specifico del tenant, vengono archiviate in un database SQL (IBM Db2 Warehouse SaaS). Tale database viene utilizzato dall'applicazione Python per gestire utenti, repository e per presentare le statistiche del traffico. Gli utenti possono vedere le statistiche sul traffico in tabelle consultabili o visualizzate in un semplice grafico a linee (vedi immagine sotto). È anche possibile scaricare l'elenco dei repository e i dati del traffico come file CSV.
Sicurezza: ruota le credenziali del servizio
Se utilizzi questa soluzione in produzione, devi ruotare periodicamente le credenziali del servizio. Molte politiche di sicurezza richiedono di modificare le password e le credenziali ogni 90 giorni o con una frequenza simile.
È possibile ricreare e quindi ruotare le credenziali per i servizi legati all'applicazione, disabbinando e poi rilegando i servizi. Quando utilizzi i segreti invece dei bind del servizio, hai anche più opzioni ricreando prima le chiavi del servizio, quindi aggiornando i segreti e come ultimo passo aggiornando l'app.
Rimuovi le risorse
Per ripulire le risorse utilizzate per questa esercitazione, è possibile eliminare i relativi progetti e servizi.
- Annulla il bind dei servizi forniti. Prima visualizzare i bind, quindi eliminarli in base ai Nomi dei bind del servizio (FIRST e SECOND riportati di seguito provengono dall'output di get)
ibmcloud ce application get --name ghstats-appibmcloud ce application unbind --name ghstats-app --binding ghstats-app-ce-service-binding-FIRSTibmcloud ce application unbind --name ghstats-app --binding ghstats-app-ce-service-binding-SECOND - Eliminare il progetto e i suoi componenti.
ibmcloud ce project delete --name ghstats --hard -f - Eliminare i servizi:
ibmcloud resource service-instance-delete -f ghstatsDBibmcloud resource service-instance-delete -f ghstatsAppID - Eliminare lo spazio dei nomi Container Registry
ibmcloud cr namespace-rm $NAMESPACE -f - Eliminare Token Github.com
A seconda della risorsa potrebbe non essere eliminata immediatamente, ma conservata (per impostazione predefinita per 7 giorni). È possibile recuperare la risorsa eliminandola in modo permanente o ripristinarla entro il periodo di conservazione. Consultare questo documento su come utilizzare il recupero delle risorse.
Espandi l'esercitazione
Vuoi aggiungere qualcosa o modificare questa esercitazione? Ecco alcune idee:
- Espandi l'applicazione per il supporto a più tenant.
- Utilizza i provider di identità social.
- Aggiungi un selettore di data alla pagina delle statistiche per filtrare i dati visualizzati.
- Utilizza una pagina di accesso personalizzata per App ID.
Contenuto correlato
Ecco i link a informazioni aggiuntive sugli argomenti trattati in questa esercitazione. L'applicazione stessa è disponibile in questo repositoryGitHub.
Documentazione: