APISIX Declarative CLIを使用した宣言的なAPISIX管理
September 22, 2023
APISIXのユーザーは、主にAdmin APIを使用してAPISIXを設定します。しかし、設定が複雑になるにつれて、Admin APIのみでこれらを管理することはより困難になります。
これを簡単にするために、APISIXの設定を宣言的に定義できるツールであるAPISIX Declarative CLI、通称ADCを開発しました。
この記事では、ADCを使用してAPISIXの設定を管理する方法を見ていきます。
APISIXのデプロイ
始める前に、まずAPISIXインスタンスを実行して、それと対話し設定する必要があります。DockerでAPISIXを起動するには、次のコマンドを実行します:
curl -sL https://run.api7.ai/apisix/quickstart | sh
APISIXの使用方法について詳しくは、APISIXドキュメントを参照してください。
ADCのインストール
go install
コマンドを使用してADCをインストールできます:
go install github.com/api7/adc@latest
これにより、adc
バイナリが$GOPATH/bin
ディレクトリにインストールされます。
これを$PATH
環境変数に追加することを確認してください:
export PATH=$PATH:$GOPATH/bin
Goがインストールされていない場合、最新のadc
バイナリをダウンロードして、以下のように/bin
フォルダに追加することもできます:
wget https://github.com/api7/adc/releases/download/v0.2.0/adc_0.2.0_linux_amd64.tar.gz
tar -zxvf adc_0.2.0_linux_amd64.tar.gz
mv adc /usr/local/bin/adc
他のオペレーティングシステム用のバイナリは、リリースページで見つけることができます。将来的には、これらのバイナリはHomebrewなどのパッケージマネージャーで公開される予定です。
adc
がインストールされているか確認するには、次のコマンドを実行します:
adc --help
すべてが正常であれば、利用可能なサブコマンドとその使用方法のリストが表示されます。
APISIXインスタンスでのADCの設定
デプロイされたAPISIXインスタンスでADCを動作させるために、次のコマンドを実行します:
adc configure
これにより、APISIXサーバーのアドレス('http://127.0.0.1:9180')とトークンを入力するように促されます。
すべてが正しければ、以下のようなメッセージが表示されます:
ADC configured successfully!
Connected to APISIX successfully!
APISIXとの接続を確認するために、いつでもping
サブコマンドを使用できます:
adc ping
APISIX設定ファイルの検証
トラフィックをアップストリームに転送するルートを含む基本的なAPISIX設定を作成しましょう:
name: "Basic configuration"
version: "1.0.0"
services:
- name: httpbin-service
hosts:
- api7.ai
upstream:
name: httpbin
nodes:
- host: httpbin.org
port: 80
weight: 1
routes:
- name: httpbin-route
service_id: httpbin-service
uri: "/anything"
methods:
- GET
ADCが実行中のAPISIXインスタンスに接続されたら、設定を適用する前にこれを検証するために次のコマンドを実行できます:
adc validate -f config.yaml
設定が有効であれば、次のような応答が返されます:
Read configuration file successfully: config name: Basic configuration, version: 1.0.0, routes: 1, services: 1.
Successfully validated configuration file!
APISIXインスタンスへの設定の同期
有効な設定を接続されたAPISIXインスタンスと同期するために、ADCを使用できます。これを行うには、次のコマンドを実行します:
adc sync -f config.yaml
これにより、設定ファイルで宣言した通りにルートとサービスが作成されます:
creating service: "httpbin-service"
creating route: "httpbin-route"
Summary: created 2, updated 0, deleted 0
ルートが正しく作成されたか確認するために、リクエストを送信してみましょう:
curl localhost:9080/anything -H "host:api7.ai"
すべてが正しければ、httpbin.orgからの応答が返されます。
ローカルと実行中の設定の比較
次に、config.yaml
ファイルのローカル設定を更新して、別のルートを追加します:
name: "Basic configuration"
version: "1.0.0"
services:
- name: httpbin-service
hosts:
- api7.ai
upstream:
name: httpbin
nodes:
- host: httpbin.org
port: 80
weight: 1
routes:
- name: httpbin-route-anything
service_id: httpbin-service
uri: "/anything"
methods:
- GET
- name: httpbin-route-ip
service_id: httpbin-service
uri: "/ip"
methods:
- GET
この設定をAPISIXと同期する前に、ADCを使用して既存のAPISIX設定との違いを確認できます。これを行うには、次のコマンドを実行します:
adc diff -f config.yaml
設定の追加や削除を確認し、適用する前に何が変更されたかを理解できます。
OpenAPI定義からAPISIX設定への変換
ADCは、OpenAPI定義を扱う基本的なサポートも提供しています。ADCを使用して、OpenAPI形式の定義をAPISIX設定に変換できます。
例えば、以下のようにOpenAPI形式でAPIをドキュメント化している場合:
openapi: 3.0.0
info:
title: httpbin API
description: Routes for httpbin API
version: 1.0.0
servers:
- url: http://httpbin.org
paths:
/anything:
get:
tags:
- default
summary: Returns anything that is passed in the request data
operationId: getAnything
parameters:
- name: host
in: header
schema:
type: string
example: "{{host}}"
responses:
"200":
description: Successfully return anything
content:
application/json: {}
/ip:
get:
tags:
- default
summary: Returns the IP address of the requester
operationId: getIP
responses:
"200":
description: Successfully return IP
content:
application/json: {}
openapi2apisix
サブコマンドを使用して、これをAPISIX設定に変換できます:
adc openapi2apisix -o config.yaml -f openAPI.yaml
これにより、以下のような設定ファイルが作成されます:
name: ""
routes:
- desc: Returns anything that is passed in the request data
id: ""
methods:
- GET
name: getAnything
uris:
- /anything
- desc: Returns the IP address of the requester
id: ""
methods:
- GET
name: getIP
uris:
- /ip
services:
- desc: Routes for httpbin API
id: ""
name: httpbin API
upstream:
id: ""
name: ""
nodes: null
version: ""
ご覧の通り、設定は不完全で、まだ多くの設定を手動で追加する必要があります。ADCを改善して、OpenAPI定義とAPISIX設定に直接マッピングできるものとの間のギャップを埋めることを目指しています。
ヒント:オートコンプリートの使用
ADCでは多くのことができ、機能のリストは増え続けています。サブコマンドの使用方法を学ぶには、--help
または-h
フラグを使用できます。これにより、サブコマンドのドキュメントが表示されます。
さらに簡単にするために、completion
サブコマンドを使用してシェル環境のオートコンプリートスクリプトを生成できます。例えば、zshシェルを使用している場合、次のコマンドを実行します:
adc completion zsh
その後、出力を.zshrc
ファイルにコピー&ペーストすると、adc
を使用する際にヒントが表示されるようになります。
ADCはまだ初期段階にあり、継続的に改善されています。プロジェクトについて詳しく知りたい、バグを報告したい、または機能を提案したい場合は、github.com/api7/adcを訪れてください。