Anwendungen implementieren und skalieren
In diesem Lernprogramm wird eine Anwendung in der Befehlszeilenschnittstelle von Code Engine bereitgestellt. Für die Anwendung wird ein Scale-Down auf null durchgeführt, wenn sie nicht verwendet wird.
Eine Anwendung oder App führt den Code für die Verarbeitung von HTTP-Anforderungen aus. Zusätzlich zu den traditionellen HTTP-Anforderungen unterstützt IBM Cloud® Code Engine auch Anwendungen, die WebSockets als Kommunikationsprotokoll verwenden. Die Anzahl der laufenden Instanzen einer Anwendung wird auf der Grundlage der eingehenden Anfragen und Ihrer Konfigurationseinstellungen automatisch nach oben oder unten (auf Null) skaliert. Eine App enthält eine oder mehrere Revisionen. Eine Revision stellt eine unveränderliche Version der Konfigurationseigenschaften der App dar. Bei jeder Aktualisierung einer Konfigurationseigenschaft der App wird eine neue Revision der App erstellt.
Vorbereitende Schritte
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt und arbeiten Sie damit.
Alle Code Engine-Benutzer müssen über ein nutzungsabhängiges Konto verfügen. Für Tutorien können Kosten anfallen. Verwenden Sie den Cost Estimator, um einen Kostenvoranschlag auf der Grundlage Ihrer voraussichtlichen Nutzung zu erstellen. Weitere Informationen finden Sie unter Preisstruktur fürCode Engine.
Imagedatei auswählen
In diesem Lernprogramm wird das Beispielimage icr.io/codeengine/hello verwendet, bei dem es sich um ein einfaches Hello World-Programm handelt. Das Programm umfasst die Umgebungsvariable TARGET und gibt
Hello ${TARGET} aus. Falls für die Umgebungsvariable kein Wert angegeben wird, wird Hello World zurückgegeben. Weitere Informationen zu dem Code, der für das vorliegende Beispiel verwendet wird, finden Sie unter
hello.
Wenn Sie über ein Container-Image verfügen, das Sie verwenden möchten, können Sie den Verweis auf das Image im nächsten Schritt durch Ihr eigenes Docker-Repository, den eigenen Imagenamen und die eigene Version ersetzen.
Anwendung erstellen und bereitstellen
-
Erstellen Sie Ihre Anwendung mit dem Befehl
ibmcloud ce application create. Verwenden Sie im folgenden Beispielmyappals Namen der Anwendung und geben Sieicr.io/codeengine/helloals Referenzimage an.ibmcloud ce application create --name myapp --image icr.io/codeengine/helloBeispielausgabe
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 -
Führen Sie den Befehl
ibmcloud ce application getaus, um Details zur Anwendung anzuzeigen (inklusive der URL für die Anwendungmyapp).ibmcloud ce application get -n myappBeispielausgabe
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 -
Rufen Sie die URL der Anwendung durch Ausführen des Befehls
application getwie im vorherigen Schritt beschrieben ab. Um die URL der Anwendung direkt abzurufen, können Sie die Option--outputverwenden und das URL-Format für den Befehlapplication getangeben. Die Anwendungs-URL können Sie auch mit dem Befehlibmcloud ce application listabrufen.ibmcloud ce application get -n myapp -output urlBeispielausgabe
https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Kopieren Sie die URL aus der vorherigen Ausgabe und rufen Sie die Anwendung mit
curlauf.curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloudBeispielausgabe
Hello World
Sie haben erfolgreich eine Code Engine-Anwendung bereitgestellt und gestartet.
Anwendung aktualisieren
-
Aktualisieren Sie Ihre neu erstellte Anwendung, indem Sie eine Umgebungsvariable hinzufügen, um
Hello Strangermit dem Befehlibmcloud ce application updatezurückzugeben.ibmcloud ce application update --name myapp --env TARGET=StrangerBeispielausgabe
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 -
Verwenden Sie den Befehl
application get, um die Details der App anzuzeigen, unter anderem die Informationen zur neuesten Revision.ibmcloud ce application get --name myappBeispielausgabe
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 88sIn der Ausgabe im Abschnitt Revisions wird die neueste Anwendungsrevision des Service
myappangezeigt. Beachten Sie auch, dass für 100 % Datenverkehrs zur Anwendung die neueste Revision der App verwendet wird. -
Rufen Sie die Anwendung auf.
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloudBeispielausgabe
Hello Stranger
Aus der Ausgabe dieses Befehls geht hervor, dass von der aktualisierten App jetzt Hello Stranger zurückgegeben wird.
Anwendung skalieren (Scale-down auf null und Scale-up von null)
Die Anzahl der aktiven Instanzen einer Anwendung wird abhängig von der eingehenden Workload automatisch nach oben oder unten (auf null) skaliert.
Am folgenden Beispiel wird veranschaulicht, wie eine Anwendung in der Befehlszeilenschnittstelle skaliert werden kann. Sie können die maximale und minimale Anzahl der aktiven Instanzen der App steuern; ändern Sie hierzu die Werte für die Optionen
--min-scale und --max-scale mit dem Befehl application create oder application update.
-
Rufen Sie die Anwendung auf.
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Führen Sie den Befehl
application getaus, um den Status der Anwendung anzuzeigen. Beachten Sie den Wert für die aktiven Instanzen (Running instances). Im folgenden Beispiel verfügt die App über1aktive Instanz.ibmcloud ce application get --name myappBeispielausgabe
[...] 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 -
Führen Sie den Befehl
application geterneut aus und beachten Sie, dass der Wert fürRunning instancesauf null skaliert wurde. Wenn die Ausführung der Anwendung beendet wird, wird für die Anzahl der aktiven Instanzen automatisch ein Scale-down auf null durchgeführt, sofern für die Option--min-scaleder Wert0festgelegt wurde; dieser Wert ist der Standardwert.ibmcloud ce application get -n myappBeispielausgabe
[...] 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 16mFür die Anwendung wurde ein Scale-down auf null durchgeführt.
-
Rufen Sie die Anwendung erneut auf, um von Null zu skalieren.
-
Führen Sie den Befehl
application geterneut aus und beachten Sie, dass der Wert fürRunning instancesvon Null skaliert wurde und Informationen zu der Instanz angezeigt werden.ibmcloud ce application get -n myappBeispielausgabe
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
Für die Anwendung wird wieder ein Scale-up durchgeführt.
Weitere Informationen zum Skalieren Ihrer App enthält der Abschnitt Anwendungsskalierung konfigurieren.
Nächste Schritte
-
Nachdem Ihre App bereitgestellt wurde, greifen Sie über eine URL auf Ihre App zu.
-
Sie können eine angepasste Domänenzuordnung erstellen und sie Ihrer App zuweisen. Weitere Informationen zum Bereitstellen von Apps in mehreren Regionen mit einem angepassten Domänennamen finden Sie unter Hoch verfügbare Anwendung konfigurieren.
-
Jetzt, wo Ihre Anwendung bereitgestellt ist, sollten Sie in Erwägung ziehen, Ihre Anwendungen ereignisgesteuert zu machen. Mithilfe von Ereignissubskriptionen können Sie Ihre Apps durch regelmäßige Zeitpläne auslösen oder festlegen, dass Ihre App auf Ereignisse wie Dateiuploads oder Kafka-Nachrichten reagiert.
Nachdem Ihre App bereitgestellt wurde, können Sie Ihre bereitgestellte App aktualisieren und den zugehörigen referenzierten Code auf irgendeine der folgenden Arten verwenden, unabhängig davon, wie Sie Ihre App erstellt oder zuvor aktualisiert haben:
-
Wenn Sie über ein Container-Image nach dem Standard der Open Container Initiative(OCI) verfügen, müssen Sie nur einen Verweis auf das Image angeben, der auf den Speicherort Ihrer Container-Registry verweist, wenn Sie Ihre Anwendung bereitstellen. Sie können Ihre App mit einem Image in einer öffentlichen Registry oder privaten Registry bereitstellen.
Wenn Sie Ihre App mit dem Befehl
app createerstellt und die Option--build-sourceangegeben haben, um das Container-Image aus einer lokalen Quelle oder einer Repository-Quelle zu erstellen, und Sie Ihre App so ändern wollen, dass sie auf ein anderes Container-Image verweist, müssen Sie zuerst die Zuordnung des Builds aus Ihrer App entfernen. Führen Sie beispielsweiseibmcloud ce application update -n APP_NAME --build-clearaus. Nachdem Sie die Zuordnung des Builds aus Ihrer App entfernt haben, können Sie die App aktualisieren, sodass sie auf ein anderes Image verweist. -
Wenn Sie mit Quellcode beginnen, der sich in einem Git-Repository befindet, können Sie es Code Engine überlassen, das Image aus Ihrer Quelle zu erstellen und die App mit einer einzigen Operation bereitzustellen. In diesem Szenario lädt Code Engine Ihr Image in IBM Cloud® Container Registry hoch. Weitere Informationen finden Sie unter App aus Repository-Quellcode bereitstellen. Wenn Sie mehr Kontrolle über den Build Ihres Image wünschen, können Sie das Image mit Code Engine erstellen, bevor Sie Ihre App implementieren.
-
Wenn Sie mit Quellcode beginnen, der sich auf einer lokalen Workstation befindet, können Sie es Code Engine überlassen, das Image aus Ihrer Quelle zu erstellen und die App mit einem einzelnen CLI-Befehl bereitzustellen. In diesem Szenario lädt Code Engine Ihr Image in IBM Cloud® Container Registry hoch. Weitere Informationen finden Sie unter App aus lokalem Quellcode über die CLI bereitstellen. Wenn Sie mehr Kontrolle über den Build Ihres Image wünschen, können Sie das Image mit Code Engine erstellen, bevor Sie Ihre App implementieren.
Sie könnten beispielsweise festlegen, dass Code Engine den Build Ihrer lokalen Quelle handhaben soll, während Sie Ihre Quelle für die App weiterentwickeln. Nachdem das Image ausgereift ist, können Sie die bereitgestellte App aktualisieren, um auf das gewünschte Image zu verweisen. Sie können diesen Prozess nach Bedarf wiederholen.
Wenn Sie Ihre aktualisierte App bereitstellen, wird die neueste Version Ihres referenzierten Container-Image heruntergeladen und bereitgestellt, sofern kein Tag für das Image angegeben ist. Wenn ein Tag für das Image angegeben wird, wird das mit Tags versehene Image für die Implementierung verwendet.
Benötigen Sie weitere Codebeispiele? Sehen Sie sich die Beispiele für IBM Cloud Code Engine GitHub repoan.