ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

ニフクラ SDK for Go のご紹介

こんにちは、ニフクラエンジニアの b:id:nifcloud-developers です。
先日公開されたニフクラ SDK for Goについて、簡単にご紹介いたします。

f:id:nifcloud-developers:20200923181113p:plain:w300:h300

ニフクラ SDK for Go とは?

ニフクラ SDK for Go は、Goからニフクラ API を実行するための SDK です。
下記のような特徴があります。

  • ニフクラの複数サービスに対応 (Computing / RDB / NAS / Script/Hatoba(β))
  • AWS SDK JSON 互換によるデータ駆動の仕組みを採用

上記について詳しく見ていきましょう。

ニフクラの複数サービスに対応

ニフクラ SDK for Goはニフクラの複数サービスの全 API (2020/09/30 時点) に対応しています。 現在対応しているサービスは下記の通りです。

  • ニフクラ Computing (サーバー・FW 等の操作 全 224 API)
  • ニフクラ RDB (DB サーバー等の操作 全 43 API)
  • ニフクラ NAS (NFS / CIFS 等の操作 全 13 API)
  • ニフクラ スクリプト (スクリプト実行 全 1 API)
  • ニフクラ Hatoba(β) (Kubernetesクラスター等の操作 全 29API)

これを使用することで、たとえば下記のように 1 つのライブラリで複数サービスを操作するようなプログラムを書くことが可能です。

package main

import (
        "context"
        "fmt"
        "os"

        "github.com/nifcloud/nifcloud-sdk-go/nifcloud"
        "github.com/nifcloud/nifcloud-sdk-go/service/computing"
        "github.com/nifcloud/nifcloud-sdk-go/service/hatoba"
        "github.com/nifcloud/nifcloud-sdk-go/service/nas"
        "github.com/nifcloud/nifcloud-sdk-go/service/rdb"
        "github.com/nifcloud/nifcloud-sdk-go/service/script"
)

func main() {
        ctx := context.Background()
        cfg := nifcloud.NewConfig(
                os.Getenv("NIFCLOUD_ACCESS_KEY_ID"),
                os.Getenv("NIFCLOUD_SECRET_ACCESS_KEY"),
                "jp-east-1",
        )

        fmt.Println("########## Computing DescribeInstances の実行")
        computingResp, _ := computing.New(cfg).DescribeInstancesRequest(nil).Send(ctx)
        fmt.Println(computingResp)

        fmt.Println("########## RDB DescribeDBSecurityGroups の実行")
        rdbResp, _ := rdb.New(cfg).DescribeDBSecurityGroupsRequest(nil).Send(ctx)
        fmt.Println(rdbResp)

        fmt.Println("########## NAS DescribeNASInstances の実行")
        nasResp, _ := nas.New(cfg).DescribeNASInstancesRequest(nil).Send(ctx)
        fmt.Println(nasResp)

        fmt.Println("########## Script ExecuteScript の実行")
        scriptResp, _ := script.New(cfg).ExecuteScriptRequest(&script.ExecuteScriptInput{
                ScriptIdentifier: nifcloud.String("test.js"),
                Method:           nifcloud.String("GET")},
        ).Send(ctx)
        fmt.Println(scriptResp)

        fmt.Println("########## Hatoba(β) ListClusters の実行")
        hatobaResp, _ := hatoba.New(cfg).ListClustersRequest(nil).Send(ctx)
        fmt.Println(hatobaResp)
}

また、上記スクリプトの実行方法についてはGitHub の README
詳しいドキュメントについてはこちらをそれぞれご参照ください。

AWS SDK JSON 互換によるデータ駆動の仕組み

ニフクラ SDK for Go は、AWS の各プログラミング言語 のSDK がサポートしているデータ駆動の仕組みに沿った形で作成されています。
たとえば AWS SDK for Go には下記のように API リクエスト用の各種 JSON が同梱されていますが、

上記と同様の JSON を独自に用意し、Goのコードを生成することでニフクラの API を実行することが可能になっています。

これにより、メンテナンスコストを最小限に抑え、SDK が API 自体のバージョンアップに迅速に対応していけると考えています。
同じ仕組みでニフクラ SDK for Python (Developer Preview) も作成されています。

まとめ

Go からニフクラ複数サービスの API を実行可能な、ニフクラ SDK for Go について簡単にご紹介しました。

今後は SDK 自体の品質を高めつつ、ニフクラ SDK for Goを利用してニフクラの操作を自動化するソフトウェア等を開発していきたいと思います。

ご興味を持たれた方は、ぜひ一度 ニフクラ SDK for Go をお試しください! そして、GitHub の issue 等でフィードバックをいただけると非常にうれしいです。

GitHub: https://github.com/nifcloud/nifcloud-sdk-go