環境変数の制限
Hosted Targets では、Hosted Targets ランタイム環境で設定できる環境変数のサイズと数が制限されます。
- 1,000: 1 つの環境変数の最大長。
- 100: 設定できる環境変数の最大数。
環境変数の設定については、マニフェスト ファイルをご覧ください。
アプリケーション ランタイムで設定される環境変数
Hosted Targets アプリケーションをデプロイすると、次の環境変数が設定され、アプリケーション実行時に使用できます。
APIGEE_ENVIRONMENT
- Hosted Target プロキシがデプロイされている環境。APIGEE_ORGANIZATION
- Hosted Target プロキシがデプロイされている組織。PORT
- Hosted Target アプリケーションがリッスンするポート。
システム リソースの割り当て
各 Hosted Targets インスタンスは、次のリソースを受け取ります。
- メモリ 256 MB
- CPU 1.2 GHz
スケーリング
このセクションでは、Edge アカウントの種類に応じて、Hosted Targets アプリケーションをスケーリングする方法について説明します。- Apigee Edge のトライアル版では、プロキシごとの Hosted Targets インスタンスは 1 つに制限されます。
- Apigee Edge の有料アカウントでは、リクエスト率、レスポンス レイテンシ、プロキシごとの他のアプリケーション指標に基づき、自動スケーリングされます。
- Apigee Edge の有料版とトライアル版の両方にデプロイされた Hosted Targets アプリは、非アクティブ時にゼロにスケーリングされます。この場合、しばらくの間、レスポンス時間が遅くなることがあります。報告されている問題もご覧ください。
マニフェスト ファイル
Edge は、ホステッド アプリケーションのビルドおよびデプロイのランタイム情報を収集するために、resources/hosted ディレクトリで app.yaml という名前のマニフェスト ファイルを探します。このファイルには、Hosted Targets アプリケーションのビルドとデプロイに必要な情報が含まれています。
マニフェスト ファイルの構文
runtime: node runtimeVersion: version_number command: command_name args: argument_array env: - name: variable_name value: literal_value - name: variable_name valueRef: name: kvm_name key: kvm_value
マニフェスト ファイルの要素
app.yaml マニフェスト ファイルには次の要素が含まれます。
- runtime -(必須)デプロイするアプリケーションのタイプを指定します。
node
を指定する必要があります。 - runtimeVersion -(省略可)アプリケーションが使用するランタイムのバージョン。デフォルト: Node.js LTS(v8.x)。その他のオプションについては、Node の Docker 公式リポジトリをご覧ください。
- command -(省略可)アプリケーションの起動に使用されるデフォルトのコマンド以外のコマンドを実行するように指定できます。デフォルト:
Node.js=npm
- args -(省略可)アプリケーションに渡すコマンドライン引数の配列(標準の YAML 配列構文で指定)。通常、これはデフォルトのコマンドに追加されます。デフォルトは start です。たとえば、Node.js アプリにデフォルトで渡されるコマンドは
npm start
です。 - env -(省略可)Hosted Targets ランタイム環境に設定する環境変数(名前と値のペア)の配列。この変数は、デプロイ済みの Hosted Targets アプリで使用できます。
- name - 変数の名前。
- value | valueRef - 2 つの選択肢があります。リテラル値を設定するか、Key-Value マップに格納されている値を参照できます。Key-Value マップは、元から Edge 環境に存在している必要があります。Key-Value マップの操作をご覧ください。
- value を使用する場合、変数
name
とリテラルvalue
を指定する必要があります。次に例を示します。runtime: node env: - name: NODE_ENV value: production
- valueRef を使用する場合、以前 Edge で作成した Key-Value マップ(KVM)の名前と鍵を指定する必要があります。次に例を示します。
runtime: node env: - name: DB_ENV value: production - name: DB_PASSWORD valueRef: name: hosted-kvm key: db-password
- value を使用する場合、変数
マニフェスト ファイルの例
このセクションでは、Node.js アプリケーション用のマニフェスト ファイルの例を示します。Hosted Targets アプリをデプロイするにはマニフェスト ファイルが必要です。マニフェスト ファイルは apiproxy/resources/hosted
ディレクトリに配置し、ファイル名は app.yaml
にする必要があります。
以下に、Node.js アプリの app.yaml
(マニフェスト)ファイルの例を示します。
リテラル環境変数を指定する例:
runtime: node env: - name: NODE_ENV value: production
start コマンド、コマンドライン引数、環境変数を使用する例:
runtime: node command: ./node_modules/pm2/bin/pm2 env: - name: NODE_ENV value: production args: - app.js
Key-Value マップ(KVM)参照を指定する例:
KVM アクセスの詳細については、マニフェスト ファイルをご覧ください。
runtime: node env: - name: DB_ENV value: production - name: DB_PASSWORD valueRef: name: hosted-kvm key: db-password
GitHub のサンプル Hosted Targets アプリケーション
Apigee は、Node.js で記述された Hosted Targets アプリケーションとともに、サンプル プロキシを GitHub で提供しています。このリポジトリのクローンを作成し、README の説明に従って任意のプロキシをデプロイできます。
前提条件
サンプルをデプロイするには、次に示す 2 つのツールがシステムにインストールされている必要があります。
- apigeetool - Edge プロキシをデプロイするためのコマンドライン ツール。
- get_token - apigeetool に必要な認証トークンを取得するためのコマンドライン ツール。
サンプルをローカルでテストする場合は、Node.js もインストールされている必要があります。
サンプル リポジトリの取得
- ブラウザで https://github.com/apigee/api-platform-samples に移動します。
- [Clone or download] をクリックし、希望する方法でリポジトリをローカル システムに pull します。
- cd で <your install dir>/api-platform-samples/doc-samples/hosted-targets に移動します。
- リポジトリをダウンロードしたら、任意のサンプル ディレクトリに cd し、README の説明に従ってサンプル プロキシを Edge にデプロイします。デプロイ コマンドは次のとおりです。示されているパラメータを自身の Apigee アカウント用のパラメータに置き換えるだけです。
get_token && apigeetool deployproxy \ -o YOUR_ORGANIZATION \ -e YOUR_ENVIRONMENT \ --json \ --token "$(< ~/.sso-cli/valid_token.dat)"\ --api NAME_OF_THE_PROXY \ --directory .
例: サンプルアプリの実行
サンプル リポジトリのクローンを作成する
cd ~/myhome
git clone https://github.com/apigee/api-platform-samples.git
cd ~/myhome/api-platform-samples/doc-samples/hosted-targets
cd node-hosted-hello
アプリケーションをローカルでテストする
このローカルテストを実施するには、Node.js がインストールされている必要があります。
PORT=8081 node apiproxy/resources/hosted/index.js
curl http://localhost:8081
出力例:
{"date":"2018-03-12T21:45:22.161Z","msg":"Hello, World!"}
プロキシをデプロイする
get_token && apigeetool deployproxy \ -o myorg \ -e test \ --json \ --token "$(< ~/.sso-cli/valid_token.dat)"\ --api node-hosted-hello \ --directory .
デプロイをテストする
デプロイの完了までに数分かかることがあります。デプロイエラーが発生した場合は、deploy コマンドを再度実行します。
curl http://myorg-test.apigee.net/node-hosted-hello
出力例:
{"date":"2018-03-23T18:59:18.668Z","msg":"Hello, World!"
報告されている問題
- ネットワーク レイテンシ - Node.js アプリケーションが MP の JVM 内で実行されなくなったため、MP とデプロイの間にネットワーク ホップが発生しています。もちろんこれはコストを伴いますが、初期のベンチマークでは許容できる範囲内であることが示されています。
- API レスポンスが遅い - アプリケーションを実行するインフラストラクチャは、必要に応じて自動的にスケーリングされます。つまり、アプリケーションは実際にゼロ インスタンスまでスケールダウンできます。この場合、次の API リクエストの処理は通常の API リクエストよりも少し時間がかかります。リクエスト処理のためインフラストラクチャがインスタンスを起動しようとするためです。
- デプロイエラー - Hosted Targets プロキシのデプロイ時にデプロイエラーが発生した場合は、プロキシを再デプロイしてみてください。場合によってはデプロイがタイムアウトすることがあり、再デプロイすると問題が解決します。