Hosted Targets のリファレンス

環境変数の制限

Hosted Targets では、Hosted Targets ランタイム環境で設定できる環境変数のサイズと数が制限されます。

  • 1000: 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 Map に格納されている値を参照できます。 Key Value Map は、元から Edge 環境に存在している必要があります。Key Value Map の使い方をご覧ください。
      • value を使用する場合、変数 name とリテラル value を指定する必要があります。例:
            runtime: node
            env:
             - name: NODE_ENV
               value: production
      • valueRef を使用する場合、以前 Edge とキーで作成した Key-Value Map(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 Map(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] をクリックし、好みの方法でリポジトリを読み込みます。
    3. <インストール ディレクトリ>/api-platform-samples/doc-samples/hosted-targetscd します。
    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/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 プロキシをデプロイするときにデプロイエラーが発生した場合は、プロキシを再デプロイします。場合によってはデプロイがタイムアウトすることがあり、再デプロイすると問題が解決します。