Apigee Edge と AI Platform を使用した機械学習モデルの提供

このチュートリアルでは、AI Platform PredictionApigee Edge を設定する方法を説明します。

機械学習モデルを提供する場合、データの準備とモデルのトレーニングが重要な検討要素になりますが、次のような点も考慮する必要があります。

  • スケーラビリティ、パフォーマンス、可用性を考慮して予測を行う。
  • 社内のユーザーや社外のパートナー企業のユーザーなど、ユーザーの種類に応じて機能へのアクセスを制限する。
  • API キーを使用して割り当てと利用ポリシーを適用する。
  • API キーのライフサイクルを管理する(特に、キーの配布と取り消し)。
  • 手動または自動の承認プロセスにより、ML API へのアクセスを許可する。
  • 機械学習モデルの更新に合わせて新しいモデル バージョンを提供する。

Google Cloud では、ホストされているモデルの予測機能にアクセスできるように、モデル ホスティングと API 管理のマネージド サービスを提供しています。

AI Platform は、Google Cloud 上で利用できるスケーラブルなマネージド機械学習サービスです。AI Platform では Google の分散型インフラストラクチャでモデルをトレーニングできるだけでなく、モデル ホスティングによって大規模なオンライン予測やバッチ予測にも対応できます。基盤となるインフラストラクチャは Google のグローバルな負荷分散を利用しているため、どこからでも高性能な予測を行うことができます。

低レイテンシが求められる場合は、AI Platform のオンライン予測で公開されている REST API を使用して、ホストされているモデルの予測を行い、その結果をレスポンスで直接取得できます。モデルをホストするサービス インフラストラクチャは必要に応じて自動的にスケーリングされます。複雑な構成を維持する必要も、インフラストラクチャのプロビジョニングを管理する必要もありません。AI Platform のモデル バージョニング機能により、予測モデルの更新プロセスも簡素化されます。

より幅広い API 管理機能をサービスで使用できるようにするには、AI Platform のオンライン予測と Apigee Edge を組み合わせて使用して、次のことが可能になります。

  • API にきめ細かいセキュリティ制御ポリシーとアクセス制御ポリシーを設定する。
  • API を分析して使用状況を把握する。
  • API のレート制限や他の割り当てを適用する。
  • デベロッパー キーにより API に対する第三者のアクセスを許可する。
  • AI Platform のオンライン予測で、ホストされている AI Platform API を収益化する。
  • API ファサードで予測リクエストを転送することにより、モデルの変更を透過的に行う。

目標

  • AI Platform でホストされているモデルに Apigee Edge の API プロキシをデプロイする。
  • API キーを使用して、ホストされているモデルに安全にアクセスする。
  • API キーの配布を承認する手動または自動プロセスを指定する。
  • ユーザータイプに応じた時間ベースの割り当てなど、異なる利用ポリシーを適用する API サービスを作成する。

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。

このチュートリアルでは、Google Cloud の課金対象のコンポーネントに加えて Apigee Edge を使用します。

始める前に

Google Cloud プロジェクトを作成する

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. AI Platform API を有効にします。

    API を有効にする

Cloud SDK をインストールしていない場合は、Cloud Shell を使用してアプリケーションをデプロイします。Cloud Shell は Cloud SDK がプリインストールされた shell 環境を提供します。このチュートリアルの残りの部分では Cloud Shell を使用します。

Apigee Edge アカウントを作成する

Apigee Edge アカウントの作成の手順を行います。Apigee では、ソリューションのテスト用に評価アカウントを無料で提供しています。このチュートリアルの手順は評価アカウントで行うことができます。

ソリューション アーキテクチャ

このチュートリアルでは、TensorFlow モデルを AI Platform にデプロイし、オンライン予測を使用して、これらのモデルをサービスで利用できるようにします。ホストされているモデルごとに API プロキシを Apigee Edge にデプロイします。Apigee Edge は、サービス アカウントを使用してクライアント アプリケーションからのリクエストの認証を行い、リクエストを AI Platform のオンライン予測に転送します。使用量の割り当て、レート制限、API キーの検証などの API ポリシーを適用します。API キーごとに異なる割り当てや API プロダクトを使用することで、きめ細かいポリシーを適用することもできます。次の図は、このアーキテクチャを示しています。

TensorFlow モデルを AI Platform にデプロイし、オンライン予測を使用してモデルを利用可能にする

コンセプトをさらに詳しく説明します。

コンセプト 説明
アプリケーション アプリケーションは、Apigee Edge にホストされている API を介して機械学習モデルの予測を呼び出します。API プロキシで管理されているエンドポイントに HTTP リクエストが送信されます。Apigee Edge の API プロキシが API キーの検証を行い、API キーに関連付けられた API サービスで定義された特定のアクセスレベルと機能を適用します。
API プロキシ API プロキシは、プロキシ エンドポイント(クライアント アプリケーションに公開)からターゲット エンドポイントにリクエストを転送します。ターゲット エンドポイントは、ホストされているモデルのエンドポイントです。このエンドポイントが、AI Platform のオンライン予測をリクエストします。
API サービス API サービスは、クライアント アプリの開発者に特定のアクセスレベルと機能を提供するため、Apigee リソース(API プロキシなど)をバンドルします。たとえば、API サービスでアクセス制限や API キーの承認メソッドを適用できます。また、ホストされているモデルのオンライン予測にアクセスする API プロキシの構成も適用できます。
ホストされているモデル ホストされているモデルは、AI Platform にデプロイされた、トレーニング済みの ML モデルです。ホストされているモデルから予測をリクエストするには、AI Platform のオンライン予測バッチ予測を使用します。

このソリューションのアーキテクチャでは、ホストされているモデルを AI Platform で直接ユーザーに公開するのではなく、Apigee Edge を使用しています。これにより、外部ユーザーが API プロキシを介してモデルを呼び出すことができます。Apigee Edge を介してリクエストをプロキシすることで、さまざまな利用ポリシーを適用できます。
モデルアセット このチュートリアルでは、ホストされている TensorFlow モデルを AI Platform にデプロイするために、TensorFlow の SavedModel 形式でモデルをエクスポートし、そのモデルアセットを Cloud Storage バケットに保存します。これにより、AI Platform のオンライン予測またはバッチ予測でモデルを予測できます。

このチュートリアルでは Apigee Edge を使用して、AI Platform にデプロイされた、ホストされているシンプルなモデル(国勢調査データからの所得予測)用に 2 つのサンプル API プロダクトを作成します。

次の図は、使用量の割り当てが少ない Income Prediction Trial と、割り当ての多い Income Prediction Premium という 2 つの API プロダクトを表しています。ここでは、2 つの API サービスで適用されている制限の下で API のテストを行う 2 人の開発者とアプリケーションを登録しています。

AI Platform にデプロイされた、ホストされているシンプルなモデル用の 2 つのサンプル API サービス

Google Cloud サービス アカウントを作成する

Apigee Edge では、AI Platform のオンライン予測に対するリクエストを認証するために、Google Cloud サービス アカウントが必要になります。

gcloud

  1. Cloud Shell を開きます。

    Cloud Shell に移動

    特に断りのない限り、このチュートリアルでは Cloud Shell を使用します。

  2. サービス アカウント名の環境変数を設定します。

    SERVICE_ACCOUNT=income-prediction-api@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
    
  3. サービス アカウントを作成します。

    gcloud iam service-accounts create \
        income-prediction-api \
        --display-name "Apigee service account"
    
  4. サービス アカウントの秘密鍵を作成します。

    gcloud iam service-accounts keys create \
        --iam-account ${SERVICE_ACCOUNT} \
        ~/key.json
    

    秘密鍵ファイルは ${HOME}/key.json に保存されます。このファイルは以降の手順で必要になります。安全に保管してください。

Console

  1. Cloud Console で、プロジェクトの [IAM と管理] ページに移動し、[サービス アカウント] ページに移動します。

    [サービス アカウント] ページに移動

  2. [サービス アカウントを作成] をクリックして、サービス アカウントの詳細を入力します。

    1. サービス アカウント名を入力します(例: Income Prediction API)。
    2. サービス アカウント ID を入力します(例: income-prediction-api)。
    3. [作成] をクリックします。
  3. [このサービス アカウントにプロジェクトへのアクセスを許可する(オプション)] ページで、[役割] プルダウン リストを空のままにして [続行] をクリックします。

  4. [ユーザーにこのサービス アカウントへのアクセス権を付与(オプション)] ページで、下にスクロールして [鍵を作成] をクリックします。

    1. 鍵のタイプとして、デフォルトの JSON を選択します。
    2. [作成] をクリックします。ブラウザで秘密鍵ファイルのダウンロードが開始されます。このファイルは後で必要になります。安全に保管してください。
    3. [完了] をクリックします。

所得予測モデルを AI Platform にデプロイする

このチュートリアルでは、国勢調査データで所得予測モデルをトレーニングするために、既存のコードサンプルを使用します。GitHub のこのチュートリアルのコード リポジトリに、トレーニング済みのモデルが用意されています。

以下の手順に従って、トレーニング済みの所得予測モデルを AI Platform にデプロイします。

  1. Cloud Shell を開きます。

    Cloud Shell に移動

  2. Cloud Shell で環境変数を定義します。この環境変数は、以降のコマンドで使用します。

    GCS_MODEL_BUCKET=${GOOGLE_CLOUD_PROJECT}-ml-models
    MODEL_NAME=census
    MODEL_VERSION=v1
    MODEL_REGION=us-central1
    
  3. GitHub からチュートリアル ファイルのクローンを作成します。

    cd ${HOME}
    
    git clone https://github.com/GoogleCloudPlatform/cloudml-apigee-serving.git
    
  4. 予測モデルを保存する Cloud Storage Regional Storage バケットを作成します。

    gsutil mb -c regional -l ${MODEL_REGION} \
        -p ${GOOGLE_CLOUD_PROJECT} gs://${GCS_MODEL_BUCKET}
    
  5. モデルを抽出して Cloud Storage にコピーします。

    cd ${HOME}/cloudml-apigee-serving/model
    
    tar zxvf census.tar.gz
    
    gsutil -m cp -rv census gs://${GCS_MODEL_BUCKET}
    
  6. AI Platform で予測モデルを作成します。

    gcloud ml-engine models create ${MODEL_NAME} \
         --regions ${MODEL_REGION}
    
  7. 予測モデルの新しいバージョンを作成します。

    gcloud ml-engine versions create ${MODEL_VERSION} \
        --model ${MODEL_NAME} \
        --origin gs://${GCS_MODEL_BUCKET}/census \
        --runtime-version 1.6
    
  8. 新しいバージョンに関する情報を取得します。

    gcloud ml-engine versions describe ${MODEL_VERSION} \
        --model ${MODEL_NAME}
    

    出力は次のようになります。

    deploymentUri: your_bucket_path
    framework: TENSORFLOW
    isDefault: true
    lastUseTime: '2018-05-07T04:41:22Z'
    name: projects/your_project/models/census/versions/v1
    pythonVersion: '2.7'
    runtimeVersion: '1.6'
    state: READY
    
  9. 続行する前に、予測を正常に実行できることを確認します。

    gcloud ml-engine predict \
        --model ${MODEL_NAME} \
        --version ${MODEL_VERSION} \
        --json-instances ${HOME}/cmle-op-apigee-tutorial/model/test.json
    

    出力は次のようになります。出力がこのようになっていれば、ホストされているモデルは AI Platform に正常にデプロイされています。したがって、AI Platform のオンライン予測を使用してモデルを呼び出すことができます。

    CLASS_IDS  CLASSES  LOGISTIC               LOGITS                PROBABILITIES
    [0]        [u'0']   [0.23072466254234314]  [-1.204223871231079]  [0.7692753076553345, 0.23072466254234314]
    

Apigee Edge に API プロキシをデプロイする

クライアントは、API プロキシを使用して、ホストされているモデルを外部 API 経由で呼び出します。API プロキシは、Apigee Edge でホストされている外部 API インターフェースから、ホストされているモデルの AI Platform predict API にクライアント リクエストをプロキシします。このインターフェースは、API ファサード パターンを実装し、新しいモデルとモデル バージョンをデプロイするときにターゲット エンドポイントの変更からユーザーを保護します。詳細については、API プロキシをご覧ください。

API プロキシの構成で、API リクエストとレスポンスで実行される処理ステップをフローで構成します。処理ステップには、JSON ウェブトークン(JWT)の生成と署名、リクエスト ヘッダーとレスポンス ヘッダーの追加、特定の Apigee Edge 機能の使用などのアクティビティが含まれます。Apigee Edge には、これらのアクティビティを実行する多くの組み込み API ポリシーが用意されています。これらのポリシーを API フローに追加できます。

Apigee Edge では、さまざまな方法で API プロキシをデプロイできます。たとえば、ウェブ管理インターフェース(ログインが必要)、管理 APIコマンドライン ツールなどを使用できます。

このチュートリアルでは、apigeetool を使用して、必要な Apigee リソースの作成と API プロキシのデプロイを行います。

  1. Cloud Shell を開きます。

    Cloud Shell に移動

  2. Cloud Shell で環境変数を設定します。これらの変数は後で必要になります。[YOUR_APIGEE_USER_EMAIL][YOUR_APIGEE_ORGANIZATION][YOUR_APIGEE_ENVIRONMENT][YOUR_APIGEE_USER_PASSWORD] は必要な値に置き換えます。

    • Apigee アカウントには、組織管理者の役割が自動的に付与されます。このアカウントは、Apigee 組織内のすべてのリソースにスーパー ユーザーとしてアクセスできます。詳細については、異なる Apigee 役割の機能をご覧ください。
    • Apigee 組織が自動的に作成されます。組織の名前は、Apigee ウェブ管理インターフェースの左上隅(アカウント名が表示されている場所)で確認できます。
    • testprod という 2 つの Apigee 環境が自動的に作成されます。いずれの環境も次の手順で使用できます。

    1. apigeetool で必要な環境変数をエクスポートします。

      export APIGEE_USERNAME=[YOUR_APIGEE_USER_EMAIL]
      export APIGEE_ORGANIZATION=[YOUR_APIGEE_ORGANIZATION]
      
    2. 必要であれば、Apigee パスワードの環境変数をエクスポートします。

      export APIGEE_PASSWORD=[YOUR_APIGEE_USER_PASSWORD]
      
    3. Apigee 環境での動作に必要な他の環境変数を設定します。

      APIGEE_ENVIRONMENT=[YOUR_APIGEE_ENVIRONMENT]
      
    4. デフォルトの Apigee キャッシュ名は「google」のままにします。

      APIGEE_CACHE=google
    5. AI Platform のモデル名とバージョンを格納する環境変数を設定します。これらの変数には、モデル バージョンのデプロイに使用したものと同じ値を設定します。

      MODEL_NAME=census
      MODEL_VERSION=v1
      
    6. Apigee が AI Platform オンライン予測の呼び出しに使用するサービス アカウントを格納する環境変数を設定します。

      SERVICE_ACCOUNT=income-prediction-api@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
      
  3. apigeetool をインストールします。これは、Apigee リソースの作成と API プロキシのデプロイで使用します。

    npm install -g apigeetool
    
    alias apigeetool=$(npm config get prefix)/bin/apigeetool
    
  4. 前に保存した JSON 認証情報ファイルからサービス アカウントの秘密鍵を抽出します。

    PRIVATE_KEY=`sed -rne 's/^.*\"private_key\": \"(.*)\",$/\1/p' <  ${HOME}/key.json`
    
  5. Apigee Edge にサービス アカウント名と秘密鍵を安全に保存するため、暗号化された Key-Value マップ(KVM)を作成します。

    apigeetool createkvmmap \
        -e ${APIGEE_ENVIRONMENT} \
        --encrypted \
        --mapName "secrets"
    
  6. 暗号化された KVM にサービス アカウント名を追加します。

    apigeetool addEntryToKVM \
        -e ${APIGEE_ENVIRONMENT} \
        --mapName "secrets" \
        --entryName "service-account" \
        --entryValue "${SERVICE_ACCOUNT}"
    
  7. 暗号化された KVM に秘密鍵を追加します。

    apigeetool addEntryToKVM \
        -e ${APIGEE_ENVIRONMENT} \
        --mapName "secrets" \
        --entryName "private-key" \
        --entryValue "`echo -e ${PRIVATE_KEY}`"
    
  8. API プロキシ エンドポイントを、AI Platform にデプロイされたモデルに更新します。API プロキシは、AI Platform のオンライン予測に含まれる、ホストされているモデルの projects.predict メソッドにリクエストを転送します。

    sed -i \
        -e "s/\[project\]/${GOOGLE_CLOUD_PROJECT}/" \
        -e "s/\[model-name\]/${MODEL_NAME}/" \
        -e "s/\[model-version\]/${MODEL_VERSION}/" \
        ${HOME}/cmle-op-apigee-tutorial/apiproxy/targets/default.xml
    
  9. Google 承認サーバーから返された OAuth2 アクセス トークンの一時ストレージのための Apigee キャッシュを作成します。

    apigeetool createcache \
        -e ${APIGEE_ENVIRONMENT} \
        -z ${APIGEE_CACHE}
    
  10. サービス アカウントがモデルの予測をリクエストできるように、Identity and Access Management(IAM)権限を付与します。これらの権限を付与するには、次のように census モデルに IAM ポリシー バインディングを追加します。

    gcloud ml-engine models add-iam-policy-binding \
        ${MODEL_NAME} \
        --member=serviceAccount:${SERVICE_ACCOUNT} \
        --role=roles/ml.modelUser
    
  11. API プロキシをデプロイします。

    apigeetool deployproxy  \
        -e ${APIGEE_ENVIRONMENT} \
        -n income_prediction -d ${HOME}/cmle-op-apigee-tutorial
    

API を配布する API サービスを作成する

Apigee API サービスを使用すると、開発者に公開されている特定のアクセスレベルと機能を構成できます。たとえば、使用できる割り当てやアクセスできる機能などが異なる「Trial」と「Premium」というサービス階層のそれぞれに合わせて、API Platform 内のホストされているモデル用に 2 つの API プロダクトを作成できます。

このセクションでは、Income Prediction TrialIncome Prediction Premium という 2 つの API サービスを作成します。これらの API サービスは、前の手順でデプロイした API プロキシを使用するように構成しますが、サービスによって異なる利用ポリシーを適用します。

  • Income Prediction Trial API サービスでは、1 日の使用量の割り当てが低く設定されていますが、開発者は自動化されたプロセスで API キーを取得できます。このポリシーは、API への簡単なアクセスと比較的低い使用制限を提供する「無料トライアル」層に対応しています。

  • Income Prediction Premium API サービスでは、1 日の使用量の割り当てが高く設定されていますが、開発者は承認プロセスを手動で行う必要があります。このポリシーは、アクセスと多くの使用量を提供する API の有料階層に対応しています。

API サービスを作成するには、次の操作を行います。

  1. Income Prediction Trial API サービスを作成します。

    apigeetool createProduct \
        --approvalType "auto" \
        --environments ${APIGEE_ENVIRONMENT} \
        --proxies income_prediction \
        --productName "income_prediction_trial" \
        --productDesc "Free trial API for income prediction." \
        --quota 10 \
        --quotaInterval 1 \
        --quotaTimeUnit "day"
    
  2. Income Prediction Premium API サービスを作成します。

    apigeetool createProduct \
        --approvalType "manual" \
        --environments ${APIGEE_ENVIRONMENT} \
        --proxies income_prediction \
        --productName "income_prediction_premium" \
        --productDesc "Premium API for income prediction." \
        --quota 10000 \
        --quotaInterval 1 \
        --quotaTimeUnit "day"
    

開発者プロフィールを作成する

開発者プロフィールは、Apigee Edge 管理者が作成することも、個人がセルフサービスの登録プロセスで作成することもできます。

  1. John の開発者プロフィールを作成します。

    apigeetool createDeveloper \
        --email john@example.com \
        --firstName John \
        --lastName Citizen \
        --userName john@example.com
    
  2. 2 番目の開発者プロフィール(Sally 用)を作成します。

    apigeetool createDeveloper \
        --email sally@example.com \
        --firstName Sally \
        --lastName Resident \
        --userName sally@example.com
    

開発者アプリケーションを登録する

このセクションでは、2 つの開発者プロフィールに開発者アプリケーションを手動で登録します。

次のコマンドが正常に完了すると、端末に JSON レスポンスが表示されます。それぞれのコマンドで consumerKey プロパティの値をメモします。この値は、デベロッパー アプリケーション用に生成された API キーです。

  1. デベロッパー アプリケーション FooApp を登録して John と関連付け、Income Prediction Trial API サービスで使用します。次のコマンドで jq を使用して、レスポンスから consumerKey プロパティの値を抽出します。結果の値をメモしてください。

    FOOAPP_API_KEY="$(apigeetool createApp \
        --apiProducts "income_prediction_trial" \
        --name "FooApp" \
        --email john@example.com \
        | jq -r '.credentials[0].consumerKey')"
    
  2. デベロッパー アプリケーション BarApp を登録して Sally と関連付け、Income Prediction Premium API サービスで使用します。出力の consumerKey 値をメモします。

    BARAPP_API_KEY="$(apigeetool createApp \
        --apiProducts "income_prediction_premium" \
        --name "BarApp" \
        --email sally@example.com \
        | jq -r '.credentials[0].consumerKey')"
    

API プロキシのテストを行う

API プロキシのテストを行うには、API キーを使用して Income Prediction API を呼び出します。

  1. John というデベロッパーに登録されている ForApp アプリケーションの API キー(consumerKey プロパティの値)のテストを行います。

    curl -s -X POST \
        -H "Content-Type: application/json" \
        -H "X-APIKEY: ${FOOAPP_API_KEY}" \
        -d '{
            "instances": [{
                "age": 25,
                "workclass": "Private",
                "education": "Some-college",
                "education_num": 1,
                "marital_status": "Never-married",
                "occupation": "Other-service",
                "relationship": "Other-relative",
                "race": "Other",
                "gender": "Female",
                "capital_gain": 0,
                "capital_loss": 0,
                "hours_per_week": 40,
                "native_country": "United-States"}]
        }' \
        https://${APIGEE_ORGANIZATION}-${APIGEE_ENVIRONMENT}.apigee.net/ml/census/v1/predict
    

    テストに成功すると、次のようなレスポンスが返されます。

    {
        "predictions":[
            {
                "probabilities":[
                    0.7692753076553345,
                    0.23072466254234314
                ],
                "class_ids":[
                    0
                ],
                "classes":[
                    "0"
                ],
                "logits":[
                    -1.204223871231079
                ],
                "logistic":[
                    0.23072466254234314
                ]
            }
        ]
    }
    

    リクエストをさらに 10 回繰り返し、割り当て分をすべて使用します。

    for i in `seq 10`; do !! | jq '.' ; done
    

    割り当てを超過すると、Apigee Edge が次のエラーを返します。

    {
        "fault":{
            "detail":{
                "errorcode": "policies.ratelimit.QuotaViolation"
            },
            "faultstring": "Rate limit quota violation. Quota limit exceeded. Identifier : \_default"
        }
    }
    

    API キーがリクエスト ヘッダーから削除されていると、リクエストが拒否されます。

    {
        "fault":{
            "faultstring": "Failed to resolve API Key variable request.header.X-APIKEY",
            "detail":{
               "errorcode": "steps.oauth.v2.FailedToResolveAPIKey"
            }
        }
    }
    
  2. Sally というデベロッパーに登録されている BarApp アプリケーションの API キー(consumerKey プロパティの値)のテストを行います。

    curl -s -X POST \
        -H "Content-Type: application/json" \
        -H "X-APIKEY: ${BARAPP_API_KEY}" \
        -d '{
            "instances": [{
                "age": 25,
                "workclass": "Private",
                "education": "Some-college",
                "education_num": 1,
                "marital_status": "Never-married",
                "occupation": "Other-service",
                "relationship": "Other-relative",
                "race": "Other",
                "gender": "Female",
                "capital_gain": 0,
                "capital_loss": 0,
                "hours_per_week": 40,
                "native_country": "United-States"}]
        }' \
        https://${APIGEE_ORGANIZATION}-${APIGEE_ENVIRONMENT}.apigee.net/ml/census/v1/predict | jq '.'
    

    API キーの API サービスがまだ承認されていないため、出力は次のようになります。

    {
        "fault": {
            "faultstring": "Invalid ApiKey for given resource",
            "detail": {
                "errorcode": "oauth.v2.InvalidApiKeyForGivenResource"
            }
        }
    }
    

API サービスの承認と取り消し

前の手順では、API サービスに API キーの使用が承認されていないため、BarApp アプリケーションの API キーを使用したときに、API プロキシがエラーを返しました。

API サービスに BarApp API キーの使用を承認するには、Apigee Edge Management API を使用します。また、Apigee Edge ウェブ インターフェースでも API サービスを承認できます。詳細については、ウェブ インターフェースを使用して API キーの承認または取り消しを手動で行うをご覧ください。

Cloud Shell で次の手順を行い、Apigee Edge Management API を使用して API サービスを承認します。

  1. 次の環境変数を設定します。この変数は、後で使用するコマンドで必要になります。

    DEVELOPER_EMAIL=sally@example.com
    APP_NAME=BarApp
    API_PRODUCT=income_prediction_premium
    
  2. Apigee Edge Management API を呼び出して、API キーの使用を API サービスに承認します。

    curl -s -X POST \
        -u "${APIGEE_USERNAME}" \
        --header "Content-Type: application/octet-stream" \
        "https://api.enterprise.apigee.com/v1/organizations/${APIGEE_ORGANIZATION}/developers/${DEVELOPER_EMAIL}/apps/${APP_NAME}/keys/${BARAPP_API_KEY}/apiproducts/${API_PRODUCT}?action=approve"
    
  3. API キーを使用して、API リクエストを再度送信します。

    curl -s -X POST \
        -H "Content-Type: application/json" \
        -H "X-APIKEY: ${BARAPP_API_KEY}" \
        -d '{
            "instances": [{
                "age": 25,
                "workclass": "Private",
                "education": "Some-college",
                "education_num": 1,
                "marital_status": "Never-married",
                "occupation": "Other-service",
                "relationship": "Other-relative",
                "race": "Other",
                "gender": "Female",
                "capital_gain": 0,
                "capital_loss": 0,
                "hours_per_week": 40,
                "native_country": "United-States"}]
        }' \
        https://${APIGEE_ORGANIZATION}-${APIGEE_ENVIRONMENT}.apigee.net/ml/census/v1/predict | jq '.'
    

    API サービスに API キーの使用が承認されているため、出力は次のようになります。

    {
        "predictions":[
            {
                "probabilities":[
                    0.7692753076553345,
                    0.23072466254234314
                ],
                "class_ids":[
                    0
                ],
                "classes":[
                    "0"
                ],
                "logits":[
                    -1.204223871231079
                ],
                "logistic":[
                    0.23072466254234314
                ]
            }
        ]
    }
    

開発者ポータルでセルフサービス登録を有効にする

このチュートリアルでは、開発者プロフィール、アプリケーション、API キーの作成で Apigee 管理者アカウントを使用しました。

デベロッパー サービス ポータルで API サービスのセルフサービス登録を有効にすることもできます。このポータルでは、デベロッパーのプロフィールとアプリケーションを登録し、セルフサービスで API キーを生成できます。セルフサービス ポータルを有効にすると、自動化されたプロセスで API へのアクセス権を取得できます。このような自動化されたプロセスによる API キーの承認は、必要に応じて、自動的に行うことも、手動承認を必要とすることもできます。

Apigee Edge は、開発者ポータルの構築用にグラフィカルなウェブベースのツールを提供しています。詳細については、API サービスの開発者ポータルを構築する方法をご覧ください。

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

  • プロジェクトを削除する。
  • Apigee Edge トライアル アカウントを閉鎖する。
  • API プロキシ リクエストの配信を停止する。

プロジェクトの削除

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

Apigee Edge トライアル アカウントを閉鎖する

Apigee Edge のトライアル アカウントは、トライアル期間が終了すると自動的に閉鎖されます。トライアル アカウントを削除するために、特別な操作を行う必要はありません。

API プロキシ リクエストの配信を停止する

API プロキシ リクエストの配信を停止するには、API プロキシのデプロイを解除するか、API プロキシを削除します。また、新規の登録を防ぐため、開発者ポータルを削除します。

  1. Cloud Shell で apigeetool を使用して、API プロキシのデプロイを解除します。

    apigeetool undeploy \
        -u ${APIGEE_USERNAME} \
        -o ${APIGEE_ORGANIZATION} \
        -n income_prediction
        -e ${APIGEE_ENVIRONMENT} \
        -r 1 \
        -n income_prediction
    

    出力は次のようになります。

    "income_prediction" Revision 1
      undeployed
      environment = test
      base path = /
    

次のステップ