Distribuzione e scalabilità delle applicazioni
Con questa esercitazione, distribuisci un'applicazione con la CLI Code Engine. L'applicazione viene ridotta a zero quando non è in uso.
Un'applicazione, o un'applicazione, esegue il tuo codice per soddisfare le richieste HTTP. In aggiunta alle richieste HTTP tradizionali, IBM Cloud® Code Engine supporta anche le applicazioni che utilizzano WebSockets come protocollo di comunicazione. Il numero di istanze in esecuzione di un'applicazione viene automaticamente ridimensionato (fino a zero) in base alle richieste in entrata e alle tue impostazioni di configurazione. Un'app contiene una o più revisioni. Una revisione rappresenta una versione immutabile delle proprietà di configurazione dell'applicazione. Ogni aggiornamento di una proprietà di configurazione dell'app crea una nuova revisione dell'applicazione.
Prima di iniziare
Tutti gli utenti Code Engine devono avere un account Pagamento a consumo. Le esercitazioni potrebbero comportare dei costi. Utilizzate l'Estimatore di costi per generare una stima dei costi in base all'utilizzo previsto. Per ulteriori informazioni, vedi Prezzi diCode Engine.
Selezionare un file di immagine
Questa esercitazione utilizza un'immagine di esempio, icr.io/codeengine/hello, che è un semplice programma Hello World. Il programma include una variabile di ambiente TARGET e stampa Hello ${TARGET}.
Se la variabile d'ambiente è vuota, viene restituito Hello World. Per ulteriori informazioni sul codice utilizzato per questo esempio, consultare hello.
Se disponi di un'immagine del contenitore che vuoi utilizzare, puoi sostituire il riferimento dell'immagine nel passo successivo con il tuo repository Docker, il nome immagine e la versione.
Creare e distribuire un'applicazione
-
Creare l'applicazione utilizzando il comando
ibmcloud ce application create. Nel seguente esempio, utilizzaremyappcome nome dell'applicazione e specificareicr.io/codeengine/hellocome immagine di riferimento.ibmcloud ce application create --name myapp --image icr.io/codeengine/helloOutput di esempio
Creating application 'myapp'... [...] Run 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Eseguire il comando
ibmcloud ce application getper visualizzare i dettagli sull'applicazione, incluso l' URL per l'applicazionemyapp.ibmcloud ce application get -n myappOutput di esempio
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-1: Age: 3m6s Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 52s Ready true 26s RoutesReady true 26s Events: Type Reason Age Source Messages Normal Created 3m9s service-controller Created Configuration "myapp" Normal Created 3m9s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-huv70-1-deployment-6656cfc796-7gl27 myapp-huv70-1 1/2 Terminating 0 3m9s -
Ottenere l' URL dell'applicazione eseguendo il comando
application getcome descritto nel passo precedente. Per richiamare direttamente l' URL dell'applicazione, è possibile utilizzare l'opzione--outpute specificare il formato URL nel comandoapplication get. Inoltre, puoi eseguire il comandoibmcloud ce application listper ottenere l'applicazione URL.ibmcloud ce application get -n myapp -output urlOutput di esempio
https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Copia l' URL dall'output precedente e richiama l'applicazione con
curl.curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloudOutput di esempio
Hello World
Hai distribuito e avviato correttamente un'applicazione Code Engine !
Aggiornamento della tua applicazione
-
Aggiorna la tua applicazione appena creata aggiungendo una variabile di ambiente per restituire
Hello Strangercon il comandoibmcloud ce application update.ibmcloud ce application update --name myapp --env TARGET=StrangerOutput di esempio
Updating application 'myapp' to latest revision. [...] Run 'ibmcloud ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Utilizza il comando
application getper visualizzare i dettagli della tua applicazione, incluse le informazioni di revisione più recenti.ibmcloud ce application get --name myappOutput di esempio
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 54m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 25s Ready true 11s RoutesReady true 11s Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00001-deployment-bf7559548-mxgvq myapp-00001 2/3 Terminating 0 4m55s myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 88sDall'output nella sezione Revisioni, puoi visualizzare la revisione dell'applicazione più recente del servizio
myapp. Inoltre, si noti che il 100% del traffico all'applicazione sta eseguendo l'ultima revisione dell'applicazione. -
Chiamare l'applicazione.
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloudOutput di esempio
Hello Stranger
Dall'output di questo comando, puoi vedere che l'applicazione aggiornata ora restituisce Hello Stranger.
Scalabilità della tua applicazione (scalabilità a zero e scalabilità a partire da zero)
Il numero di istanze in esecuzione di un'applicazione viene automaticamente aumentato o ridotto (a zero) in base al carico di lavoro in entrata.
Il seguente esempio illustra come ridimensionare la tua applicazione con la CLI. Puoi controllare il numero massimo e minimo di istanze in esecuzione della tua applicazione modificando i valori delle opzioni --min-scale e --max-scale con il comando application create o application update.
-
Chiamare l'applicazione.
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Eseguire il comando
application getper visualizzare lo stato dell'applicazione. Notare il valore perRunning instances. In questo esempio, l'applicazione ha un'istanza in esecuzione1.ibmcloud ce application get --name myappOutput di esempio
[...] Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 58m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 57m Ready true 57m RoutesReady true 57m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m -
Eseguire nuovamente il comando
application gete notare che il valore perRunning instancesè stato scalato a zero. Una volta terminata l'esecuzione dell'applicazione, il numero di istanze in esecuzione viene automaticamente ridimensionato a zero, se l'opzione--min-scaleè impostata su0, che è il valore predefinito.ibmcloud ce application get -n myappOutput di esempio
[...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2 Age: 13m Traffic: 100% Image: icr.io/codeengine/hello (pinned to 548d5c) Running Instances: 0 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 13m Ready true 13m RoutesReady true 13m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16mLa tua applicazione è stata ridotta a zero.
-
Richiamare nuovamente l'applicazione per scalare da zero.
-
Esegui nuovamente il comando
application gete tieni presente che il valore perRunning instancesè scalato da zero e vengono visualizzate informazioni sull'istanza.ibmcloud ce application get -n myappOutput di esempio
Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2: Age: 3h11m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 3h10m Ready true 3h10m RoutesReady true 3h10m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m
La tua applicazione si ridimensiona.
Per ulteriori informazioni sul ridimensionamento della tua applicazione, vedi Configurazione del ridimensionamento dell'applicazione.
Passi successivi
-
Dopo che la tua applicazione viene distribuita, accedi alla tua applicazione tramite un URL.
-
Puoi creare un' associazione dominio personalizzata e assegnarla alla tua applicazione. Per ulteriori informazioni sulla distribuzione delle applicazioni tra più regioni con un nome dominio personalizzato, vedi Configurazione di un'applicazione altamente disponibile.
-
Ora che la tua app è stata distribuita, prendi in considerazione la possibilità di rendere le tue app basate sugli eventi. Utilizzando le sottoscrizioni agli eventi, puoi attivare le tue applicazioni in base alle pianificazioni periodiche o impostare la tua applicazione per reagire agli eventi come i caricamenti di file o i messaggiKafka.
Dopo che la tua applicazione è stata distribuita, puoi aggiornare la tua applicazione distribuita e il suo codice di riferimento utilizzando uno qualsiasi dei seguenti modi, indipendentemente da come hai creato o precedentemente aggiornato la tua applicazione:
-
Se hai un'immagine del contenitore, secondo lo standard OCI(Open Container Initiative), devi fornire solo un riferimento all'immagine, che punta all'ubicazione del tuo registro del contenitore quando distribuisci la tua applicazione. Puoi distribuire la tua applicazione con una immagine in un registro pubblico o in un registro privato.
Se hai creato la tua applicazione utilizzando il comando
app createe hai specificato l'opzione--build-sourceper creare l'immagine del contenitore dall'origine locale o del repository e vuoi modificare la tua applicazione in modo che punti a un'altra immagine del contenitore, devi prima rimuovere l'associazione della build dalla tua applicazione. Ad esempio, eseguireibmcloud ce application update -n APP_NAME --build-clear. Dopo aver rimosso l'associazione della build dalla propria applicazione, è possibile aggiornare l'applicazione in modo che faccia riferimento a una diversa immagine. -
Se stai iniziando con il codice sorgente che risiede in un repository Git, puoi scegliere di lasciare che Code Engine si occupi della creazione dell'immagine dalla tua origine e della distribuzione dell'applicazione con una singola operazione. In questo scenario, Code Engine carica la tua immagine in IBM Cloud® Container Registry. Per ulteriori informazioni, vedi Distribuzione della tua applicazione dal codice sorgente del repository. Se vuoi più controllo sulla build della tua immagine, puoi scegliere di creare l'immagine con Code Engine prima di distribuire la tua applicazione.
-
Se stai iniziando con il codice sorgente che risiede su una workstation locale, puoi scegliere di consentire a Code Engine di creare l'immagine dalla tua origine e distribuire l'applicazione con un singolo comando della CLI. In questo scenario, Code Engine carica la tua immagine in IBM Cloud® Container Registry. Per ulteriori informazioni, vedi Distribuzione della tua applicazione dal codice di origine locale con la CLI. Se vuoi più controllo sulla build della tua immagine, puoi scegliere di creare l'immagine con Code Engine prima di distribuire la tua applicazione.
Ad esempio, potresti scegliere di consentire a Code Engine di gestire la creazione della tua origine locale mentre evolvi lo sviluppo della tua origine per l'applicazione. Quindi, una volta maturata l'immagine, puoi aggiornare l'applicazione distribuita per fare riferimento all'immagine specifica che desideri. È possibile ripetere questo processo in base alle necessità.
Quando distribuisci la tua applicazione aggiornata, viene scaricata e distribuita l'ultima versione della tua immagine del contenitore di riferimento, a meno che non venga specificata una tag per l'immagine. Se viene specificata una tag per l'immagine, l'immagine contrassegnata viene utilizzata per la distribuzione.
Cerchi altri esempi di codice? Controlla gli Esempi per il repository IBM Cloud Code Engine GitHub.