Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
(C)Copyright 1996-2014 SAKURA Internet Inc.
2016年7月6日
さくらインターネット株式会社
寺尾英作(@eterao)
さくらのクラウドをAPIで操作する
ダイジェスト版
2
eisaku.terao
@eterao
寺尾 英作
さくらインターネット
エバンジェリスト
blog.terao.club
著書
・らくらくドメイン&レンタルサーバー活用ガイド (2000/7 秀和システム)
・Q&Aでわかる!BIND ...
• 寺尾会を主催
– 個人的に親しい方を呼んだ異業種交流会
– 7/23 寺尾会 2.5
– 8/27 寺尾会 3rd
• クラウドカンファレンス2016
– 副実行委員長
– 2016年7月20日
• エンジニアサポート CROSS 2016...
• 東南アジアを中心とした海外IT事情概況(2016/6)
• インフラエンジニアならさくらのクラウドをAPIで
いじろう(2016/6)
• さくらのクラウドの構成例
• 今さら聞けないクラウドが中小企業にもたらす真の
価値
• 幅広いニーズ...
6
現場のインフラ屋が教える
インフラエンジニアになるための教科書
発売日:2016/6/24 出版社:ソシム
著者:寺尾 英作, 中村 知成, 波多野 安衣, 横田 真俊, JPCERT/CC
第0章はじめに
第1章インフラ技術の基礎知識
第...
目次
第0章はじめに
第1章インフラ技術の基礎知識
第2章インフラの変遷と特徴
第3章システムの検討から構築まで
第4章運用体制の構築から障害対応、予防運用まで
第5章インフラエンジニアのためのセキュリティ入門
第6章DevOps時代に求められ...
2016年7月20日(水) 品川 コクヨホール
https://CloudConference.jaipa.or.jp/
副実行委員長を担当
400人近い来場者数で盛況に開催できました!
・受注のたびに同じ手順で作業してるけど、
この手順を自動化したい
・何かをトリガーにして自動で再起動したい
・コンパネでは作業手順を書いたり、作業ロ
グを取るのが難しい
・さくらからの請求を元にお客さんに
請求書を出したい
・請求内容の分析がし...
• さくらのクラウドを操作する4つの方法
・さくらのクラウド API クライアントライブラリ saklient
・コマンドライン操作ツール node-sacloud
・さくらのクラウド API
・さくらのクラウド コントロールパネル
API
s...
さくらのクラウド API を使えるようにする
会員ID アカウントA
アカウントB
ユーザA
ユーザB
┗APIキーA1
┗APIキーA2
┗APIキーB1
• API キーはアカウントに紐付きます。
• アカウントに対して、複数のAPIキーが作成できます
• APIキーにアクセスレベル・...
APIキーは、さくらのクラウドコンパネで作成します。利用するアカウントを選択し、
さくらのクラウドの「IaaS」にアクセスし、上のメニューにある「設定」をクリックし
ます。
左のメニューにある「APIキー」をクリックします。
上のメニューにある「+追加」をクリックします。
APIキーの詳細を入力します。入力が終わったら[追加]をクリックします。
作成が完了しているかを確認します。
詳細を確認するには、該当行をダブルクリックします。
アクセストークンと、アクセストークンシークレットをメモします。
アクセスレベルやアクセス権が正しいことを確認します。以上で作成完了です。
この例ではリソースの閲覧と請求情報への
アクセスが許可されています。
サーバ作成
• サーバ作成の流れ
サーバ作成
サーバプラン
指定
ディスク作成
サーバと接続
ディスクプラン
を指定
パブリックアー
カイブを指定
サーバ起動 サーバ検索ディスク修正
サーバ作成の流れ→
必要な情報の収集
ServerID DiskID...
GET /product/server | jq . | more
レスポンス
{
"is_ok": true,
"ServerPlans": [
{
"Availability": "available",
"ServiceClass": "...
GET /product/server?Sort=CPU | jq -c 
".ServerPlans[] | {Availability, ID, ServiceClass,ServiceClass,CPU,MemoryMB}"
{"Memo...
• サーバ作成POST /cloud/1.1/server
リクエスト
{
"Count": 0,
"Server": {
"WaitDiskMigration": true,
"Icon": null,
"Tags": [ "@virtio-...
curl --user "Access_Token":"Access_Token_Secret" 
-X POST -d 
'{"Server":{"ServerPlan":{"ID":1001},"ConnectedSwitches":[{"...
{
"is_ok": true,
"Success": true,
"Server": {
"Interfaces": [
{
"Subnet": {
"DefaultRoute": "133.242.70.1",
"NetworkMaskLe...
/server?Filter=Servers.Tags:apitest | 
jq -c ".Servers[] | {ID, Name, HostName, IPAddress : .Interfaces[].IPAddress ,
Stat...
GET /archive?Filter="Scope":"shared"&Sort=Name' | jq -c ".Archives[] |
{ID,Name,Scope,SizeMB}"
アーカイブの一覧を取得します。
パブリックアーカイブが...
curl --user "Access_Token":"Access_Token_Secret" 
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/product/disk 
...
POST /cloud/1.1/disk
{
"Count": 0,
"Disk": {
"Server": {
"ID": "112800580022"
},
"Name": "ServerAPI03",
"Connection": "vir...
curl --user "Access_Token":"Access_Token_Secret" 
-X POST –d 
'{"Disk":{"Plan":{"ID":4},"SourceArchive":{"ID":"11280023906...
PUT cloud/1.1/disk/112800579885/config
{
"Count": 0,
"HostName": "ServerAPI03",
"Password": "124YJNLu"
}
リクエスト
サーバのホスト名を書き...
PUT cloud/1.1/server/112800580022/power
リクエスト
作成したサーバのID
curl --user "Access_Token":"Access_Token_Secret" 
-X PUT -d '' 
h...
/server?Filter=Servers.Tags:apitest | 
jq -c ".Servers[] | {ID, Name, HostName, IPAddress : .Interfaces[].IPAddress ,
Stat...
35
eisaku.terao
@eterao
寺尾 英作
さくらインターネット
エバンジェリスト
blog.terao.club
著書
・らくらくドメイン&レンタルサーバー活用ガイド (2000/7 秀和システム)
・Q&Aでわかる!BIND...
さくらのクラウドをAPIで操作する(LT) @ さくらクラブ in 岐阜
さくらのクラウドをAPIで操作する(LT) @ さくらクラブ in 岐阜
Nächste SlideShare
Wird geladen in …5
×

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

寺尾の自己紹介とさくらのクラウドをAPIで操作する操作手順(Curl・ダイジェスト版)の紹介です。
さらに詳しい資料は、以下のURLからアクセスできます。
インフラエンジニアなら
「さくらのクラウド」をAPIでいじろう
http://bit.ly/1tzFx8z

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

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

  1. 1. (C)Copyright 1996-2014 SAKURA Internet Inc. 2016年7月6日 さくらインターネット株式会社 寺尾英作(@eterao) さくらのクラウドをAPIで操作する ダイジェスト版
  2. 2. 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)、経営のためのサイバーセキュ リティ。写真と自転車とアイドル。
  3. 3. • 寺尾会を主催 – 個人的に親しい方を呼んだ異業種交流会 – 7/23 寺尾会 2.5 – 8/27 寺尾会 3rd • クラウドカンファレンス2016 – 副実行委員長 – 2016年7月20日 • エンジニアサポート CROSS 2016 • オペレーションカンファレンス • ドルヲタのためのプレゼン技術研究会
  4. 4. • 東南アジアを中心とした海外IT事情概況(2016/6) • インフラエンジニアならさくらのクラウドをAPIで いじろう(2016/6) • さくらのクラウドの構成例 • 今さら聞けないクラウドが中小企業にもたらす真の 価値 • 幅広いニーズに応える、サクラインターネットの サービス • さくらのクラウドハンズオン • 伝えるプレゼン(2016/7) • 相手を動かすプレゼン(2016/5) • アイドル支援プラットフォーム(2016/7) • ライブアイドルのすすめ(2016/6)
  5. 5. 6 現場のインフラ屋が教える インフラエンジニアになるための教科書 発売日:2016/6/24 出版社:ソシム 著者:寺尾 英作, 中村 知成, 波多野 安衣, 横田 真俊, JPCERT/CC 第0章はじめに 第1章インフラ技術の基礎知識 第2章インフラの変遷と特徴 第3章システムの検討から構築まで 第4章運用体制の構築から障害対応、予防運用まで 第5章インフラエンジニアのためのセキュリティ入門 第6章DevOps時代に求められるスキル 第7章おわりに インフラエンジニアは、非常に幅広く深い知識が必要です。トラブルシューティングなど早い作業が 要求されたり、メンテナンスでは確実な作業が要求されたり、構築では幅広い知識と経験が必要です。 そして、それだけではなく、それらの技術的な技能や経験を下支えする根本的なスキルがあります。 本書では、単なる技術だけではなく、その両面を余すことなくお伝えした本になっています。
  6. 6. 目次 第0章はじめに 第1章インフラ技術の基礎知識 第2章インフラの変遷と特徴 第3章システムの検討から構築まで 第4章運用体制の構築から障害対応、予防運用まで 第5章インフラエンジニアのためのセキュリティ入門 第6章DevOps時代に求められるスキル 第7章おわりに 寺尾 英作 さくらインターネット株式会社 エバンジェリスト 0章、1章、3章、7章を担当 波多野 安衣 株式会社クララオンライン 4章を担当 横田 真俊 さくらインターネット株式会社 エバンジェリスト 2章を担当 JPCERT/CC 5章を担当 中村 知成 株式会社ヌーラボ Backlog プロジェクトマネー ジャー兼ビルドエンジニア 6章担当
  7. 7. 2016年7月20日(水) 品川 コクヨホール https://CloudConference.jaipa.or.jp/ 副実行委員長を担当 400人近い来場者数で盛況に開催できました!
  8. 8. ・受注のたびに同じ手順で作業してるけど、 この手順を自動化したい ・何かをトリガーにして自動で再起動したい ・コンパネでは作業手順を書いたり、作業ロ グを取るのが難しい ・さくらからの請求を元にお客さんに 請求書を出したい ・請求内容の分析がしたい クラウドAPI 請求関連API 解決できます!
  9. 9. • さくらのクラウドを操作する4つの方法 ・さくらのクラウド API クライアントライブラリ saklient ・コマンドライン操作ツール node-sacloud ・さくらのクラウド API ・さくらのクラウド コントロールパネル API sacloud CLI コンパネ saklient +独自スクリプト #!/bin/bash さくらの クラウド 4つの操作方法
  10. 10. さくらのクラウド API を使えるようにする
  11. 11. 会員ID アカウントA アカウントB ユーザA ユーザB ┗APIキーA1 ┗APIキーA2 ┗APIキーB1 • API キーはアカウントに紐付きます。 • アカウントに対して、複数のAPIキーが作成できます • APIキーにアクセスレベル・アクセス権を設定することが出来ます。 アクセスレベル:無効<リソース閲覧<電源操作<設定編集<作成・削除 アクセス権:請求情報(リソース閲覧以上のアクセスレベルが必要です) • APIキーはユーザー権限でも作成することは可能ですが、当該ユーザが当該アカウント に対するアクセスレベルを超えるAPIキーの作成は出来ません。
  12. 12. APIキーは、さくらのクラウドコンパネで作成します。利用するアカウントを選択し、 さくらのクラウドの「IaaS」にアクセスし、上のメニューにある「設定」をクリックし ます。
  13. 13. 左のメニューにある「APIキー」をクリックします。
  14. 14. 上のメニューにある「+追加」をクリックします。
  15. 15. APIキーの詳細を入力します。入力が終わったら[追加]をクリックします。
  16. 16. 作成が完了しているかを確認します。 詳細を確認するには、該当行をダブルクリックします。
  17. 17. アクセストークンと、アクセストークンシークレットをメモします。 アクセスレベルやアクセス権が正しいことを確認します。以上で作成完了です。 この例ではリソースの閲覧と請求情報への アクセスが許可されています。
  18. 18. サーバ作成
  19. 19. • サーバ作成の流れ サーバ作成 サーバプラン 指定 ディスク作成 サーバと接続 ディスクプラン を指定 パブリックアー カイブを指定 サーバ起動 サーバ検索ディスク修正 サーバ作成の流れ→ 必要な情報の収集 ServerID DiskID ArchiveID DiskPlanID ServerPlanID これからの説明では、 curl と jq を多用します。 jqの使い方次第で、コマンドラインでの可能性が 広がります。
  20. 20. 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 }, .... サーバの作成をするには、まずサーバプランを指定する必要があります。 こんな感じで取得できるのですが、たくさんプランが出てくるので見にくいです。
  21. 21. 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 でキーを列挙することで指定 のキーのみを取り出すことが出来ます。
  22. 22. • サーバ作成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 共有ベストエフォート
  23. 23. 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に ダブルクオーテーションが多いので)
  24. 24. { "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)
  25. 25. /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"} リクエスト レスポンス
  26. 26. 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" となっています
  27. 27. 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} レスポンス リクエスト
  28. 28. 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を指定
  29. 29. 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
  30. 30. 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 } レスポンス
  31. 31. 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 } レスポンス
  32. 32. /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"} リクエスト レスポンス
  33. 33. 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でいじろう

×