こんにちは、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
-
技術情報(608)
-
イベント(242)
-
カルチャー(61)
-
デザイン(78)
TAG
- 5G
- Active Directory
- AI
- AI for DevOps
- AI TALK
- AI 機械学習強化学習
- AI/機械学習
- AIO
- AIエージェント
- AIコーディング
- AIコーディングエージェント
- AIセキュリティ
- AI人財
- AI教育
- AI活用
- AI研究
- AI駆動
- Behind the Scenes
- BIT VALLEY
- blockchain
- ChatGPT
- ChatGPT Team
- Claude Code
- Claude Team
- cloudflare
- cloudnative
- CNDO
- CNDT
- CODE BLUE
- ConoHa
- ConoHa VPS
- ConoHa VPS MCP
- CSS
- CTF
- DEF CON
- DEF CON 34
- Designship
- developer
- DevRel
- DevSecOpsThon
- Docker
- DTF
- EDR
- Engineering Journey
- expert
- EXPERT CROSS
- GMO AI&ロボティクス商事
- GMO AIR
- GMO DESIGN AWARD
- GMO Developers Day
- GMO Developers Night
- GMO Flatt Security
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOインターネット
- GMOインターネットグループ
- GMOインターネットグループ陸上部
- GMOグローバルサイン
- GMOコネクト
- GMOサイバーセキュリティ byイエラエ
- GMOサイバーセキュリティbyイエラエ
- GMOデジキッズ
- GMOヒューマノイド・ラボ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOメイクショップ
- GMOメディア
- GMOロボッツ
- GMO大会議
- GMO天秤AI
- Go
- GPUクラウド
- GTB
- Hack-1グランプリ
- IETF
- iOS
- IoT
- ISUCON
- Japan Drone
- JapanDrone
- Java
- JJUG
- JSAI2026
- K8s
- Kaigi on Rails
- Kerberos
- Kids VALLEY
- LLM
- LLMO
- MCP
- MetaMask
- MySQL
- NFT
- OpenStack
- OSS
- Perl
- PHP
- PHPcon
- PHPerKaigi
- Python
- QUIC
- RFC
- RPA
- Ruby
- SECCON
- Selenium
- Spectrum Tokyo Meetup
- splunk
- SRE
- Takumi byGMO
- Terraform
- TypeScript
- UI/UX
- vibe
- VLA
- VPN
- VPS
- VS Code
- WebRTC
- Webアプリケーション開発
- XR
- XSS
- Yoitoi Summit
- ZTNA
- アウトプット
- アドベントカレンダー
- イベントレポート
- インターンシップ
- インハウス
- インフラ
- エキスパート制度
- エキスパート座談会
- エンジニア採用
- エンジニア文化
- お名前.com
- クラウド
- クリエイターインタビュー
- クリエイティブ
- コーディングエージェント
- コンテナ
- コンピュータビジョン
- サイバーセキュリティ
- サマーインターン
- スクラム
- スパム対策
- スペシャリスト
- セキュリティ
- セキュリティカンファレンス
- セキュリティ人材
- センシング
- ソフトウェアサプライチェーン
- ソフトウェア開発
- チームビルディング
- データサイエンティスト
- デザイン
- ネットのセキュリティもGMO
- ハーネスエンジニアリング
- バイブコーディング
- バックエンド
- ヒューマノイド
- ヒューマノイドロボット
- フィジカルAI
- フルスタック開発
- プログラミング教育
- ブロックチェーン
- フロントエンド
- プロンプトインジェクション
- ペアリング暗号
- ペネトレーションテスト
- ホワイトハッカー
- ゆめみらいワーク
- リモートワーク
- レッドチーム
- レンタルサーバー
- ロボット
- ロボット導入
- ロボティクス
- ワークフロー
- 世界モデル
- 京大ミートアップ
- 京都大学
- 京都未踏
- 人型ロボット
- 人工知能
- 人工知能学会
- 光学
- 国際ロボット展
- 国際標準化
- 基礎
- 多拠点開発
- 大阪公立大学
- 宇宙セキュリティ
- 宮崎オフィス
- 強化学習
- 応用
- 技育プロジェクト
- 技術イベント
- 技術ブログ
- 技術同人誌
- 技術広報
- 技術書典
- 拡張知能
- 新卒
- 新卒研修
- 新規サービス開発
- 映像
- 映像クリエイター
- 映像制作
- 暗号
- 未踏
- 業務効率化
- 機械学習
- 次世代育成
- 決済
- 生成AI
- 産学連携
- 研究開発
- 社会実装
- 社内コミュニティ
- 組織横断
- 耐量子暗号
- 脆弱性診断
- 自動化
- 自律実行
- 若手人材育成
- 通信技術
- 開発組織
- 開発者
PICKUP
-
AI時代、人の心はどこで動くのか?GMO DESIGN AWARD 2026 審査員有馬トモユキ・清水勝太・広野萌が語る、作品に宿る 「作り手の理由」
デザイン
-
【エキスパート座談会 #1】生成AI活用の現在地:作業の自動化から「仕組みづくり」へ
技術情報
-
【第4回・AI TALK】GMOインターネットグループ・石丸智輝さんに聞く、AI時代に「人が書く意味」
技術情報
-
近畿圏の若手14名、半年の開発の起点に。「京都未踏」ブースト会議レポート
イベント
-
【第3回・AI TALK】GMOインターネットグループ・真次さんに聞く、ヒューマノイドの現在地と研究者としての挑戦
技術情報
-
【DEF CON 34 参加レポート】GMOインターネットグループが挑む、世界最高峰セキュリティカンファレンスの最前線
イベント