IBM Cloud Docs
Code Engine でのアプリの操作

Code Engine でのアプリの操作

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

開始前に

Code Engineで提供されるセキュリティー機能については、 Code Engine とセキュリティー を参照してください。

Code Engine では、カスタム・リソース定義 (CRD) 方式が提供されています。 詳しくは、 CRD メソッドの提供 を参照してください。

作成する Code Engine ワークロードのタイプがわからない場合があります。 Code Engine の計画を参照してください。

コードを Code Engine アプリケーション・コンポーネントとして実行するにはどうすればよいですか?

コードがソースとしてローカルファイルやGitリポジトリに存在する場合でも、コードがパブリックまたはプライベートレジストリに存在するコンテナイメージの場合でも、Code Engineはコードをアプリとして実行する合理的な方法を提供します。

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

  • 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 は、アプリケーション・リビジョンの存続期間中、このダイジェストを使用します。 元のイメージと同じタグを持つ新しいバージョンのイメージを作成すると、元のイメージはコンテナー・レジストリー内で上書きされ、タグが解除されます。 新しいイメージにはタグが付けられ、この新しいイメージには別のダイジェストがあります。 Code Engine アプリケーションは、この新しいイメージを使用しません。新しいイメージのダイジェストは、アプリケーション・リビジョンによって参照されるイメージのダイジェストとは異なるためです。 Code Engine は、元々参照されていたタグなしイメージがまだ存在している限り、アプリケーション・リビジョンの新規インスタンスを作成できます。 詳しくは、 イメージを Code Engine プルできないのはなぜですか? を参照してください。

アプリケーションのデフォルトのURLは https://<appname>.<uuid>.<region>.codeengine.appdomain.cloud の形式で、appname はアプリの名前、uuid は自動的に生成される一意の識別子、region は Code Engineプロジェクトが存在する地域です。 アプリケーションのURLのUUID部分は、aaaabbbbccc. 自動生成されたアプリケーションのURLは、アプリケーションのプロジェクトのライフサイクルの間、持続します。

地域ごとにアプリケーションにアクセスするためのエンドポイントについて詳しくは、 アプリケーションにアクセスするためのCode Engine エンドポイント を参照してください。

Code Engine内のアプリのポートについて何を知っておく必要がありますか?

デフォルトでは、Code Engine は、アプリが着信接続をポート 8080 で listen することを想定します。 さらに、Code Engineは環境変数'PORT に、アプリケーションがリッスンすると予想されるポート値を設定する。 アプリが「8080 以外のポートをリッスンする必要がある場合は、コンソールからアプリをデプロイして正しいポートを指定するか、「app create コマンドの「--port オプションを使用する。 Code Engine が設定する環境変数について詳しくは、環境変数の自動注入を参照してください。 ポート 80228008801290909091、および 15090 は、 Code Engineによって予約されています。 listen ポートとして公開できるポートは 1 つのみです。

インターネット上のHTTPによるCode Engineへのインバウンド接続は、ポート 80 を使用します。 インターネット上のHTTPSによるCode Engineへのインバウンド接続は、ポート 443 を使用します

ポート・スキャンで表示される開いているポートの数が多い場合は、 ポート・スキャンで予期される数より多くの開いているポートが表示されるのはなぜですか? を参照してください。

HTTP 処理に関する考慮事項

アプリケーション (またはジョブ) を操作する場合は、Code Engineでの基本的な HTTP 処理を認識しておくと役立ちます。

  • HTTP を使用する着信アプリケーション接続の場合、トランスポート層セキュリティー (TLS) の側面は、アプリケーション・コードの外部でCode Engineによって自動的に管理されます。 アプリケーションの HTTP サーバーは、HTTPS 接続ではなく HTTP 接続のみを考慮する必要があります。 In particular, Code Engine uses Cloud Internet Services (CIS) in IBM Cloud, which is based on CloudFlare, as the intrusion prevention system (IPS) for DNS and DDOS protection on layer 4. つまり、IPS で確立された TCP/IP 接続は、Cloudflare によって所有および管理されます。 詳しくは、 Cloudflare の資料を参照してください。

  • Code Engineアプリケーション用にバインドされたインターネット接続は、HTTPS を使用するように自動的にリダイレクトされます。

  • アプリケーションから他の Code Engineアプリケーションへのアウトバウンド接続は、TLS によって自動的に保護されます。Code Engineはこの接続を自動的に管理するため、使用されるプロトコル (または URL) はHTTPであり、HTTPSではありません。

  • アプリケーションからCode Engine以外のアプリケーション (インターネットなど) へのアウトバウンド接続では、アプリケーション・コードまたは URL に指定されているプロトコルに応じて、HTTP または HTTPSを使用します。

  • バッチ・ジョブからのアウトバウンド接続は、ジョブ・コードまたは URL で指定されたHTTPまたはHTTPSプロトコルを使用します。 この動作には、バッチ・ジョブから Code Engineアプリケーションへの接続が含まれます。

Code Engineアプリケーションの可視性のオプション

Code Engineで、リクエストを受け取るために利用可能なエンドポイント、またはシステムドメインマッピングを定義することで、アプリケーションの適切な可視性のレベルを決定することができます。

すべてのアプリケーションは、同じCode Engineプロジェクト内のすべてのコンポーネントから見える内部システム・ドメイン・マッピングを持っていますが、プロジェクトの外部からは見えません。 内部システム・ドメイン・マッピングに加えて、 パブリック ・インターネットまたは IBM Cloud プライベート ・ネットワークのいずれかに対してアプリケーションを可視にすることを選択します。

公開または非公開の可視性のために、アプリケーションはHTTPSエンドポイントで公開される。 使用されるTLS証明書の詳細については、Code EngineプロジェクトのTLS証明 書を参照のこと。

以下の可視性レベルでアプリケーションをデプロイできます:

アプリケーションの可視性
設定 説明
内部(プロジェクト) この設定のアプリは、同じ Code Engine プロジェクト内のコンポーネントから要求を受け取ることができます。 内部(プロジェクト)エンドポイントを設定するということは、アプリが公共のインターネットからアクセスできないことを意味し、ネットワークアクセスは、同じ「Code Engineプロジェクト内で実行されている他の「Code Engineコンポーネントからのみ可能です。 このエンドポイントは常に有効です。
パブリック この設定のアプリは、インターネットおよび Code Engineプロジェクトに公開されます。 パブリック・エンドポイントを設定することは、アプリがパブリック・インターネットまたは Code Engineプロジェクト内のコンポーネントから要求を受信できることを意味します。 この設定がデフォルトです。
プライベート この設定のアプリは、IBM Cloudプライベート・ネットワークとCode Engineプロジェクトに公開されます。 プライベート・エンドポイントを設定すると、アプリは公共のインターネットからアクセスできなくなり、ネットワーク・アクセスは、仮想プライベート・エンドポイント(VPE)または同じプロジェクト内で実行されている「Code Engineコンポーネントを使用して、他の「IBM Cloudサービスからのみ可能になります。

アプリケーションの可視性のエンドポイント設定は、アプリの作成およびデプロイ時または更新時にコンソールからまたは CLI を使用して設定できます。

パブリック・エンドポイントを使用したアプリのデプロイ

アプリをデプロイするとき、デフォルトでは、アプリケーションは公共のインターネットから、または同じCode Engineプロジェクト内のコンポーネントからのリクエストを受け取ることができるようにデプロイされます。 この場合、アプリはパブリック・エンドポイントを使用してデプロイされます。

プライベート・エンドポイントを使用したアプリケーションのデプロイ

プライベート・エンドポイントを使用してデプロイされるように、アプリのエンドポイント可視性を設定できます。 プライベート・エンドポイントを設定すると、アプリは公共のインターネットからアクセスできなくなり、ネットワーク・アクセスは、仮想プライベート・エンドポイント(VPE)の他の「IBM Cloudサービス、または同じプロジェクト(クラスタ・ローカル)で実行されている「Code Engineコンポーネントからのみ可能になります。

例えば、独自の仮想プライベート・エンドポイント内のIBM Cloud Kubernetes Service Kubernetes クラスターで実行されているコンポーネントでソリューションが構成されており、IBM Cloudプライベート・ネットワークからCode Engineアプリケーションにアクセスする場合は、アプリケーションの可視性をプライベートに設定できます。 アプリの可視性をプライベートに設定すると、アプリは公共のインターネットからアクセスできなくなる。 アプリケーションは、プロジェクト内の他のアプリケーションから引き続きアクセスできます。

プライベート・エンドポイントを使用したアプリケーションのデプロイ を使用して、アプリがIBM Cloudプライベート・ネットワークを介してのみ公開され、外部インターネットには公開されないようにできます。 アプリケーションには、内部ネットワーク内から共有コンポーネントを介して引き続き到達可能なので、アプリケーション・エンドポイントを保護する必要があります。

app createコマンドまたは app updateコマンドの --visibility=privateオプションを使用して、アプリがプライベート・エンドポイントでデプロイされるように、CLI を使ってアプリのエンドポイント可視性を設定します。 app getコマンドを使用して、エンドポイント定義を反映するアプリの使用可能な URL を取得できます。

コンソールから、アプリの作成時に Endpoints 設定を使用して、アプリのエンドポイントの可視性を設定します。 アプリがデプロイされると、アプリケーション・ページの 「ドメイン・マッピング」 タブで、これらのシステム・ドメイン・マッピング設定を表示および変更できます。

プライベート・ネットワークを介した接続について詳しくは、Code Engineでの仮想プライベート・エンドポイントの使用を参照してください。

プロジェクト・エンドポイントを使用したアプリのデプロイ

アプリが内部(プロジェクト)エンドポイントでデプロイされるように、エンドポイントの可視性を設定できます。 プロジェクト専用のエンドポイントを設定すると、アプリは公共のインターネットからアクセスできなくなり、同じ「Code Engineプロジェクト内で実行されている他の「Code Engineコンポーネントからのみネットワークアクセスが可能になります。 このエンドポイントは常に有効です。 アプリケーションは引き続き共有コンポーネントを介してアクセス可能であるため、保護する必要があります。

例えば、ソリューションがプロジェクト内の複数のアプリケーションで構成されている場合、着信トラフィックを処理するために、それらのアプリケーションの 1 つのみがインターネットから可視になるようにソリューションをセットアップできます。 この公開アプリケーションは、ソリューション内の他のアプリケーションに作業を委任できます。これにより、それらのアプリケーションをインターネットから表示する必要がなくなります。

app createコマンドまたは app updateコマンドの --visibility=projectオプションを使用して、プロジェクト・エンドポイントでデプロイされるように、CLI でアプリのエンドポイント可視性を設定します。 app getコマンドを使用して、エンドポイント定義を反映するアプリの使用可能な URL を取得できます。

コンソールから、アプリの作成時に Endpoints 設定を使用して、アプリのエンドポイントの可視性を設定します。 アプリがデプロイされると、アプリケーション・ページの 「ドメイン・マッピング」 タブで、これらのシステム・ドメイン・マッピング設定を表示および変更できます。

Code Engine アプリケーションのデプロイについてのオプション

アプリをデプロイするときに指定できる、オプションについて説明します。 なお、コンソールと CLI でオプションが異なる場合があります。

メモリーと CPU

アプリをデプロイするときに、アプリで消費可能なメモリーと CPU の量を指定できます。 これらの量は、アプリが計算主体型か、メモリー集中型か、平衡型かに応じて異なります。

デフォルトでは、アプリケーションに 4 G のメモリーと 1 つの vCPU が割り当てられます。 メモリーと CPU の選択方法について詳しくは、サポートされるメモリーと CPU の組み合わせを参照してください。

コマンドと引数を使用したアプリケーションのデプロイ

アプリケーションが実行時に使用するコマンドと引数を定義することができます。

app createコマンドに--cmdオプションと--argオプションを追加して、アプリケーションのコマンドと引数を定義します。

ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --cmd /myapp --arg --debug

cmd および arg の使用方法について詳しくは、Code Engine ワークロードのコマンドおよび引数の定義を参照してください。

環境変数を使用したアプリの作成と実行

実行時にアプリケーションで使用できるキーと値のペアを、環境変数として定義および設定できます。

環境変数は、アプリケーションの作成時、または既存のアプリケーションをコンソールや CLI から更新するときに定義できます。

環境変数を定義する方法について詳しくは、環境変数の扱いを参照してください。

Code Engine は、特定の環境変数をアプリに自動的に注入します。 自動注入される環境変数について詳しくは、環境変数の自動注入を参照してください。

シークレットと構成マップを使用している場合のアプリの作成と実行

Code Engine では、環境変数を使用して、アプリケーションでシークレットと構成マップを取り込むことができます。

シークレットと構成マップは、どちらもキーと値のペアです。 環境変数にマップされると、環境変数の名前がマップの各項目の「キー」に対応し、環境変数の値がそのキーの「値」になるように NAME=VALUE の関係が設定されます。

アプリケーションは環境変数を使用して、構成マップ (またはシークレット) 全体を参照したり、構成マップ (またはシークレット) 内の個々のキーを参照したりすることができます。

詳しくは、環境変数を使用したシークレットの参照および環境変数を使用した構成マップの参照を参照してください。

アプリケーション割り当て量に関する考慮事項

アプリケーション、関数、およびバッチ・ジョブを処理する場合、これらのリソースは Code Engine プロジェクトのコンテキスト内で実行されます。 リソース割り当て量はプロジェクトごとに定義され、制限はアプリケーション、機能、およびバッチ・ジョブに適用されます。

Code Engine の制限について詳しくは、Code Engine の制限と割り当て量を参照してください。

次のステップ

Code Engine アプリケーションを操作する際の主要な概念を理解したので、アプリケーションをデプロイして操作する準備はできていますか? 詳細については

アプリでの作業についての詳細は、以下を参照してください