Hosted Targets のリファレンス

環境変数の制限

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

    マニフェスト ファイルの例

    このセクションでは、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 もインストールされている必要があります。

    サンプル リポジトリの取得

    1. ブラウザで https://github.com/apigee/api-platform-samples に移動します。
    2. [Clone or download] をクリックし、希望する方法でリポジトリをローカル システムに pull します。
    3. cd<your install dir>/api-platform-samples/doc-samples/hosted-targets に移動します。
    4. リポジトリをダウンロードしたら、任意のサンプル ディレクトリに cd し、README の説明に従ってサンプル プロキシを Edge にデプロイします。デプロイ コマンドは次のとおりです。示されているパラメータを自身の Apigee アカウント用のパラメータに置き換えるだけです。
    5. 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 プロキシのデプロイ時にデプロイエラーが発生した場合は、プロキシを再デプロイしてみてください。場合によってはデプロイがタイムアウトすることがあり、再デプロイすると問題が解決します。