CloudFlare API で D1 の出力[GO]
はじめに
Cloudflare D1 DBのデータをエクスポートする際の注意点をまとめます。
詳しくはこれを参照すること。
リファレンスのサンプルコード
ちょっとだけ弄ってあります。
ほんもののキーっぽいのは、CloudFlareのサンプルに乗ってるやつです。
package main
import (
"context"
"fmt"
"github.com/cloudflare/cloudflare-go/v6"
"github.com/cloudflare/cloudflare-go/v6/d1"
"github.com/cloudflare/cloudflare-go/v6/option"
)
func main() {
client := cloudflare.NewClient(
// APIキー
option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
)
response, err := client.D1.Database.Export(
context.TODO(),
// データベースID
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
d1.DatabaseExportParams{
// アカウントID
AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
OutputFormat: cloudflare.F(d1.DatabaseExportParamsOutputFormatPolling),
},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.AtBookmark)
}
解説
まず、Golangを利用しているので、importから。
Cloudflare Go API Libraryと比較すると、apiライブラリのimportのurlのパスに、なぜかv6の文字がないものの、かけてると動かないので、上のコードのように加えてください。
つづいて、注釈したように、各種のIDの類を入れてください。
エクスポートしたいデータベースのページをCloudflareのダッシュボードで開くと、
https://dash.cloudflare.com/<アカウントID>/workers/d1/databases/<データベースID>/metrics
のようになっているのでこれらを指定してください。
Cloudflareのダッシュボードで左のメニューから、アカウントの管理/アカウントAPIトークンを開いて、Cloudflare D1の書き込み権限を持つトークンを制作します。(なぜ読み込みだとだめなのかは謎)
生成したトークンは一度しか表示されないため、しっかりと(他の人に見えないように)メモしてください。
さいごに、Pollingをします。
CloudFlare側にファイルが完成したか定期的に聞いて、完成したらレスポンスにファイルのURLが得られる方式なので、もう何度かリクエストを送らねばなりません。
レスポンスのAtBookmarkがブックマークになっているので、これを使用してリクエストします。このように指定して繰り返しリクエストしてください。なお、ブックマークは変動しません。
d1.DatabaseExportParams{
AccountID: cloudflare.F(account),
CurrentBookmark: cloudflare.F(<ブクマ>),
OutputFormat: cloudflare.F(d1.DatabaseExportParamsOutputFormatPolling),
},
.Statusがcompleteだったら.Resultと中身のSignedURLが読み込める的な感じだと思われる。
というわけで、完成形はこんなかんじなはず。
Discussion