アプリケーションのデプロイとスケーリング
このチュートリアルでは、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 リポジトリー、イメージ名、およびバージョンに置き換えることができます。
アプリケーションの作成とデプロイ
-
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
-
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
-
前のステップで説明したように、
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
-
上記出力に含まれている URL をコピーし、
curl
を使用してアプリケーションを呼び出します。curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
出力例
Hello World
Code Engine アプリケーションが正常にデプロイされて開始されました。
アプリケーションの更新
-
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
-
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% が、アプリの最新リビジョンを実行していることにも注目してください。 -
アプリケーションを呼び出します。
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
オプションの値を変更することで、アプリの実行中インスタンスの最大数および最小数を制御することができます。
-
アプリケーションを呼び出します。
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
-
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
-
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
アプリケーションはゼロにスケールダウンされました。
-
ゼロからスケーリングするためにアプリケーションを再度呼び出します。
-
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
アプリケーションは再びスケール・アップされます。
アプリのスケーリングについて詳しくは、アプリケーション・スケーリングの構成を参照してください。
次のステップ
-
アプリがデプロイされた後、URL を使用してアプリへのアクセスを実行します。
-
カスタム・ドメイン・マッピング を作成して、それをアプリに割り当てることができます。 カスタム・ドメイン・ネームを使用して複数のリージョンにアプリをデプロイする方法について詳しくは、 高可用性アプリケーションの構成 を参照してください。
-
アプリがデプロイされたので、アプリをイベント・ドリブンにすることを検討してください。 イベント・サブスクリプションを使用することで、 定期的なスケジュール によってアプリをトリガーしたり、 ファイル・アップロード や Kafka メッセージ などのイベントに対応するようにアプリを設定したりできます。
アプリがデプロイされると、アプリの作成方法や以前の更新方法に関係なく、以下の任意の方法でデプロイされたアプリの更新および参照されるコードの更新を行うことができます。
-
コンテナー・イメージがある場合は、 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をチェックアウトします。