このページは、まだ日本語ではご利用いただけません。翻訳中です。
Get started with Datakit
この機能はtech preview(アルファ品質)としてリリースされており、本番環境では依存すべきではありません。
Enable the WASM engine
In kong.conf
, set:
Or export the setting via an environment variable:
Reload or start Kong Gateway to apply the configuration.
Create a service and a route
Add the following configuration to a kong.yaml
file:
_format_version: "3.0"
services:
- url: http://127.0.0.1:8001/
name: my-service
routes:
- name: my-route
paths:
- /
strip_path: true
- Create a service:
curl -i -X POST http://localhost:8001/services \
--data "name=my-service" \
--data "url=http://127.0.0.1:8001/"
- Create a route:
curl -i -X POST http://localhost:8001/services/my-service/routes \
--data "name=my-route" \
--data "paths[]=/" \
--data "strip_path=true"
Enable Datakit
Let’s test out Datakit by combining responses from two third party API calls, then returning directly to the client.
In the following example, replace SERVICE_NAME|ID
with my-service
, or with your own service name:
Kong Admin API
Konnect API
Kubernetes
Declarative (YAML)
Konnect Terraform
次のリクエストを行います。
curl -X POST http://localhost:8001/services/{serviceName|Id}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "datakit",
"config": {
"debug": true,
"nodes": [
{
"name": "CAT_FACT",
"type": "call",
"url": "https://catfact.ninja/fact"
},
{
"name": "DOG_FACT",
"type": "call",
"url": "https://dogapi.dog/api/v1/facts"
},
{
"name": "JOIN",
"type": "jq",
"inputs": [
{
"cat": "CAT_FACT.body"
},
{
"dog": "DOG_FACT.body"
}
],
"jq": "{\n \"cat_fact\": $cat.fact,\n \"dog_fact\": $dog.facts[0]\n}\n"
},
{
"name": "EXIT",
"type": "exit",
"inputs": [
{
"body": "JOIN"
}
],
"status": 200
}
]
}
}
'
SERVICE_NAME |
IDを、このプラグイン構成の対象となるサービスの idまたはnameに置き換えてください。 |
独自のアクセストークン、リージョン、コントロールプレーンID、サービスIDを代入して、次のリクエストを行ってください。
curl -X POST \
https://{us|eu}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/services/{serviceId}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer TOKEN" \
--data '{"name":"datakit","config":{"debug":true,"nodes":[{"name":"CAT_FACT","type":"call","url":"https://catfact.ninja/fact"},{"name":"DOG_FACT","type":"call","url":"https://dogapi.dog/api/v1/facts"},{"name":"JOIN","type":"jq","inputs":[{"cat":"CAT_FACT.body"},{"dog":"DOG_FACT.body"}],"jq":"{\n \"cat_fact\": $cat.fact,\n \"dog_fact\": $dog.facts[0]\n}\n"},{"name":"EXIT","type":"exit","inputs":[{"body":"JOIN"}],"status":200}]}}'
地域固有のURLと個人アクセストークンの詳細については、 Konnect API referenceをご参照ください。
まず、KongPlugin
リソースを作成します:
echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: datakit-example
plugin: datakit
config:
debug: true
nodes:
- name: CAT_FACT
type: call
url: https://catfact.ninja/fact
- name: DOG_FACT
type: call
url: https://dogapi.dog/api/v1/facts
- name: JOIN
type: jq
inputs:
- cat: CAT_FACT.body
- dog: DOG_FACT.body
jq: |
{
"cat_fact": $cat.fact,
"dog_fact": $dog.facts[0]
}
- name: EXIT
type: exit
inputs:
- body: JOIN
status: 200
" | kubectl apply -f -
次に、次のようにserviceに注釈を付けて、KongPluginリソースをイングレスに適用します。
kubectl annotate service SERVICE_NAME konghq.com/plugins=datakit-example
SERVICE_NAMEを、このプラグイン構成が対象とするサービスの名前に置き換えます。
kubectl get serviceを実行すると、利用可能なイングレスを確認できます。
注:
KongPluginリソースは一度だけ定義するだけで、ネームスペース内の任意のサービス、コンシューマー、またはルートに適用できます。プラグインをクラスター全体で利用可能にしたい場合は、KongPlugin
の代わりにKongClusterPlugin
としてリソースを作成してください。
このセクションを宣言型構成ファイルに追加します。
plugins:
- name: datakit
service: SERVICE_NAME|ID
config:
debug: true
nodes:
- name: CAT_FACT
type: call
url: https://catfact.ninja/fact
- name: DOG_FACT
type: call
url: https://dogapi.dog/api/v1/facts
- name: JOIN
type: jq
inputs:
- cat: CAT_FACT.body
- dog: DOG_FACT.body
jq: |
{
"cat_fact": $cat.fact,
"dog_fact": $dog.facts[0]
}
- name: EXIT
type: exit
inputs:
- body: JOIN
status: 200
SERVICE_NAME |
IDを、このプラグイン構成の対象となるサービスの idまたはnameに置き換えてください。 |
前提条件: パーソナルアクセストークンの設定
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "kpat_YOUR_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Kong Konnectゲートウェイプラグインを作成するには、Terraform 構成に以下を追加します。
resource "konnect_gateway_plugin_datakit" "my_datakit" {
enabled = true
config = {
debug = true
nodes = [
{
name = "CAT_FACT"
type = "call"
url = "https://catfact.ninja/fact"
},
{
name = "DOG_FACT"
type = "call"
url = "https://dogapi.dog/api/v1/facts"
},
{
name = "JOIN"
type = "jq"
inputs = [
{
cat = "CAT_FACT.body"
},
{
dog = "DOG_FACT.body"
} ]
jq = <<EOF
{
"cat_fact": $cat.fact,
"dog_fact": $dog.facts[0]
}
EOF
},
{
name = "EXIT"
type = "exit"
inputs = [
{
body = "JOIN"
} ]
status = 200
} ]
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
service = {
id = konnect_gateway_service.my_service.id
}
}
Validate
Access the service via the route my-route
to test Datakit:
curl http://locahost:8000/my-route
You should get a 200
response with a random fact from each fact generator called in the config:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 432
Content-Type: application/json
Date: Fri, 06 Dec 2024 18:26:48 GMT
Server: kong/3.9.0.0-enterprise-edition
Via: 1.1 kong/3.9.0.0-enterprise-edition
X-Kong-Proxy-Latency: 744
X-Kong-Request-Id: 878618103ee7137b7c2f914e107cb454
X-Kong-Upstream-Latency: 742
{
"cat_fact": "The longest living cat on record according to the Guinness Book belongs to the late Creme Puff of Austin, Texas who lived to the ripe old age of 38 years and 3 days!",
"dog_fact": "Greyhounds can reach a speed of up to 45 miles per hour."
}