IBM Cloud Docs
アプリケーションのデプロイとスケーリング

アプリケーションのデプロイとスケーリング

このチュートリアルでは、Code Engine CLI を使用してアプリケーションをデプロイします。 アプリケーションが使用されていないときは、ゼロにスケーリングされます。

アプリケーション (アプリ) は、HTTP 要求を処理するコードを実行します。 IBM Cloud® Code Engine は、従来型の HTTP 要求に加えて、通信プロトコルとして WebSocket を使用するアプリケーションもサポートします。 アプリの実行中のインスタンスの数は、着信要求および構成設定に基づいて自動的にスケールアップまたはスケールダウンされます (ゼロになります)。 アプリには、1 つ以上のリビジョンが含まれています。 リビジョンとは、アプリの構成プロパティーの変更不可能なバージョンの 1 つを表します。 アプリの構成プロパティーが更新されるたびに、アプリの新規リビジョンが作成されます。

開始前に

すべてのCode Engineユーザーは、従量課金 (PAYG) アカウントを持っている必要があります。 チュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、使用量の見積もりに基づいてコスト見積もりを生成してください。 詳しくは、 Code Engine 価格設定 を参照してください。

イメージ・ファイルの選択

このチュートリアルでは、単純な Hello World プログラムであるサンプル・イメージ icr.io/codeengine/helloを使用します。 このプログラムには環境変数 TARGET が含まれており、Hello ${TARGET} が出力されます。 この環境変数が空の場合は、Hello World が返されます。 この例で使用されるコードについて詳しくは、 helloを参照してください。

独自のコンテナー・イメージを使用する場合は、次のステップのイメージ参照を、使用する Docker リポジトリー、イメージ名、およびバージョンに置き換えることができます。

アプリケーションの作成とデプロイ

  1. ibmcloud ce application create コマンドを使用して、アプリケーションを作成します。 以下の例では、アプリケーションの名前としてmyappを使用し、参照するイメージとしてicr.io/codeengine/helloを指定します。

    ibmcloud ce application create --name myapp --image icr.io/codeengine/hello
    

    出力例

    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
    
  2. ibmcloud ce application get コマンドを実行して、myapp アプリケーションの URL を含む、アプリケーションに関する詳細を表示します。

    ibmcloud ce application get -n myapp
    

    出力例

    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.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
    
  3. 前のステップで説明したように、application get コマンドを実行してアプリケーションの URL を取得します。 直接アプリケーションの URL を取得するには、--output コマンドで application get オプションを使用して、URL 形式を指定できます。 アプリケーションの URL は、ibmcloud ce application list コマンドを実行することによっても取得できます。

    ibmcloud ce application get -n myapp -output url
    

    出力例

    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  4. 上記出力に含まれている URL をコピーし、curl を使用してアプリケーションを呼び出します。

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    

    出力例

    Hello World
    

Code Engine アプリケーションが正常にデプロイされて開始されました。

アプリケーションの更新

  1. ibmcloud ce application updateコマンドを使用してHello Strangerを返す環境変数を追加することにより、新しく作成したアプリケーションを更新します。

    ibmcloud ce application update --name myapp --env TARGET=Stranger
    

    出力例

    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
    
  2. application get コマンドを使用して、最新のリビジョン情報を含む、アプリケーションに関する詳細を表示します。

    ibmcloud ce application get --name myapp
    

    出力例

    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.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         88s
    

    **「Revisions」**セクションの出力から、myapp サービスのアプリケーションの最新リビジョンを確認できます。 また、アプリケーションへのトラフィックの 100% が、アプリの最新リビジョンを実行していることにも注目してください。

  3. アプリケーションを呼び出します。

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    

    出力例

    Hello Stranger
    

このコマンドの出力で、更新されたアプリによって Hello Stranger が返されることを確認できます。

アプリケーションのスケーリング (scale-to-zero と scale-from-zero)

アプリケーションの実行インスタンス数は、着信ワークロードに応じて、自動的にスケール・アップまたはスケール・ダウン (ゼロまで) します。

以下の例は、CLI を使用してアプリケーションをスケーリングする方法を示しています。 --min-scale コマンドまたは --max-scale コマンドで application create オプションおよび application update オプションの値を変更することで、アプリの実行中インスタンスの最大数および最小数を制御することができます。

  1. アプリケーションを呼び出します。

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. application get コマンドを実行して、アプリケーションの状況を表示します。 Running instances の値に注目してください。 この例では、アプリの実行中インスタンスは 1 つです。

    ibmcloud ce application get --name myapp
    

    出力例

    [...]
    
    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.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
    
  3. application get コマンドを再実行し、Running instances の値がゼロにスケーリングされていることを確認します。 --min-scale オプションがデフォルト値の 0 に設定されている場合、アプリケーションの実行終了時に実行中インスタンスの数が自動的にゼロにスケーリングされます。

    ibmcloud ce application get -n 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.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         16m
    

    アプリケーションはゼロにスケールダウンされました。

  4. ゼロからスケーリングするためにアプリケーションを再度呼び出します。

  5. application get コマンドを再実行し、Running instances の値がゼロからスケーリングされ、インスタンスに関する情報が表示されていることを確認します。

    ibmcloud ce application get -n myapp
    

    出力例

    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.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
    

アプリケーションは再びスケール・アップされます。

アプリのスケーリングについて詳しくは、アプリケーション・スケーリングの構成を参照してください。

次のステップ

アプリがデプロイされると、アプリの作成方法や以前の更新方法に関係なく、以下の任意の方法でデプロイされたアプリの更新および参照されるコードの更新を行うことができます。

  • コンテナー・イメージがある場合は、 Open Container Initiative(OCI)標準に従って、イメージへの参照のみを指定する必要があります。これは、アプリのデプロイ時にコンテナー・レジストリーの場所を指します。 パブリック・レジストリー または プライベート・レジストリー 内のイメージを使用してアプリをデプロイできます。

    app create コマンドを使用してアプリを作成し、 --build-source オプションを指定してローカルまたはリポジトリー・ソースからコンテナー・イメージをビルドし、別のコンテナー・イメージを指すようにアプリを変更する場合は、まずアプリからビルドの関連付けを削除する必要があります。 例えば、 ibmcloud ce application update -n APP_NAME --build-clear を実行します。 アプリからビルドの関連付けを削除した後、別のイメージを参照するようにアプリを更新できます。

  • Git リポジトリーにあるソース・コードから開始する場合は、ソースからイメージをビルドし、単一操作でアプリをデプロイする処理を Code Engine に任せることができます。 このシナリオでは、Code Engine はイメージを IBM Cloud® Container Registry にアップロードします。 詳しくは、リポジトリー・ソース・コードからのアプリのデプロイを参照してください。 イメージのビルドをより詳細に制御したい場合は、アプリをデプロイする前に Code Engine を使用してイメージのビルドを選択できます。

  • ローカル・ワークステーションにあるソース・コードから開始する場合は、ソースからのイメージのビルドと単一 CLI コマンドを使用したアプリのデプロイを Code Engine に処理させることができます。 このシナリオでは、Code Engine はイメージを IBM Cloud® Container Registry にアップロードします。 詳しくは、CLI を使用したローカル・ソース・コードからのアプリのデプロイを参照してください。 イメージのビルドをより詳細に制御したい場合は、アプリをデプロイする前に Code Engine を使用してイメージのビルドを選択できます。

    例えば、アプリのソースの開発を進化させながら、ローカル・ソースのビルドを Code Engine に処理させることができます。 その後、イメージが成熟すると、必要な特定のイメージを参照するようにデプロイ済みアプリを更新できます。 必要に応じて、このプロセスを繰り返すことができます。

更新したアプリをデプロイすると、イメージにタグが指定されていない限り、参照されているコンテナー・イメージの最新バージョンがダウンロードされてデプロイされます。 イメージにタグが指定されている場合、タグ付けされたイメージがデプロイメントに使用されます。

コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoをチェックアウトします。