狠狠撸

狠狠撸Share a Scribd company logo
(C)Copyright 1996-2014 SAKURA Internet Inc.
2016年7月6日
さくらインターネット株式会社
寺尾英作(@eterao)
さくらのクラウドをAPIで操作する
ダイジェスト版
2
eisaku.terao
@eterao
寺尾 英作
さくらインターネット
エバンジェリスト
blog.terao.club
著書
?らくらくドメイン&レンタルサーバー活用ガイド (2000/7 秀和システム)
?Q&Aでわかる!BIND ~ ネームサーバの基本からバーチャルドメイン設定まで~
(2001/5 エーアイ出版)
?UNIX Network sendmail ~メールサーバの構築と管理~ (2002/2 ソフトバンクパ
ブリッシング)
?UNIX Network Apache ~WWWサーバの構築と管理~ (2002/9 ソフトバンクパブ
リッシング)
?改訂第二版 CentOSサーバ構築バイブル 改訂第2版 (2009/9/26 毎日コミュニケー
ションズ)
?現場のインフラ屋が教えるインフラエンジニアになるための教科書(2016/6/24
ソシム)
運用を15年、2000年頃からコミュニティ活動としてレ
ンタルサーバー?オルグを主催していました。
2013年頃から、企画やマーケティング、広告、イベン
ト主催、講演活動に軸足を移して活動中。
2016年1月からさくらインターネット勤務。4月からエ
バンジェリスト活動を本格化。
最近の興味は、IoT(CPS)、経営のためのサイバーセキュ
リティ。写真と自転車とアイドル。
さくらのクラウドをAPIで操作する(LT) @ さくらクラブ in 岐阜
? 寺尾会を主催
– 個人的に親しい方を呼んだ異業種交流会
– 7/23 寺尾会 2.5
– 8/27 寺尾会 3rd
? クラウドカンファレンス2016
– 副実行委員長
– 2016年7月20日
? エンジニアサポート CROSS 2016
? オペレーションカンファレンス
? ト?ルヲタのためのフ?レセ?ン技術研究会
? 東南アジアを中心とした海外IT事情概況(2016/6)
? インフラエンジニアならさくらのクラウドをAPIで
いじろう(2016/6)
? さくらのクラウドの構成例
? 今さら聞けないクラウドが中小企業にもたらす真の
価値
? 幅広いニーズに応える、サクラインターネットの
サービス
? さくらのクラウドハンズオン
? 伝えるフ?レセ?ン(2016/7)
? 相手を動かすフ?レセ?ン(2016/5)
? アイドル支援フ?ラットフォーム(2016/7)
? ライブアイドルのすすめ(2016/6)
6
現場のインフラ屋が教える
インフラエンジニアになるための教科書
発売日:2016/6/24 出版社:ソシム
著者:寺尾 英作, 中村 知成, 波多野 安衣, 横田 真俊, JPCERT/CC
第0章はじめに
第1章インフラ技術の基礎知識
第2章インフラの変遷と特徴
第3章システムの検討から構築まで
第4章運用体制の構築から障害対応、予防運用まで
第5章インフラエンジニアのためのセキュリティ入門
第6章DevOps時代に求められるスキル
第7章おわりに
インフラエンジニアは、非常に幅広く深い知識が必要です。トラブルシューティングなど早い作業が
要求されたり、メンテナンスでは確実な作業が要求されたり、構築では幅広い知識と経験が必要です。
そして、それだけではなく、それらの技術的な技能や経験を下支えする根本的なスキルがあります。
本書では、単なる技術だけではなく、その両面を余すことなくお伝えした本になっています。
目次
第0章はじめに
第1章インフラ技術の基礎知識
第2章インフラの変遷と特徴
第3章システムの検討から構築まで
第4章運用体制の構築から障害対応、予防運用まで
第5章インフラエンジニアのためのセキュリティ入門
第6章DevOps時代に求められるスキル
第7章おわりに
寺尾 英作
さくらインターネット株式会社
エバンジェリスト
0章、1章、3章、7章を担当
波多野 安衣
株式会社クララオンライン
4章を担当
横田 真俊
さくらインターネット株式会社
エバンジェリスト
2章を担当
JPCERT/CC
5章を担当
中村 知成
株式会社ヌーラボ
Backlog フ?ロジェクトマネー
ジャー兼ビルドエンジニア
6章担当
2016年7月20日(水) 品川 コクヨホール
https://CloudConference.jaipa.or.jp/
副実行委員長を担当
400人近い来場者数で盛況に開催できました!
さくらのクラウドをAPIで操作する(LT) @ さくらクラブ in 岐阜
?受注のたびに同じ手順で作業してるけど、
この手順を自動化したい
?何かをトリガーにして自動で再起動したい
?コンパネでは作業手順を書いたり、作業ロ
グを取るのが難しい
?さくらからの請求を元にお客さんに
請求書を出したい
?請求内容の分析がしたい
クラウドAPI
請求関連API
解決できます!
? さくらのクラウドを操作する4つの方法
?さくらのクラウド API クライアントライブラリ saklient
?コマンドライン操作ツール node-sacloud
?さくらのクラウド API
?さくらのクラウド コントロールパネル
API
sacloud CLI
コンパネ
saklient
+独自スクリフ?ト
#!/bin/bash
さくらの
クラウド
4つの操作方法
さくらのクラウド API を使えるようにする
会員ID アカウントA
アカウントB
ユーザA
ユーザB
┗APIキーA1
┗APIキーA2
┗APIキーB1
? API キーはアカウントに紐付きます。
? アカウントに対して、複数のAPIキーが作成できます
? APIキーにアクセスレベル?アクセス権を設定することが出来ます。
アクセスレベル:無効<リソース閲覧<電源操作<設定編集<作成?削除
アクセス権:請求情報(リソース閲覧以上のアクセスレベルが必要です)
? APIキーはユーザー権限でも作成することは可能ですが、当該ユーザが当該アカウント
に対するアクセスレベルを超えるAPIキーの作成は出来ません。
APIキーは、さくらのクラウドコンパネで作成します。利用するアカウントを選択し、
さくらのクラウドの「IaaS」にアクセスし、上のメニューにある「設定」をクリックし
ます。
左のメニューにある「础笔滨キー」をクリックします。
上のメニューにある「+追加」をクリックします。
础笔滨キーの详细を入力します。入力が终わったら摆追加闭をクリックします。
作成が完了しているかを確認します。
詳細を確認するには、該当行をダブルクリックします。
アクセストークンと、アクセストークンシークレットをメモします。
アクセスレベルやアクセス権が正しいことを確認します。以上で作成完了です。
この例ではリソースの閲覧と請求情報への
アクセスが許可されています。
サーバ作成
? サーバ作成の流れ
サーバ作成
サーバフ?ラン
指定
ディスク作成
サーバと接続
ディスクフ?ラン
を指定
パブリックアー
カイブを指定
サーバ起動 サーバ検索ディスク修正
サーバ作成の流れ→
必要な情報の収集
ServerID DiskID
ArchiveID
DiskPlanID
ServerPlanID
これからの説明では、
curl と jq を多用します。
jqの使い方次第で、コマンドラインでの可能性が
広がります。
GET /product/server | jq . | more
レスポンス
{
"is_ok": true,
"ServerPlans": [
{
"Availability": "available",
"ServiceClass": "cloud/plan/1core-1gb",
"MemoryMB": 1024,
"CPU": 1,
"Description": "",
"Name": "プラン/1Core-1GB",
"ID": 1001,
"Index": 0
},
....
サーバの作成をするには、まずサーバフ?ランを指定する必要があります。
こんな感じで取得できるのですが、たくさんフ?ランが出てくるので見にくいです。
GET /product/server?Sort=CPU | jq -c 
".ServerPlans[] | {Availability, ID, ServiceClass,ServiceClass,CPU,MemoryMB}"
{"MemoryMB":1024,"CPU":1,"ServiceClass":"cloud/plan/1core-1gb","ID":1001,"Availability":"available"}
{"MemoryMB":2048,"CPU":1,"ServiceClass":"cloud/plan/1core-2gb","ID":2001,"Availability":"available"}
{"MemoryMB":3072,"CPU":1,"ServiceClass":"cloud/plan/1core-3gb","ID":3001,"Availability":"available"}
{"MemoryMB":4096,"CPU":1,"ServiceClass":"cloud/plan/1core-4gb","ID":4001,"Availability":"available"}
{"MemoryMB":5120,"CPU":1,"ServiceClass":"cloud/plan/1core-5gb","ID":5001,"Availability":"available"}
{"MemoryMB":2048,"CPU":2,"ServiceClass":"cloud/plan/2core-2gb","ID":2002,"Availability":"available"}
{"MemoryMB":3072,"CPU":2,"ServiceClass":"cloud/plan/2core-3gb","ID":3002,"Availability":"available"}
…
GETのリクエストストリングで指定する場合、
JSON形式と、URL形式(a=a&B-b)の2つの方法が
選べます。URL形式の方が楽ちんです。
? SortやFlterでキーを指定する場合は、トッフ?レベルのキー(ここでは`ServerPlans`)は不要です
? jq –c を指定すると出力がコンパクトにまとまります。
値を絞り込んで出力したい場合、以下の
ように、jq でキーを列挙することで指定
のキーのみを取り出すことが出来ます。
? サーバ作成POST /cloud/1.1/server
リクエスト
{
"Count": 0,
"Server": {
"WaitDiskMigration": true,
"Icon": null,
"Tags": [ "@virtio-net-pci", "apitest" ],
"Description": ”apitest",
"Name": "ServerAPI03",
"ConnectedSwitches": [
{
"virtio": true,
"BandWidthMbps": 100,
"Scope": "shared",
"_operation": "internet"
}
],
"ServerPlan": { "ID": 1001 }
}
}
ServerPlanを確認する必要があります
インターネット接続は
100Mbps 共有ベストエフォート
インターネット接続は
100Mbps 共有ベストエフォート
curl --user "Access_Token":"Access_Token_Secret" 
-X POST -d 
'{"Server":{"ServerPlan":{"ID":1001},"ConnectedSwitches":[{"_operation":"internet","Scope":"sh
ared","BandWidthMbps":100,"virtio":true}],"Name":"ServerAPI03","Description":"apitest","Tags
":["@virtio-net-pci","apitest"],"Icon":null,"WaitDiskMigration":true},"Count":0}' 
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server | jq .
リクエスト
ようやく、サーバ作成が出来ます。
リクエストデータをcurlの –d オフ?ションで指定します。
シングルクオーテーションで全体を囲みます。(JSONに
ダブルクオーテーションが多いので)
{
"is_ok": true,
"Success": true,
"Server": {
"Interfaces": [
{
"Subnet": {
"DefaultRoute": "133.242.70.1",
"NetworkMaskLen": 24,
"NetworkAddress": "133.242.70.0",
"ID": null
},
},
"IPAddress": "133.242.70.90",
}
],
"ID": "112800580022",
"Name": "ServerAPI03",
"HostName": "localhost",
"Description": "test",
"Availability": "migrating",
"ServiceClass": "cloud/plan/1core-1gb",
}
}
レスポンス(抜粋)
ネットワーク情報
割り当てられたIPアドレス
サーバのリソースID(サーバID)
/server?Filter=Servers.Tags:apitest | 
jq -c ".Servers[] | {ID, Name, HostName, IPAddress : .Interfaces[].IPAddress ,
Status : .Instance.Status } "
サーバが出来たかを確認しましょう。
{"Status":"down","IPAddress":"133.242.19.104","HostName":"localhost","Name":"ServerAPI01
","ID":"112800578058"}
{"Status":"down","IPAddress":"133.242.22.14","HostName":"localhost","Name":"ServerAPI01"
,"ID":"112800578062"}
{"Status":"up","IPAddress":"133.242.49.106","HostName":"localhost","Name":"plesk02","ID"
:"112800528996"}
リクエスト
レスポンス
GET /archive?Filter="Scope":"shared"&Sort=Name' | jq -c ".Archives[] |
{ID,Name,Scope,SizeMB}"
アーカイブの一覧を取得します。
パブリックアーカイブがインストールの元となるアーカイブです。
{"SizeMB":20480,"Scope":"shared","Name":"CentOS 5.11 64bit","ID":"112800291714"}
{"SizeMB":102400,"Scope":"shared","Name":"CentOS 5.11 64bit","ID":"112800291715"}
{"SizeMB":20480,"Scope":"shared","Name":"CentOS 6.7 64bit","ID":"112800239057"}
{"SizeMB":20480,"Scope":"shared","Name":"CentOS 7.2 64bit","ID":"112800239060"}
{"SizeMB":20480,"Scope":"shared","Name":"CoreOS 367.1.0 (stable)","ID":"112600559834"}
{"SizeMB":20480,"Scope":"shared","Name":"Debian GNU/Linux 7.10.0 64bit","ID":"112800438502"}
{"SizeMB":20480,"Scope":"shared","Name":"Debian GNU/Linux 8.4.0 64bit","ID":"112800438543"}
......
リクエスト
レスポンス
パブリックアーカイブは、
Scopeが"shared" となっています
curl --user "Access_Token":"Access_Token_Secret" 
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/product/disk 
| jq -c ".DiskPlans[] | {ID,Name, SizeMB : .Size[].SizeMB}"
{"SizeMB":20480,"Name":"SSDプラン","ID":4}
{"SizeMB":102400,"Name":"SSDプラン","ID":4}
{"SizeMB":256000,"Name":"SSDプラン","ID":4}
{"SizeMB":512000,"Name":"SSDプラン","ID":4}
{"SizeMB":40960,"Name":"標準プラン","ID":2}
{"SizeMB":61440,"Name":"標準プラン","ID":2}
{"SizeMB":81920,"Name":"標準プラン","ID":2}
{"SizeMB":102400,"Name":"標準プラン","ID":2}
{"SizeMB":256000,"Name":"標準プラン","ID":2}
{"SizeMB":512000,"Name":"標準プラン","ID":2}
{"SizeMB":768000,"Name":"標準プラン","ID":2}
{"SizeMB":1048576,"Name":"標準プラン","ID":2}
{"SizeMB":2097152,"Name":"標準プラン","ID":2}
{"SizeMB":4194304,"Name":"標準プラン","ID":2}
レスポンス
リクエスト
POST /cloud/1.1/disk
{
"Count": 0,
"Disk": {
"Server": {
"ID": "112800580022"
},
"Name": "ServerAPI03",
"Connection": "virtio",
"SizeMB": 20480,
"SourceArchive": {
"ID": "112800239060"
},
"Plan": { "ID": 4 }
}
}
リクエスト
接続するサーバと同じ
先ほど作成したサーバの
リソースID(サーバID)を指定。ディスク作成後
直ぐに接続する。
ディスクフ?ランで取得したIDを指定
HDD:2 / SSD:4
ディスクフ?ランで取得したディスクサイズ
を数値で指定
アーカイブ一覧で取得したパブリックアーカイ
ブ(OS)のIDを指定
curl --user "Access_Token":"Access_Token_Secret" 
-X POST –d 
'{"Disk":{"Plan":{"ID":4},"SourceArchive":{"ID":"112800239060"},"SizeMB":20480
,"Connection":"virtio","Name":"ServerAPI03","Server":{"ID":"112800580022"}},"C
ount":0}' 
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/disk | jq .
{
"is_ok": true,
"Success": "Accepted",
"Disk": {
"SizeMB": 20480,
"Name": "ServerAPI03",
"ID": "112800580030"
}
}
レスポンス(抜粋)
リクエストコマンド
作成したディスクのID
PUT cloud/1.1/disk/112800579885/config
{
"Count": 0,
"HostName": "ServerAPI03",
"Password": "124YJNLu"
}
リクエスト
サーバのホスト名を書き込み
root パスワードを書き込み
作成したディスクのID
curl --user "Access_Token":"Access_Token_Secret" 
-X PUT -d '{"Password":"124YJNLu","HostName":"ServerAPI03","Count":0}' 
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/disk/112800580030/co
nfig | jq .
リクエストコマンド
{ "is_ok": true, "Success": true }
レスポンス
PUT cloud/1.1/server/112800580022/power
リクエスト
作成したサーバのID
curl --user "Access_Token":"Access_Token_Secret" 
-X PUT -d '' 
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/112800580022/
power | jq .
リクエストコマンド
{ "is_ok": true, "Success": true }
レスポンス
/server?Filter=Servers.Tags:apitest | 
jq -c ".Servers[] | {ID, Name, HostName, IPAddress : .Interfaces[].IPAddress ,
Status : .Instance.Status } "
サーバが出来たかを確認しましょう。
{"Status":"down","IPAddress":"192.168.xx.104","HostName":"localhost","Name":"ServerAPI01
","ID":"112800578058"}
{"Status":"down","IPAddress":"192.168.x.14","HostName":"localhost","Name":"ServerAPI01",
"ID":"112800578062"}
{"Status":"up","IPAddress":" 192.168.xx.106","HostName":"localhost","Name":" ServerAPI03
","ID":"112800580022"}
リクエスト
レスポンス
35
eisaku.terao
@eterao
寺尾 英作
さくらインターネット
エバンジェリスト
blog.terao.club
著書
?らくらくドメイン&レンタルサーバー活用ガイド (2000/7 秀和システム)
?Q&Aでわかる!BIND ~ ネームサーバの基本からバーチャルドメイン設定まで~
(2001/5 エーアイ出版)
?UNIX Network sendmail ~メールサーバの構築と管理~ (2002/2 ソフトバンクパ
ブリッシング)
?UNIX Network Apache ~WWWサーバの構築と管理~ (2002/9 ソフトバンクパブ
リッシング)
?改訂第二版 CentOSサーバ構築バイブル 改訂第2版 (2009/9/26 毎日コミュニケー
ションズ)
?現場のインフラ屋が教えるインフラエンジニアになるための教科書(2016/6/24
ソシム)
http://bit.ly/1tzFx8z
今日の内容の詳細は以下からダウンロード出来ます!
インフラエンジニアなら
「さくらのクラウド」をAPIでいじろう

More Related Content

さくらのクラウドをAPIで操作する(LT) @ さくらクラブ in 岐阜