こんにちは、GMOインターネット株式会社の斉藤です。
今回はgophercloudでConoHa APIを利用する方法について書いていきたいと思います。
目次
はじめに
このブログで、以前に私が作成した以下のツールをご紹介しました。これらのツールでは内部でgophercloudというライブラリを利用しています。これはGo言語からOpenStackのAPIに接続するためのライブラリです。
gophercloud/gophercloud: Gophercloud: an OpenStack SDK for Go
https://github.com/gophercloud/gophercloud
このライブラリはちょうどGoが登場したくらいの年に開発が始まり、Rackspace社によってメンテナンスがされていました。Rackspaceは元々OpenStackをベースとしたパブリック/プライベートクラウドサービスを提供していた会社で、ConoHaと同様OpenStackをベースとしたパブリッククラウドを提供している数少ない会社でした。そしてgophercloudのGitHubリポジトリも同社のアカウントの配下にあった記憶があります。
ただ残念ながらRackspaceは経営状況が芳しくなく、株式の非公開化や買収などを経て現在はRackspace Technologyに名前を変えており、サービス内容もAWS等を含めたマルチクラウドベンダーのような形を取っています。私も最近は追っていなかったのですが、報道を見る限り再上場などの明るい話もあるようで、少し懐かしくうれしい気分になりました(記事の内容は必ずしもポジティブではないですが、、)
それはともかく、そういった経緯もあってか現在gophercloudは独立した形でメンテナンスが継続されています。
gophercloudを使ってみよう
ConoHa APIのリファレンスも合わせてご覧ください。
ConoHa APIを使う順番として、まずIdentity APIで認証を行い、その後各サービスのAPI(ComputeやBlockStorageやNetworkなど)を呼ぶことになります。gophercloudはこのあたりを抽象化してくれるので非常に簡単です。
package main
import (
    "github.com/rackspace/gophercloud"
    "github.com/rackspace/gophercloud/openstack"
)
func main() {
    // APIの認証情報を設定する
    opts := gophercloud.AuthOptions{
        IdentityEndpoint: "https://identity.tyo1.conoha.io/v2.0",
        Username:         "gncu********",
        TenantName:       "gnct********",
        Password:         "************",
    }
    // AuthenticatedClient() は内部で認証を行い、
    // 各サービス(Compute, Network, Storageなど)の
    // 接続に使われるクライアントを返します。
    client, err := openstack.AuthenticatedClient(opts)
    if err != nil {
        panic(err)
    }
    // このclientは内部に token を保持しています。
    println(client.TokenID)
}例としてCompute APIを呼んでみます。サーバー一覧を表示するサンプルは以下のようになります。
 // 今回は例としてCompute APIを使います。
    // gophercloudでは各サービスへのAPIアクセスをProvider構造体に抽象化されていて、
    // openstackパッケージにあるNewComputeV2()を呼ぶと、
    // Compute APIへアクセスする情報がセットされたクライアントが返ってきます。
    eo := gophercloud.EndpointOpts{
        Type:   "compute",
        Region: "tyo1",
    }
    compute, err := openstack.NewComputeV2(client, eo)
    if err != nil {
        panic(err)
    }
    // Compute APIの各機能は
    // github.com/rackspace/gophercloud/openstack/compute/v2/servers
    // パッケージにあります。
    // 各機能を実行するにはクライアント(compute)を渡す必要があります。
    listOpts := servers.ListOpts{}
    pager := servers.List(compute, listOpts)
    pager.EachPage(func(page pagination.Page) (bool, error) {
        serverList, err := servers.ExtractServers(page)
        if err != nil {
            return false, err
        }
        for _, server := range serverList {
            fmt.Printf("%v\n", server)
        }
        return true, nil
    })もう1つの例としてVPSを作成してみましょう。servers.CreateOpts構造体にパラメータを埋めてCreate()を叩くだけでとても簡単です。
    // VPSを作成するような複雑なリクエストもとても簡単です。
    // ただ、gophercloudはConoHa独自のパラメータに対応していません。
    // たとえば管理者パスワードを設定する"adminPass"や、
    // SSHの公開鍵を指定する"key_name"などです。
    //
    // これらを指定する場合はuser_dataを使うことになります。
    // https://www.conoha.jp/guide/startupscript.php
    copts := servers.CreateOpts{
        Name:      "gophercloud-test",
        ImageRef:  "b9e54c41-cda9-4d84-8248-808bfaf6c793",
        FlavorRef: "7eea7469-0d85-4f82-8050-6ae742394681",
        SecurityGroups: []string{
            "default",
            "gncs-ipv4-all",
            "gncs-ipv6-all",
        },
        Metadata: map[string]string{
            "instance_name_tag": "gophercloud-test",
        },
    }
    r := servers.Create(compute, copts)
    if r.Err != nil {
        panic(r.Err)
    }上記のスクリプトは抜粋で、全文はGistにあります。また、私が作ったconoha-netでは同じ要領でNetwork APIを実行しているので、こちらも参考になるかと思います。
参考:https://github.com/hironobu-s/conoha-net/blob/master/conoha/network.go
gophercloudを使うと、ConoHa APIを使った開発がとても簡単になることがわかりましたね。
それではまた次回お目にかかりましょう。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
- 
                  技術情報(515)
- 
                  イベント(193)
- 
                  カルチャー(49)
- 
                  デザイン(47)
TAG
- "eVTOL"
- "Japan Drone"
- "ロボティクス"
- "空飛ぶクルマ"
- 5G
- Adam byGMO
- AGI
- AI
- AI人財
- APT攻撃
- AWX
- BIT VALLEY
- Blade
- blockchain
- Canva
- ChatGPT
- ChatGPT Team
- Claude Team
- cloudflare
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEGYM Academy
- ConoHa
- ConoHa、Dify
- CS
- CSS
- CTF
- DC
- design
- Designship
- Desiner
- DeveloperExper
- DeveloperExpert
- DevRel
- DevSecOpsThon
- DiceCTF
- Dify
- DNS
- Docker
- DTF
- Expert
- Felo
- GitLab
- GMO AIR
- GMO AIロボティクス大会議&表彰式
- GMO DESIGN AWARD
- GMO Developers Day
- GMO Developers Night
- GMO Developers ブログ
- GMO Flatt Security
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOインターネット
- GMOインターネットグループ
- GMOクラウド]
- GMOグローバルサイン
- GMOサイバーセキュリティbyイエラエ
- GMOサイバーセキュリティ大会議
- GMOサイバーセキュリティ大会議&表彰式
- GMOソリューションパートナー
- GMOデジキッズ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOメディア
- GMOリサーチ
- GMO大会議
- Go
- GPU
- GPUクラウド
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kaigi on Rails
- Kids VALLEY
- KidsVALLEY
- LLM
- MCP
- MetaMask
- MySQL
- NFT
- NVIDIA
- NW構成図
- NW設定
- Ollama
- OpenStack
- Perl
- perplexity
- PHP
- PHPcon
- PHPerKaigi
- PHPカンファレンス
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- Slack
- Slack活用
- Spectrum Tokyo Meetup
- splunk
- SRE
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- vibe
- VLAN
- VS Code
- Webアプリケーション
- WEBディレクター
- XSS
- アドベントカレンダー
- イベントレポート
- インターンシップ
- インハウス
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- クリエイター
- クリエイティブ
- コーディング
- コンテナ
- サイバーセキュリティ
- システム研修
- スクラム
- スペシャリスト
- セキュリティ
- ソフトウェアテスト
- チームビルディング
- デザイン
- ドローン
- ネットのセキュリティもGMO
- ネットワーク
- ビジネス職
- ヒューマノイド
- ヒューマノイドロボット
- プログラミング教育
- ブロックチェーン
- ベイズ統計学
- マルチプレイ
- ミドルウェア
- モバイル
- ゆめみらいワーク
- リモートワーク
- レンタルサーバー
- ロボット
- 京大ミートアップ
- 人材派遣
- 出展レポート
- 動画
- 協賛レポート
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 展示会
- 応用
- 技育プロジェクト
- 技術広報
- 採用
- 採用サイトリニューアル
- 採用活動
- 新卒
- 新卒研修
- 日本科学未来館
- 映像
- 映像クリエイター
- 暗号
- 業務効率化
- 業務時間削減
- 機械学習
- 決済
- 物理暗号
- 生成AI
- 視覚暗号
- 開発生産性
- 開発生産性向上
- 階層ベイズ
- 高機能暗号
PICKUP
 
             
                       
                       
                                 
                                 
                                 
                                 
                                 
                                 
               
                                         
                                         
                                         
                                        