Edge Microgateway に Docker を使用する

このトピックでは、Docker コンテナで Edge Microgateway を実行する方法について説明します。このトピックの手順は、Docker、Docker コマンド、Edge Microgateway の設定と構成について、読者に基本的な知識があることを前提としています。詳しくは、DockerEdge Microgateway のドキュメントをご覧ください。

前提条件

Edge Microgateway を Docker コンテナで実行する前に、次の作業を行う必要があります。

  • Edge Microgateway を Apigee の組織 / 環境向けに構成します。

    edgemicro configure -o your_org -e your_env -u your_username

    構成の詳細については、パート 1: Edge Microgateway の構成をご覧ください。

  • 構成の手順を実施した後、構成ファイルを見つけます。デフォルトの場所は次のとおりです。

    $HOME/.edgemicro/your_org-your_env-config.yaml

    ここで your_orgyour_env は、edgemicro config コマンドを実行したときに使用した組織と環境です。このファイルは、Docker コンテナで Edge Microgateway を起動するときに必要になります。

  • edgemicro config コマンドを実行したときに返されたキーとシークレットの認証情報があることを確認します。次に例を示します。

    The following credentials are required to start edge micro
          key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
          secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
        
  • Docker コンテナで Edge Microgateway を起動する前に、認証付きの API プロキシ呼び出しを行うために必要な、Apigee Edge エンティティを作成する(または作成済みである)必要があります。このエンティティには、Edge Microgateway-aware プロキシ、API プロダクト、デベロッパー、デベロッパー アプリが含まれます。手順の詳細については、Apigee Edge でエンティティを作成するをご覧ください。

Docker コンテナとして Edge Micro を実行する

  1. Edge Microgateway 用の Docker イメージをダウンロードします。

    docker pull gcr.io/apigee-microgateway/edgemicro:latest
  2. 次の手順に進む前に、前提条件のセクションのすべての手順を実施済みであることを確認してください。

  3. 次のコマンドを実行して、$HOME/.edgemicro にある Edge Microgateway 構成ファイルを base64 エンコードします。

        export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    ここで your_orgyour_env は、edgemicro config コマンドを実行したときに使用した組織と環境です。

    コマンドの前後に、忘れずにバッククォート(`)を付けてください。次に例を示します。

        export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
  4. Edge Microgateway をコンテナとして実行します。このコマンドで、コンテナ ランタイムが Edge Microgateway を起動するために使用するいくつかの環境変数を設定します。

    docker run -P -p 8000:8000 -d --name edgemicro \
        -e EDGEMICRO_DOCKER=1 \
        -e EDGEMICRO_ORG=your_org \
        -e EDGEMICRO_ENV=your_env \
        -e EDGEMICRO_KEY=your_key \
        -e EDGEMICRO_SECRET=your_secret \
        -e EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG \
        -e SERVICE_NAME=edgemicro gcr.io/apigee-microgateway/edgemicro

    パラメータ

    パラメータの詳細については、Docker の実行リファレンスをご覧ください。

    パラメータ 説明
    -P 開放したポートをすべてホストに公開します。
    -p 1 つまたは一定範囲のポートを明示的にマッピングします。
    -d デタッチ モードで実行します。
    EDGEMICRO_ORG Edge Microgateway の構成に使用した Apigee 組織の名前。
    EDGEMICRO_ENV Edge Microgateway の構成に使用した Apigee 環境の名前。
    EDGEMICRO_DOCKER 1 に設定する必要があります。Kubernetes でコンテナを実行している場合はこのパラメータを設定しないでください。
    EDGEMICRO_KEY Edge Microgateway を構成したときに返されたキー。
    EDGEMICRO_SECRET Edge Microgateway を構成したときに返されたシークレット。
    EDGEMICRO_CONFIG base64 エンコードされた Edge Microgateway 構成ファイルを含む変数。
    SERVICE_NAME Kubernetes でコンテナを実行する場合、このパラメータを edgemicro に設定します。

    例:

    docker run -P -p 8000:8000 -d --name edgemicro \
        -e EDGEMICRO_DOCKER=1 \
        -e EDGEMICRO_ORG=docs \
        -e EDGEMICRO_ENV=test \
        -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \
        -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \
        -e EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG \
        -e SERVICE_NAME=edgemicro gcr.io/apigee-microgateway/edgemicro
  5. コンテナが実行中であることを確認するには、次のようにします。

    docker ps

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

    CONTAINER ID    IMAGE         COMMAND                CREATED          STATUS          PORTS                                             NAMES
        8b92e082ea9c    edgemicro    "/tmp/entrypoint.sh"   12 minutes ago   Up 12 minutes    0.0.0.0:8000->8000/tcp, 0.0.0.0:32775->8443/tcp    edgemicro
        

API 呼び出しのテスト

コンテナで Edge Microgateway を起動すると、API 呼び出しを実施できます。たとえば API のベースパスが /hello の場合、次のようにします。

http://localhost:8000/hello

出力例:

{"error":"missing_authorization","error_description":"Missing Authorization header"}
    

このレスポンスが表示された場合、Edge Microgateway が API 呼び出しを正常に処理したことを意味します。ただしデフォルトでは、Edge Microgateway は認証に API キーを必要とします。次のセクションでは、有効な API キーを使用して API をテストします。

有効な API キーを使用して API をテストする

Edge UI で、以前作成したデベロッパー アプリに移動します。[Developer App] ページで、コンシューマ キーを表示してコピーします。この値が API キーです。このキーを使用して、認証付きの API 呼び出しを行います。

次のように、x-api-key ヘッダーを使用して API を呼び出します。デベロッパー アプリからコピーしたコンシューマ キーの値が API キーです。デフォルトでは、Edge Microgateway はこのキーが次のように x-api-key というヘッダーで渡されることを期待しています。

curl -i http://localhost:8000/hello -H "x-api-key:apikey"

例:

curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"

API キーと OAuth トークンを使用し、Edge Microgateway を介して認証付きの API 呼び出しを行う方法の詳細については、パート 4: Edge Microgateway を保護するをご覧ください。

Edge Microgateway の停止

Edge Microgateway を停止するには、次の Docker コマンドを使用します。

docker stop edgemicro
    

Edge Microgateway の再起動

Edge Microgateway を停止した後で再起動するには、次の Docker コマンドを使用します。

docker start $(docker ps -aqf name=edgemicro)
    

カスタム プラグインの追加

カスタム プラグインを作成することで、マイクロゲートウェイに新しい機能を追加できます。カスタム プラグインを使用すると、マイクロゲートウェイを通過するリクエストやレスポンスをプログラムで操作できます。

このセクションでは、プラグインをパッケージ化して、Docker コンテナで実行されている Edge Microgateway インスタンスにデプロイする方法について説明します。

このセクションの残りの部分は、標準の Edge Microgateway 設定用プラグインの作成と構成について読者が精通していることを前提としています。そうでない場合は、カスタム プラグインの作成をご覧ください。

プラグインのパッケージ化

カスタム プラグインをパッケージ化するには、次の手順を実施します。

  1. 単純なプラグインを作成するの説明に従ってプラグインを作成し、テストします。

  2. プラグイン コードを適切なディレクトリ構造に配置します。プラグインのディレクトリは、決められた構造に従う必要があります。その構造を次の例に示します。ここで response-uppercaserequest-headers は、カスタム プラグイン コードを含むフォルダの名前です(この名前は単なる例で、実際のフォルダ名に異なる名前をつけても構いません)。

    plugin
          |
          |-- plugins
            |
            |- response-uppercase
            |     |- index.js
            |     |- package.json
            |- request-headers
            |     | - index.js
                  | - package.json
        
  3. plugin フォルダに cd します。

  4. plugin フォルダで、plugins フォルダ全体を zip 圧縮します。

        zip -r plugins.zip plugins/

Docker イメージを作成する

次に Dockerfile を作成して、プラグイン コードを Edge Microgateway イメージに追加します。

  1. zip ファイルがあるディレクトリと同じディレクトリに、Dockerfile という新しいファイルを作成します。
  2. 次のコードを Dockerfile に追加し、ファイルを保存します。

    FROM gcr.io/apigee-microgateway/edgemicro:latest
        RUN apt-get install unzip
        COPY plugins.zip /opt/apigee/
        RUN chown apigee:apigee /opt/apigee/plugins.zip
        RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee"
        EXPOSE 8000
        EXPOSE 8443
        ENTRYPOINT ["/tmp/entrypoint.sh"]
        
  3. プラグインを含む新しい Edge Microgateway Docker イメージを作成します。

        docker build -t image-name .
        

    例:

        docker build -t edgemicroplugins .
        

Edge Microgateway の構成を更新する

プラグインをパッケージ化したら、Edge Microgateway 構成ファイルに追加する必要があります。

  1. Edge Microgateway 構成ファイルをエディタで開きます。

        $HOME/.edgemicro/org-env-config.yaml
        

    例:

        vi $HOME/.edgemicro/myorg-test-config.yaml
  2. プラグイン ディレクトリを構成ファイルに追加します。次の例では、dir 属性でプラグイン コードの場所(Dockerfile で指定したもの)を指定しています。プラグイン ディレクトリの名前も指定する必要があります。この例では response-uppercase です。

    edgemicro:
          ...
          plugins:
            dir: /opt/apigee/plugins
            sequence:
              - oauth
              - response-uppercase
        

Microgateway を起動する

最後に、コンテナでマイクロゲートウェイを起動する必要があります。

  1. 次のコマンドを実行して、$HOME/.edgemicro にある Edge Microgateway 構成ファイルを base64 エンコードします。

        export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    ここで your_orgyour_env は、edgemicro config コマンドを実行したときに使用した組織と環境です。

    コマンドの前後に、忘れずにバッククォート(`)を付けてください。次に例を示します。

        export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
  2. Edge Microgateway をコンテナとして実行します。このコマンドで、コンテナ ランタイムが Edge Microgateway を起動するために使用するいくつかの環境変数を設定します。

    docker run -P -p 8000:8000 -d --name edgemicroplugins \
        -e EDGEMICRO_DOCKER=1 \
        -e EDGEMICRO_ORG=your_org \
        -e EDGEMICRO_ENV=your_env \
        -e EDGEMICRO_KEY=your_key \
        -e EDGEMICRO_SECRET=your_secret \
        -e EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG \
        -e SERVICE_NAME=edgemicroplugins image_name

    例:

    docker run -P -p 8000:8000 -d --name edgemicroplugins \
        -e EDGEMICRO_DOCKER=1 \
        -e EDGEMICRO_ORG=docs \
        -e EDGEMICRO_ENV=test \
        -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \
        -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \
        -e EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG \
        -e SERVICE_NAME=edgemicroplugins edgemicroplugins
  3. API を呼び出してプラグインをテストします。

    プラグイン コードの実行をテストするには、API を呼び出して想定どおりの出力が得られることを確認します。

    curl -i http://localhost:8000/hello -H "x-api-key:apikey"

    たとえば、response-uppercase プラグインは次のようなレスポンスを返します。

    curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
          HELLO, WORLD!