Contents
カスタムプラグイン開発の概要と目的
Kong Gatewayは、既存プラグインが不足する場合でもカスタムロジックでAPI制御を拡張可能です。これはAPI開発者やDevOpsエンジニアにとって必須スキルです。
本記事で学べる内容
- Dockerを使用したローカル環境の構築方法
- Go言語でのカスタムプラグイン実装テンプレート
- Upstream APIとの通信を含むコード例
- Kong Gatewayへの導入およびリロード手順
対象読者層
本記事は、Kong Gatewayを運用している技術担当者を対象としています。既存機能に加えて独自のAPI制御を実装したい方にも役立ちます。
Dockerベースのローカル環境構築手順
Kong Gatewayの開発には、Dockerを使用したローカル環境が推奨されます。以下は公式イメージに基づく構築手順です。
環境構築ステップ
-
Docker Engineをインストールし、Kong Gatewayコンテナを起動します:
bash
docker run -d --name kong-gateway \
--publish 8000:8000 --publish 8001:8001 \
kong/kong-gateway:latest -
初期設定確認のためにcurlコマンドでアクセスします:
bash
curl -i http://localhost:8001
Upstream APIの準備方法
ローカルテスト用にGo言語で仮想APIを起動する例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "fmt" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Upstream API") } func main() { http.HandleFunc("/", hello) http.ListenAndServe(":8080", nil) } |
Go言語でのプラグイン実装テンプレート
カスタムプラグインはGoで開発します。公式リポジトリを参考にプロジェクト構成を行います。
プロジェクトの構築手順
-
GitHubの公式サンプルをクローンし、フォルダを作成します:
bash
git clone https://github.com/Kong/kong-plugin-sample.git my-custom-plugin
cd my-custom-plugin -
go.modファイルを生成し、依存関係を設定します。
基本的な構造とライフサイクルメソッド
カスタムプラグインのテンプレートは以下の通りです:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "github.com/Kong/kong-gateway" ) type MyPlugin struct { // プラグイン内部状態を管理するフィールド } func NewPlugin() kong.Plugin { return &MyPlugin{} } func (p *MyPlugin) AccessHandler(conf map[string]interface{}) error { // リクエスト処理ロジックを実装 return nil } |
Upstream APIとの通信処理の実装方法
プラグイン内からUpstream APIにアクセスする際は、net/httpや外部ライブラリを使用します。
HTTPクライアントの利用例
以下のようにHTTPクライアントを実装できます:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import ( "fmt" "io/ioutil" "net/http" ) func callUpstreamAPI() ([]byte, error) { resp, err := http.Get("http://localhost:8080") if err != nil { return nil, err } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) return body, nil } |
必要な処理の補足
実際には、以下の要素が必要です:
- 認証情報(APIキー等)の処理
- リクエスト・レスポンスのヘッダー加工
- タイムアウト設定やリトライロジック
Kong Gatewayへの導入手順
カスタムプラグインをKong Gatewayに導入するには、以下のように手順を実行します。
ビルドと配置プロセス
-
Goでビルドし、バイナリを作成します(Linux環境向け):
bash
GOOS=linux GOARCH=amd64 go build -buildmode=plugin -o myplugin.so -
kong.confにプラグインを登録します。
kong.confでの有効化設定
以下のようにpluginsセクションで指定します:
|
1 2 |
plugins = bundled,myplugin |
リロードによる変更反映
変更を即時反映させるには以下のコマンドを使用します:
|
1 2 |
curl -i http://localhost:8001/reload |
公式ドキュメントとコミュニティプラグインの比較分析
カスタムプラグイン開発では、公式リファレンスとコミュニティプラグインをバランスよく利用することが重要です。
開発アプローチの違い
| 項目 | 公式リファレンス | コミュニティプラグイン |
|---|---|---|
| 信頼性 | 実装がしっかりしている | 多様で、一部は非公式 |
| 拡張性 | 基本的な機能をカバー | 複雑なロジックにも対応 |
注意点と信頼性向上方法
- 公式ドキュメントに基づいた開発は、長期的な保守やセキュリティに有利です。
- コミュニティプラグインは、独自のユースケースに適したアプローチを提供しますが、検証が必要です。
装飾と情報整理ルールの適用例
テーブルの使用例
|
1 2 3 4 5 6 7 8 |
以下に、導入手順で必要なコマンドの一覧を示します。 | ステップ | コマンド | 説明 | |---------|----------|------| | 1 | `docker run ...` | Kong Gatewayコンテナ起動 | | 2 | `go build -buildmode=plugin -o myplugin.so` | カスタムプラグインのビルド | | 3 | `curl http://localhost:8001/reload` | 設定変更の反映 | |
まとめ
本記事では、Kong Gatewayカスタムプラグイン開発の全工程を解説しました。導入から実装までを具体的に述べ、技術的な信頼性を高めるためのステップも含めました。
- Docker環境構築とローカルテスト手順
- Go言語による実装テンプレートとライフサイクルメソッド
- Upstream APIとの通信処理例
- カスタムプラグインのKong Gatewayへの導入・リロード
これらの知識を活用して、独自のAPI制御ロジックを実装してください。