旧バージョンのドキュメントを参照しています。 最新のドキュメントはこちらをご参照ください。
Goでプラグインを書く
Goプラグインの開発
Kong Gatewayは、Kong GatewayにGoバインディングを提供するライブラリ、Go PDKでGo言語をサポートします。
概要
GoでKong Gatewayプラグインを書くには、以下を行います。
- 構成を保持する
structure
タイプを定義します。 - 構造のインスタンスを作成する
New()
関数を書き込みます。 - その構造にフェーズを処理するメソッドを追加します。
-
go-pdk/server
サブライブラリを含めます。 -
server.StartServer(New, Version, Priority)
を呼び出すmain()
関数を追加します。 -
go build
で実行可能ファイルとしてコンパイルします。
注 :プラグインの例については、Go PDKリポジトリを参照してください。
構成
Struct
作成するプラグインには、データストアまたはAdmin APIから受信した設定データを処理する方法が必要です。受信データのスキーマを作成するには、struct
を使用します。
type MyConfig struct {
Path string
Reopen bool
}
このプラグインは設定データを処理するため、encoding/json
パッケージを使ってエンコーディングを制御したいと思うでしょう。
大文字で始まる Go フィールドはエクスポートでき、 encoding/json
パッケージを含む現在のパッケージの外部からアクセスできるようになります。
データストア内のフィールドに別の名前を付けたい場合は、struct
のフィールドにタグを追加してください。
type MyConfig struct {
Path string `json:"my_file_path"`
Reopen bool `json:"reopen"`
}
New()
コンストラクタ
プラグインはNew
という関数で定義する必要があります。この関数は、 MyConfig
構造体をインスタンス化し、それをinterface
として返す必要があります。
func New() interface{} {
return &MyConfig{}
}
main()
関数
各プラグインはスタンドアロンの実行可能ファイルとしてコンパイルされます。github.com/Kong/go-pdk
をインポート
リストに含め、main()
関数を追加します。
func main () {
server.StartServer(New, Version, Priority)
}
実行可能ファイルはパスのどこかに配置することができます(たとえば、/usr/local/bin
)。共通の-h
フラグは使用方法のヘルプメッセージを表示します。
my-plugin -h
出力:
Usage of my-plugin:
-dump
Dump info about plugins
-help
Show usage info
-kong-prefix string
Kong prefix path (specified by the -p argument commonly used in the Kong CLI) (default "/usr/local/kong")
引数なしでプラグインを実行すると、kong-prefix
の中にソケットファイルと実行ファイルの名前が作成され、末尾に.socket
が追加されます。たとえば、実行ファイルがmy-plugin
の場合、ソケットファイルは/usr/local/kong/my-plugin.socket
です。
フェーズハンドラ
Kong Gateway Luaプラグインでは、リクエスト処理ライフサイクルのさまざまなポイントで実行されるカスタムロジックを実装できます。たとえば、アクセスフェーズでカスタムGoコードを実行するには、次の関数シグネチャを持つAccess
という名前の関数を作成します。
func (conf *MyConfig) Access (kong *pdk.PDK) {
...
}
同じ関数シグネチャを使用して、以下のフェーズでカスタムロジックを実装できます。
Certificate
Rewrite
Access
Response
Preread
Log
Response
ハンドラが存在すると、プロキシでのバッファリングモードが自動的に有効になります。
バージョンと優先度
プラグインコード内で次の定数を宣言することで、バージョン番号と実行の優先順位を定義できます。
const Version = "1.0.0"
const Priority = 1
Kong Gatewayは、優先順位の高いものから低いものへとプラグインを実行します。
構成例
kong.conf
構成ファイルを使用してプラグインを読み込むには、既存のKong Gatewayプロパティをプラグインの側面にマッピングする必要があります。kong.conf
内でプラグインを読み込む2つの例を以下に示します。
pluginserver_names = my-plugin,other-one
pluginserver_my_plugin_socket = /usr/local/kong/my-plugin.socket
pluginserver_my_plugin_start_cmd = /usr/local/bin/my-plugin
pluginserver_my_plugin_query_cmd = /usr/local/bin/my-plugin -dump
pluginserver_other_one_socket = /usr/local/kong/other-one.socket
pluginserver_other_one_start_cmd = /usr/local/bin/other-one
pluginserver_other_one_query_cmd = /usr/local/bin/other-one -dump
ソケットと開始コマンドの設定はデフォルトと一致しているため省略できます。
pluginserver_names = my-plugin,other-one
pluginserver_my_plugin_query_cmd = /usr/local/bin/my-plugin -dump
pluginserver_other_one_query_cmd = /usr/local/bin/other-one -dump