Serverunabhängige Instanzen erstellen und Anwendungen über die Befehlszeilenschnittstelle übergeben

Hier erfahren Sie, wie Sie die Befehlszeilenschnittstelle (Command-Line Interface, CLI) von IBM Analytics Engine verwenden, um die Services zu erstellen, die Sie zum Erstellen und Verwalten einer serverunabhängigen Instanz sowie zum Übergeben und Überwachen Ihrer Spark-Anwendungen benötigen.

Wählen Sie zum Erstellen eine serverunabhängige Instanz den Plan 'IBM Analytics Engine Standard Serverless' aus. Wenn eine serverunabhängige Instanz bereitgestellt wird, wird ein Apache Spark-Cluster erstellt, den Sie mit Bibliothekspaketen Ihrer Wahl anpassen können und in dem Sie Ihre Spark-Anwendungen ausführen.

Ziele

Sie erfahren, wie Sie die folgenden Services und Komponenten installieren und konfigurieren, die Sie für die Verwendung der Befehlszeilenschnittstelle benötigen:

  • Eine IBM Cloud Object Storage-Instanz, in der die IBM Analytics Engine-Instanz angepasste Anwendungsbibliotheken und Spark-Protokollereignisse speichert.
  • Ein Object Storage-Bucket für Anwendungsdateien und Datendateien.
  • Eine serverunabhängige IBM Analytics Engine-Instanz. Dieser Instanz werden bei Bedarf Rechen- und Speicherressourcen zugeordnet, wenn Spark-Workloads bereitgestellt werden. Wenn sich eine Anwendung nicht im aktiven Status befindet, werden der Instanz keine Rechenressourcen zugeordnet. Der Preis basiert auf der tatsächlichen Nutzung der von der Instanz verbrauchten Ressourcen, die pro Sekunde in Rechnung gestellt wird.
  • Der Protokollierungsservice unterstützt Sie bei der Behebung von Problemen, die in der IBM Analytics Engine-Instanz und in der übergebenen Anwendung auftreten können, sowie beim Anzeigen der von Ihrer Anwendung generierten Ausgabe. Wenn Sie Anwendungen mit aktivierter Protokollierung ausführen, werden Protokolle an einen IBM Log Analysis-Service weitergeleitet, in dem sie indexiert werden. Dies ermöglicht die Volltextsuche in allen generierten Nachrichten und eine komfortable Abfrage auf der Basis bestimmter Felder.

Vorbereitende Schritte

Für die Verwendung der Analytics Engine V3-CLI ist Folgendes erforderlich:

  • Ein IBM Cloud®-Konto.
  • Gehen Sie wie folgt vor, um die IBM Cloud-CLI zu installieren Anweisungen zum Herunterladen und Installieren der Befehlszeilenschnittstelle finden Sie unter Getting started with the IBM Cloud CLI.

Jetzt können Sie mit der Verwendung der Analytics Engine V3-CLI beginnen. Befolgen Sie die Anweisungen in den Schritten 1 und 2, um die erforderlichen Services zu installieren, bevor Sie mit Schritt 3 zum Hochladen und Übergeben von Spark-Anwendungen beginnen. Schritt 4 zeigt Ihnen, wie Sie eine Protokollierungsinstanz erstellen und die Protokollierung aktivieren. In Schritt 5 wird gezeigt, wie Sie eine Analytics Engine-Instanz löschen. Dieser Schritt ist optional.

Cloud Object Storage-Instanz erstellen und Berechtigungsnachweise abrufen

Erstellen Sie eine IBM Cloud Object Storage-Instanz und rufen Sie die Cloud Object Storage-Berechtigungsnachweise (Serviceschlüssel) über die serverunabhängige Analytics Engine-CLI ab.

Die von Ihnen erstellte Cloud Object Storage-Instanz ist für die IBM Analytics Engine-Instanz als Instanzausgangsverzeichnis-Speicher für Spark-Protokollereignisse und alle angepassten Bibliotheken oder Pakete erforderlich, die Sie in Ihren Anwendungen verwenden möchten. Weitere Informationen finden Sie unter Instance home.

Weitere Informationen zum Erstellen einer Bibliotheksgruppe mit angepassten Paketen, die in Cloud Object Storage gespeichert sind und von Ihrer Anwendung referenziert werden, finden Sie unter Bibliotheksgruppe verwenden.

  1. Melden Sie sich mit Ihrem IBM Cloud®-Konto bei IBM Cloud® an.

    Aktion :Eingabe:

        ibmcloud api <URL>
        ibmcloud login
    

    Beispiel :Eingabe:

        ibmcloud api https://cloud.ibm.com
        ibmcloud login
    
  2. Wählen Sie die Ressourcengruppe aus. Rufen Sie die Liste der Ressourcengruppen für Ihr Konto ab und wählen Sie eine Gruppe aus, in der die serverunabhängige IBM Analytics Engine-Instanz erstellt werden soll:

    Aktion :Eingabe:

        ibmcloud target -g RESOURCE_GROUP_NAME
    

    Parameterwerte:

    • RESOURCE_GROUP_NAME: Der Name der Ressourcengruppe, in der sich die serverunabhängige Instanz befinden soll

    Beispiel :Eingabe:

        ibmcloud resource groups
        ibmcloud target -g default
    
  3. Installieren Sie den IBM Cloud Object Storage-Service und anschließend die Analytics Engine V3-CLI:

    Aktion :Eingabe:

        ibmcloud plugin install cloud-object-storage
    

    Aktion :Eingabe:

        ibmcloud plugin install analytics-engine-v3
    
  4. Erstellen Sie eine Cloud Object Storage-Instanz:

    Aktion :Eingabe:

        ibmcloud resource service-instance-create INSTANCE_NAME cloud-object-storage PLAN global
    

    Parameterwerte:

    • INSTANCE_NAME: Ein beliebiger Name Ihrer Wahl
    • PLAN: Der Cloud Object Storage-Plan, der beim Erstellen der Instanz verwendet werden soll

    Beispiel :Eingabe:

        ibmcloud resource service-instance-create test-cos-object cloud-object-storage standard global
    
    Antwort
    Das Beispiel gibt Folgendes zurück:
        Service instance test-cos-object was created.
        Name:             test-cos-object
        ID:               crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309::
        GUID:             ebad3176-8a1a-41f2-a803-217621bf6309
        Location:         global
        State:            active
        Type:             service_instance
        Sub Type:
        Allow Cleanup:    false
        Locked:           false
        Created at:       2021-12-27T07:57:56Z
        Updated at:       2021-12-27T07:57:58Z
        Last Operation:
                         Status    create succeeded
                         Message   Completed create instance operation
    
  5. Konfigurieren Sie den CRN, indem Sie den Wert der ID aus der Antwort des Cloud Object Storage-Erstellungsaufrufs im vorherigen Schritt kopieren:

    Aktion :Eingabe:

        ibmcloud cos config crn
        Resource Instance ID CRN: ID
    

    Parameterwerte:

    • ID: Der Wert für ID aus der Antwort des Cloud Object Storage-Erstellungsaufrufs

    Beispiel :Eingabe:

        ibmcloud cos config crn
        Resource Instance ID CRN: crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309::
    
  6. Erstellen Sie ein Cloud Object Storage-Bucket:

    Aktion :Eingabe:

        ibmcloud cos bucket-create --bucket BUCKET_NAME [--class CLASS_NAME] [--ibm-service-instance-id ID] [--region REGION] [--output FORMAT]
    

    Parameterwerte:

    • BUCKET_NAME: Ein beliebiger Name Ihrer Wahl
    • ID: Der Wert für GUID aus der Antwort des Cloud Object Storage-Erstellungsaufrufs
    • REGION: Die IBM Cloud-Region, in der die Cloud Object Storage-Instanz erstellt wurde
    • FORMAT: Das Ausgabeformat kann JSON oder Text sein.

    Beispiel :Eingabe:

        ibmcloud cos bucket-create --bucket test-cos-storage-bucket --region us-south --ibm-service-instance-id ebad3176-8a1a-41f2-a803-217621bf6309 --output json
    
  7. Erstellen Sie Cloud Object Storage-Serviceschlüssel:

    Aktion :Eingabe:

        ibmcloud resource service-key-create NAME [ROLE_NAME] ( --instance-id SERVICE_INSTANCE_ID | --instance-name SERVICE_INSTANCE_NAME | --alias-id SERVICE_ALIAS_ID | --alias-name SERVICE_ALIAS_NAME) [--service-id SERVICE_ID] [-p, --parameters @JSON_FILE|JSON_TEXT] [-g RESOURCE_GROUP] [--service-endpoint SERVICE_ENDPOINT_TYPE] [--output FORMAT] [-f, --force] [-q, --quiet]
    
     Parameter values:
     - NAME: Any name of your choice
     - [ROLE_NAME]: This parameter is optional. The access role, for example, `Writer` or `Reader`
     - SERVICE_INSTANCE_ID: The value of GUID from the response the of Cloud Object Storage creation call
     - SERVICE_INSTANCE_NAME: The value of NAME from the response the of Cloud Object Storage creation call
     - JSON_TEXT: The authentication to access Cloud Object Storage. Currently only HMAC keys are supported.
    

    Beispiel :Eingabe:

        ibmcloud resource service-key-create test-service-key-cos-bucket Writer --instance-name test-cos-object --parameters '{"HMAC":true}'
    
    Antwort
    Das Beispiel gibt Folgendes zurück:
    Creating service key of service instance test-cos-object under account Test
    OK
    
    Service key crn:v1:bluemix:public:cloud-object-storage:global:a/183**93b485e:9ee135f9-4667-4797-8478-b20**ce-key:21a310e1-bbd6-**bf1f4 was created.
    Name:          test-service-key-cos-bucket
    ID:            crn:v1:bluemix:public:cloud-object-**
    Created At:    Mon Dec 27 12:52:49 UTC 2021
    State:         active
    Credentials:
        apikey: 3a4Ncm**o-WJGFaEzwfY
        cos_hmac_keys:
           access_key_id: 21a31**f1f4
           secret_access_key: c5a23**b6792d3e0a6c
           endpoints: https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
           iam_apikey_description: Auto-generated for key crn:v1:bluemix:public:cloud-object-storage:global:a/1836f778**c93b485e:9ee**8478-b2019a4b4e20:resource-key:21a3**05a9bf1f4
           iam_apikey_name: test-service-key-cos-bucket
           iam_role_crn: crn:v1:bluemix:public:iam::::serviceRole:Writer
           iam_serviceid_crn: crn:v1:bluemix:public:iam-identity::a/1836f77885e521c5ab2523aac93b485e::serviceid:ServiceId-702ca222-3615-464c-92d3-1849c03170cc
           resource_instance_id: crn:v1:bluemix:public:cloud-object-storage:global:a/1836f7**3b485e:9ee135f9-4667-479**4e20::
    

Serverunabhängige Analytics Engine-Instanz erstellen

Erstellen Sie eine serverunabhängige Analytics Engine-Instanz über die Befehlszeilenschnittstelle.

  1. Erstellen Sie die Analytics Engine-Serviceinstanz:

    Aktion :Eingabe:

        ibmcloud resource service-instance-create INSTANCE_NAME ibmanalyticsengine standard-serverless-spark us-south -p @provision.json
    

    Parameterwerte:

    • INSTANCE_NAME: Ein beliebiger Name Ihrer Wahl
    • @provision.json: Strukturieren Sie die JSON-Datei wie im folgenden Beispiel gezeigt. Verwenden Sie den Zugriffsschlüssel und den geheimen Schlüssel aus der Antwort auf den Aufruf zur Erstellung des Cloud Object Storage-Serviceschlüssels.
    Beispiel für die Datei provision.json
    JSON-Beispieldatei:
        {
           "default_runtime": {
              "spark_version": "3.4" },
              "instance_home": {
                 "region": "us-south",
                 "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud",
                 "hmac_access_key": "<your-hmac-access-key>",
                 "hmac_secret_key": "<your-hmac-secret-key>"}
        }
    

    Beispiel :Eingabe:

        ibmcloud resource service-instance-create test-ae-service ibmanalyticsengine standard-serverless-spark us-south -p @ae_provision.json
    
    Antwort

    Das Beispiel gibt Folgendes zurück: ` text Creating service instance test-ae-service in resource group des Kontos wie folgt als URL: ...

    OK

    Service instance test-ae-service was created. Name: test-ae-service ID: crn:v1:bluemix:public:ibmanalyticsengine:us-south:a/183aac93b485e:181eabe1-709781b:: GUID: 181ea9ee01b Location: us-south State: provisioning Type: service_instance Sub Type: Service Endpoints: public Allow Cleanup: false Locked: false Created at: 2022-01-03T08:40:25Z Updated at: 2022-01-03T08:40:26Z Last Operation: Status create in progress Message Started create instance operation

    
    
  2. Überprüfen Sie den Status des Analytics Engine-Service wie folgt:

    Aktion :Eingabe:

        ibmcloud ae-v3 instance show –id INSTANCE_ID
    

    Parameterwerte:

    • INSTANCE_ID: Der Wert für GUID aus der Antwort auf den Aufruf zur Erstellung der Analytics Engine-Instanz

    Beispiel :Eingabe:

        ibmcloud ae-v3 instance show –id 181ea**9ee01b
    

    Antwort
    Das Beispiel gibt Folgendes zurück:
        {
           "default_runtime": {
              "spark_version": "3.4" },
           "id": "181ea**9ee01b ",
           "instance_home": {
              "bucket": "do-not-delete-ae-bucket-e96**5d-b7**a82",
              "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud",
              "hmac_access_key": "**",
              "hmac_secret_key": "**",
              "provider": "ibm-cos",
              "region": "us-south",
              "type": "objectstore" },
           "state": "active",
           "state_change_time": "**"
        }
    

    Übergeben Sie die Spark-Anwendung nur, wenn der Status des Analytics Engine-Service 'aktiv' ist.

Spark-Anwendung hochladen und übergeben

Laden Sie eine Anwendungsdatei in Cloud Object Storage hoch und übergeben Sie eine Spark-Anwendung.

In diesem Lernprogramm wird dargestellt, wie Sie die Spark-Anwendung zum Cloud Object Storage-Instanzbucket hinzufügen, das von der Analytics Engine-Instanz als Instanzausgangsverzeichnis verwendet wird. Wenn Sie die instanzbezogenen Dateien von den Dateien trennen möchten, die Sie zum Ausführen Ihrer Anwendungen verwenden, wie beispielsweise den Anwendungsdateien selbst, den Datendateien und den Ergebnissen der Analyse, können Sie ein anderes Bucket in derselben Cloud Object Storage-Instanz oder eine andere Cloud Object Storage-Instanz verwenden.

  1. Laden Sie die Spark-Anwendungsdatei hoch:

    Aktion :Eingabe:

        ibmcloud cos upload --bucket BUCKET_NAME --key KEY --file PATH [--concurrency VALUE] [--max-upload-parts PARTS] [--part-size SIZE] [--leave-parts-on-errors] [--cache-control CACHING_DIRECTIVES] [--content-disposition DIRECTIVES] [--content-encoding CONTENT_ENCODING] [--content-language LANGUAGE] [--content-length SIZE] [--content-md5 MD5] [--content-type MIME] [--metadata STRUCTURE] [--region REGION] [--output FORMAT] [--json]
    

    Parameterwerte:

    • BUCKET_NAME: Der Name des Buckets, der bei der Erstellung des Buckets verwendet wurde
    • KEY: Der Name der Anwendungsdatei
    • PATH: Der Dateiname und der Pfad für die Spark-Anwendungsdatei

    Beispiel :Eingabe:

        ibmcloud cos upload --bucket test-cos-storage-bucket --key test-math.py --file test-math.py
    

    Beispiel für eine Anwendungsdatei
    Beispiel für test-math.py:
    from pyspark.sql import SparkSession
    import time
    import random
    import cmath
    
    
    

    def init_spark (): spark = SparkSession.builder.appName("test-math").getOrCreate() sc = spark.sparkContext return spark,sc

    def transformFunc(x): return cmath.sqrt(x) +cmath.log(x)+cmath.log10(x)

    def main(): spark, sc = init_spark () partitions=[10,5] für i im Bereich (0, 2): Daten = Bereich (1.20000000) v0 = sc.parallelize(Daten, [Partitioneni]) v1 = v0.map(transformFunc) print(fv1.count ist {v1.count()}. Erledigt") time.sleep(60)

    wenn Name =='main': main()

    {: codeblock}
    
    
    
  2. Überprüfen Sie den Status des Analytics Engine-Service wie folgt:

    Aktion :Eingabe:

        ibmcloud ae-v3 instance show –id INSTANCE ID
    

    Parameterwerte:

    • INSTANCE_ID: Der Wert für GUID aus der Antwort auf den Aufruf zur Erstellung der Analytics Engine-Instanz

    Beispiel :Eingabe:

        ibmcloud ae-v3 instance show –id 181ea**9ee01b
    

    Antwort
    Das Beispiel gibt Folgendes zurück:
        {
           "default_runtime": {
              "spark_version": "3.4" },
           "id": "181ea**9ee01b ",
           "instance_home": {
              "bucket": "do-not-delete-ae-bucket-e96**5d-b7**a82",
              "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud",
              "hmac_access_key": "**",
              "hmac_secret_key": "**",
              "provider": "ibm-cos",
              "region": "us-south",
              "type": "objectstore" },
           "state": "active",
           "state_change_time": "**"
        }
    

    Übergeben Sie die Spark-Anwendung nur, wenn der Status des Analytics Engine-Service 'aktiv' ist.

  3. Übergeben Sie die Spark-Anwendung:

    Aktion :Eingabe:

        ibmcloud ae-v3 spark-app submit --instance-id INSTANCE_ID -–app APPLICATION_PATH
    

    Parameterwerte:

    • INSTANCE_ID: Der Wert für GUID aus der Antwort auf den Aufruf zur Erstellung der Analytics Engine-Instanz
    • APPLICATION_PATH: Der Dateiname und der Pfad für die Spark-Anwendungsdatei

    Beispiel für IOS und Linux :Eingabe:

        ibmcloud ae-v3 spark-app submit --instance-id 181ea**9ee01b --app "cos://test-cos-storage-bucket.mycos/test-math.py" --conf '{"spark.hadoop.fs.cos.mycos.endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "spark.hadoop.fs.cos.mycos.access.key": "21**bf1f4", "spark.hadoop.fs.cos.mycos.secret.key": "c5a**d3e0a6c"}'
    

    Beispiel für Windows (nicht Powershell) Unter Windows müssen die Anführungszeichen mit Escapezeichen versehen werden. :Eingabe:

        ibmcloud ae-v3 spark-app submit --instance-id myinstanceid --app "cos://matrix.mycos/test-math.py" --conf "{\"spark.hadoop.fs.cos.mycos.endpoint\": \"https://s3.direct.us-south.cloud-object-storage.appdomain.cloud\", \"spark.hadoop.fs.cos.mycos.access.key\": \"mykey\", \"spark.hadoop.fs.cos.mycos.secret.key\": \"mysecret\"}"
    

    Antwort
    Das Beispiel gibt Folgendes zurück:
        id      7f7096d2-5c44-4d9a-ac01-b904c7611b7b
        state   accepted
    
  4. Überprüfen Sie die Details oder den Status der von Ihnen übergebenen Anwendung:

    Aktion :Eingabe:

        ibmcloud ae-v3 spark-app show --instance-id INSTANCE_ID --app-id APPLICATION_ID
    

    Parameterwerte:

    • INSTANCE_ID: Der Wert für GUID aus der Antwort des Analytics Engine-Erstellungsaufrufs
    • APPLICATION_ID: Der Wert für ID aus der Antwort auf den Aufruf 'spark-app submit'

    Beispiel :Eingabe:

        ibmcloud ae-v3 spark-app show --instance-id 181ea**9ee01b --app-id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b
    

    Antwort
    Das Beispiel gibt Folgendes zurück:
        application_details   <Nested Object>
        id                    7f7096d2-5c44-4d9a-ac01-b904c7611b7b
        state                 finished
        start_time            2022-03-01T12:58:54.000Z
        finish_time           2022-03-01T13:09:14.000Z
    

    Die Ausführung der Anwendung kann zwischen 2 und 5 Minuten dauern.

Protokollierungsservice zum Anzeigen von Protokollen erstellen

Sie können die Analytics Engine-CLI verwenden, um die Protokollierung zu aktivieren, die Sie bei der Fehlerbehebung in IBM Analytics Engine unterstützt. Vor dem Aktivieren der Protokollierung müssen Sie eine IBM Log Analysis-Serviceinstanz erstellen, an die die Protokolle weitergeleitet werden.

  1. Erstellen Sie eine Protokollierungsinstanz:

    Aktion :Eingabe:

        ibmcloud resource service-instance-create NAME logdna SERVICE_PLAN_NAME LOCATION
    

    Parameterwerte:

    • NAME: Ein beliebiger Name Ihrer Wahl für die IBM Log Analysis-Serviceinstanz
    • SERVICE_PLAN_NAME: Der Name des Serviceplans. Gültige Werte finden Sie unter Servicepläne.
    • LOCATION: Standorte, an denen Analytics Engine für das Senden von Protokollen an IBM Log Analysis aktiviert ist Informationen zu gültigen Standorten finden Sie unter Serverunabhängige Rechenservices.

    Beispiel :Eingabe:

        ibmcloud resource service-instance-create my-log-instance logdna 7-day us-south
    
     {: codeblock}
    

    Nachdem der Protokollierungsservice erstellt wurde, können Sie sich bei {{site.data.keyword.Bluemix_short}} anmelden, die Instanz des Protokollierungsservice suchen und auf das Überwachungsdashboard klicken. Dort können Sie die Treiber- und Executorprotokolle sowie alle Anwendungsprotokolle für die Spark-Anwendung anzeigen.

    Suchen Sie mithilfe von application_id oder von instance_id.

  2. Plattformprotokollierung aktivieren:

    Zum Anzeigen der {{site.data.keyword.iae_full_notm}} -Plattformprotokolle müssen Sie das Dashboard 'Beobachtbarkeit' in {{site.data.keyword.cloud_notm}} verwenden, um die Plattformprotokollierung zu konfigurieren. Unter Plattformprotokolle über das Dashboard 'Beobachtbarkeit' konfigurieren finden Sie die Schritte, die Sie ausführen müssen, um die Protokollierung über das Dashboard 'Beobachtbarkeit' zu aktivieren.

  3. Aktivieren Sie die Protokollierung für Analytics Engine:

    Aktion :Eingabe:

        ibmcloud analytics-engine-v3 log-config COMMAND [arguments...] [command options]
    

    Parameterwerte:

    • analytics-engine-v3: Verwenden Sie ae-v3, wenn Sie die CLI-Befehle aus v3 verwenden wollen
    • COMMAND: Verwenden Sie den Befehl update, um die Protokollierung zu aktivieren

    Beispiel :Eingabe:

       ibmcloud ae-v3 log-config update --instance-id 181ea**9ee01b --enable --output json
    

Analytics Engine-Instanz löschen

Sie können die Befehlszeilenschnittstelle verwenden, um eine Instanz zu löschen, beispielsweise wenn Sie eine Instanz mit einer völlig anderen Konfiguration benötigen, um größere Workloads zu verarbeiten.

Sie können eine Analytics Engine-Instanz so lange beibehalten, wie Sie möchten, und Ihre Spark-Anwendungen nach Bedarf an dieselbe Instanz übergeben.

Gehen Sie wie folgt vor, wenn Sie eine Analytics Engine-Instanz löschen wollen:

Aktion :Eingabe:

    ibmcloud resource service-instance-delete NAME|ID [-g RESOURCE_GROUP] -f

Parameterwerte:

  • NAME|ID: Der Wert für 'Name' oder 'GUID aus der Antwort auf den Aufruf zur Erstellung der Analytics Engine-Instanz
  • RESOURCE_GROUP: Ein optionaler Parameter. Der Name der Ressourcengruppe, in der sich die serverunabhängige Instanz befindet

Beispiel :Eingabe:

    ibmcloud resource service-instance-delete MyServiceInstance  -g default  -f

Weitere Informationen

Weitere Informationen finden Sie unter IBM Analytics Engine serverless CLI reference.