Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
【初心者向け】API を使ってクラウ
ドの管理を自動化しよう
富士通クラウドテクノロジーズ株式会社
竹内 豪
1
ニフクラ エンジニア ミートアップ 第 9 回 自動化事始め
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
自己紹介
◼ 名前: 竹内 豪
◼ GitHub: @tily (https://github.com/tily)
• ニフクラ関連プログラム
• Ruby ライブラリ
• 自作 Web サービス 等…
◼ 担当業務:
• Computing → iPaaS (Automation・RDB) →
IoT (Script・Timer) → Computing (イマココ)
• SDK・ドキュメント自動生成 (β)
• FJCT エンジニアタスクフォース副委員長
参考: https://bit.ly/2CZdgkh
2
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API / SDK / CLI とは?
◼ API (Application Programming Interface)
• プログラムを書くためのインタフェース仕様
• ここでは “Web API” のことを指している
3
◼ SDK
(Software
Development Kit)
• API を利用するために
用意されたライブラリ
• API サーバーにリクエ
ストを送るクライアン
トの役割を果たすため、
「クライアント」と呼
ばれることも多い
◼ CLI
(Command Line Interface)
• API をコマンドラインから使
えるようにしたもの
• SDK よりも手軽に利用する
ことが可能
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API のメリット (1)
◼ コンパネから 20 台サーバーを作成したい
4
01. イメージ選択 02. サーバータイプ選択
03. サーバー設定 04. 入力内容確認
×20回
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API のメリット (2)
5
◼ API を使えば一発で実行可能
from nifcloud import session
client = session.get_session().create_client("computing")
for i in range(20):
instance_id = "server%02d" % (i + 1)
print(f"Creating {instance_id}")
client.run_instances(
InstanceId=instance_id,
ImageId="89",
KeyName="something",
)
waiter = client.get_waiter("instance_running")
waiter.wait(InstanceId=[instance_id])
print(f"Created {instance_id}")
※後述の nifcloud-sdk-python (開発者プレビュー版で記述)
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API のメリット (3)
6
◼ 繰り返し行う操作を自動化
• → 工数削減
◼ 自動化によるオペミス削減
• → 品質向上
◼ 構成管理への応用
• → インフラをソースコードとして管理
(Infrastructure as a Code)
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
ニフクラ各サービス API のご紹介
◼ Computing
• サーバー
• ディスク
• SSH キー
• OS イメージ
• ロードバランサー
• マルチロードバランサー
• ファイアウォール
• SSL 証明書
• 利用状況
• アップロード
• 付替 IP アドレス
• 追加 NIC
オートスケール
• 基本監視
• プライベート LAN
• ルーター
• VPN ゲートウェイ
• サーバーセパレート
7
◼ NAS
• NAS サーバー
• NAS ファイアウォール
• モニタリング
◼ スクリプト
• スクリプト実行
◼ 専有エンドポイント
• 専有エンドポイント
• 専有エンドポイント FW グループ
• モニタリング
◼ RDB
• DB サーバー
• オプション
• DB スナップショット
• DB パラメーターグループ
• イベント
• イベント通知
• DB ログ
• モニタリング
• 証明書
◼ DNS
• ゾーン操作
• レコード操作
◼ ESS
• 送信元メアド管理
• 送信元ドメイン管理
• メール送信
• 利用状況確認
• DKIM 設定管理
• 配信ログ取得
◼ オブジェクトストレージ
• バケット操作
• オブジェクト操作
https://cloud.nifty.com/api/
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
ニフクラ公式 SDK・CLI
◼ SDK (https://cloud.nifty.com/api/sdk/)
• ニフクラ Computing SDK for Java
• ニフクラ RDB・DNS・ESS SDK for Java
• ニフクラ オブジェクトストレージ SDK for Java
• ニフクラ RDB・DNS SDK for PHP
◼ CLI (https://cloud.nifty.com/api/cli/)
• ニフクラ Computing CLI
8
→ 対応サービス拡充・対応言語拡充を検討中!
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
ニフクラ SDK for Python (開発者プレビュー版)
◼ 特長
• ニフクラの複数サービスに対応 (Computing / RDB /
NAS / Script)
• 付属のデバッグ CLI でコマンドラインから動作確認
が可能
• AWS SDK JSON 互換によるデータ駆動の仕組みを採
用
◼ 紹介ブログ記事
• https://blog.pfs.nifcloud.com/nifcloud_sdk_pytho
n
9
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
FJCT におけるニフクラ API 活用事例
◼ メイン機能利用
• オブジェクトストレージ操作
• メール送信 (HTTP 経由)
• スクリプト実行
10
◼ 構築自動化
• Computing サーバー作成
• RDB DB サーバー作成
• NAS NAS サーバー作成
◼ 運用自動化
• Computing SSL 証明書更新
• RDB FW グループ設定変更
◼ リソース監視
• Computing リソース監視
• RDB フェイルオーバー監視
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API を利用した構築自動化 (ansible-role-nifcloud)
◼ ansible-role-nifcloud
• https://github.com/nifcloud/ansible-role-
nifcloud
• ansible から API を利用したニフクラリソースの管
理が可能
• 現在は Computing サーバー / FW グループ / ロー
ドバランサー / 増設ディスクに対応
◼ 利用イメージ
• (次スライド参照)
11
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API を利用した構築自動化 (利用イメージ)
12
- name: Start server
local_action:
module: nifcloud
access_key: "YOUR ACCESS KEY"
secret_access_key: "YOUR SECRET ACCESS KEY"
endpoint: "jp-west-1.computing.api.nifcloud.com"
instance_id: "web001"
state: "running"
image_id: "26"
key_name: "dummykey"
security_group: "webfw"
instance_type: "mini"
availability_zone: "west-11"
accounting_type: "2"
ip_type: "static"
startup_script: "roles/infrastructure/template/startup_script"
startup_script_vars:
dummy_var: "DUMMY"
network_interface:
- network_id: net-COMMON_GLOBAL
ipAddress: "0.0.0.0"
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API を利用した運用自動化
自分のチームでは細々とした運用の自動化は
nifcloud-sdk-python に同梱されている
nifcloud-debugcli で行っています。
13
## API キーとデフォルトリージョンの設定
$ export AWS_ACCESS_KEY_ID=<Your NIFCLOUD Access Key ID>
$ export AWS_SECRET_ACCESS_KEY=<Your NIFCLOUD Secret Access Key>
$ export AWS_DEFAULT_REGION=jp-east-1
## 利用可能なサービスの一覧を表示
$ nifcloud-debugcli help
## 指定されたサービスで利用可能な API の一覧を表示
$ nifcloud-debugcli computing help
## 指定されたアクションで利用可能なパラメーターの一覧を表示
$ nifcloud-debugcli computing create-key-pair help
## 実際にコマンドを実行 (下記は料金が発生しない SSH キー作成の API を実行しています)
$ nifcloud-debugcli computing create-key-pair --key-name foobar123 --password foobar123
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
API を利用した運用自動化
14
## lb001 に他部署から依頼のあった IP 許可 (5 つ) を投入
nifcloud-debugcli computing set-filter-for-load-balancer ¥
--load-balancer-name lb001 ¥
--load-balancer-port 443 ¥
--instance-port 8080 ¥
--ip-addresses '[
{"IPAddress": “XXX.YYY.ZZZ.1"},
{"IPAddress": “XXX.YYY.ZZZ.2"},
{"IPAddress": “XXX.YYY.ZZZ.3"},
{"IPAddress": “XXX.YYY.ZZZ.4"},
{"IPAddress": “XXX.YYY.ZZZ.5"},
{"IPAddress": “XXX.YYY.ZZZ.6"},
]'
◼ 作業手順書にも下記のように書くだけでよい
• → 工数削減・オペミス削減
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
まとめ
◼ ニフクラ各サービスでは API およびそれに
付随する SDK / CLI を提供しています
◼ API を有効活用することで構築・運用コスト
を大幅に削減することが可能
◼ ぜひニフクラの各種 API をご活用ください
15
Copyright 2018 FUJITSU CLOUD TECHNOLOGIES LIMITED
16

【初心者向け】API を使ってクラウドの管理を自動化しよう

  • 1.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED 【初心者向け】API を使ってクラウ ドの管理を自動化しよう 富士通クラウドテクノロジーズ株式会社 竹内 豪 1 ニフクラ エンジニア ミートアップ 第 9 回 自動化事始め
  • 2.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED 自己紹介 ◼ 名前: 竹内 豪 ◼ GitHub: @tily (https://github.com/tily) • ニフクラ関連プログラム • Ruby ライブラリ • 自作 Web サービス 等… ◼ 担当業務: • Computing → iPaaS (Automation・RDB) → IoT (Script・Timer) → Computing (イマココ) • SDK・ドキュメント自動生成 (β) • FJCT エンジニアタスクフォース副委員長 参考: https://bit.ly/2CZdgkh 2
  • 3.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API / SDK / CLI とは? ◼ API (Application Programming Interface) • プログラムを書くためのインタフェース仕様 • ここでは “Web API” のことを指している 3 ◼ SDK (Software Development Kit) • API を利用するために 用意されたライブラリ • API サーバーにリクエ ストを送るクライアン トの役割を果たすため、 「クライアント」と呼 ばれることも多い ◼ CLI (Command Line Interface) • API をコマンドラインから使 えるようにしたもの • SDK よりも手軽に利用する ことが可能
  • 4.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API のメリット (1) ◼ コンパネから 20 台サーバーを作成したい 4 01. イメージ選択 02. サーバータイプ選択 03. サーバー設定 04. 入力内容確認 ×20回
  • 5.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API のメリット (2) 5 ◼ API を使えば一発で実行可能 from nifcloud import session client = session.get_session().create_client("computing") for i in range(20): instance_id = "server%02d" % (i + 1) print(f"Creating {instance_id}") client.run_instances( InstanceId=instance_id, ImageId="89", KeyName="something", ) waiter = client.get_waiter("instance_running") waiter.wait(InstanceId=[instance_id]) print(f"Created {instance_id}") ※後述の nifcloud-sdk-python (開発者プレビュー版で記述)
  • 6.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API のメリット (3) 6 ◼ 繰り返し行う操作を自動化 • → 工数削減 ◼ 自動化によるオペミス削減 • → 品質向上 ◼ 構成管理への応用 • → インフラをソースコードとして管理 (Infrastructure as a Code)
  • 7.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED ニフクラ各サービス API のご紹介 ◼ Computing • サーバー • ディスク • SSH キー • OS イメージ • ロードバランサー • マルチロードバランサー • ファイアウォール • SSL 証明書 • 利用状況 • アップロード • 付替 IP アドレス • 追加 NIC オートスケール • 基本監視 • プライベート LAN • ルーター • VPN ゲートウェイ • サーバーセパレート 7 ◼ NAS • NAS サーバー • NAS ファイアウォール • モニタリング ◼ スクリプト • スクリプト実行 ◼ 専有エンドポイント • 専有エンドポイント • 専有エンドポイント FW グループ • モニタリング ◼ RDB • DB サーバー • オプション • DB スナップショット • DB パラメーターグループ • イベント • イベント通知 • DB ログ • モニタリング • 証明書 ◼ DNS • ゾーン操作 • レコード操作 ◼ ESS • 送信元メアド管理 • 送信元ドメイン管理 • メール送信 • 利用状況確認 • DKIM 設定管理 • 配信ログ取得 ◼ オブジェクトストレージ • バケット操作 • オブジェクト操作 https://cloud.nifty.com/api/
  • 8.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED ニフクラ公式 SDK・CLI ◼ SDK (https://cloud.nifty.com/api/sdk/) • ニフクラ Computing SDK for Java • ニフクラ RDB・DNS・ESS SDK for Java • ニフクラ オブジェクトストレージ SDK for Java • ニフクラ RDB・DNS SDK for PHP ◼ CLI (https://cloud.nifty.com/api/cli/) • ニフクラ Computing CLI 8 → 対応サービス拡充・対応言語拡充を検討中!
  • 9.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED ニフクラ SDK for Python (開発者プレビュー版) ◼ 特長 • ニフクラの複数サービスに対応 (Computing / RDB / NAS / Script) • 付属のデバッグ CLI でコマンドラインから動作確認 が可能 • AWS SDK JSON 互換によるデータ駆動の仕組みを採 用 ◼ 紹介ブログ記事 • https://blog.pfs.nifcloud.com/nifcloud_sdk_pytho n 9
  • 10.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED FJCT におけるニフクラ API 活用事例 ◼ メイン機能利用 • オブジェクトストレージ操作 • メール送信 (HTTP 経由) • スクリプト実行 10 ◼ 構築自動化 • Computing サーバー作成 • RDB DB サーバー作成 • NAS NAS サーバー作成 ◼ 運用自動化 • Computing SSL 証明書更新 • RDB FW グループ設定変更 ◼ リソース監視 • Computing リソース監視 • RDB フェイルオーバー監視
  • 11.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API を利用した構築自動化 (ansible-role-nifcloud) ◼ ansible-role-nifcloud • https://github.com/nifcloud/ansible-role- nifcloud • ansible から API を利用したニフクラリソースの管 理が可能 • 現在は Computing サーバー / FW グループ / ロー ドバランサー / 増設ディスクに対応 ◼ 利用イメージ • (次スライド参照) 11
  • 12.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API を利用した構築自動化 (利用イメージ) 12 - name: Start server local_action: module: nifcloud access_key: "YOUR ACCESS KEY" secret_access_key: "YOUR SECRET ACCESS KEY" endpoint: "jp-west-1.computing.api.nifcloud.com" instance_id: "web001" state: "running" image_id: "26" key_name: "dummykey" security_group: "webfw" instance_type: "mini" availability_zone: "west-11" accounting_type: "2" ip_type: "static" startup_script: "roles/infrastructure/template/startup_script" startup_script_vars: dummy_var: "DUMMY" network_interface: - network_id: net-COMMON_GLOBAL ipAddress: "0.0.0.0"
  • 13.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API を利用した運用自動化 自分のチームでは細々とした運用の自動化は nifcloud-sdk-python に同梱されている nifcloud-debugcli で行っています。 13 ## API キーとデフォルトリージョンの設定 $ export AWS_ACCESS_KEY_ID=<Your NIFCLOUD Access Key ID> $ export AWS_SECRET_ACCESS_KEY=<Your NIFCLOUD Secret Access Key> $ export AWS_DEFAULT_REGION=jp-east-1 ## 利用可能なサービスの一覧を表示 $ nifcloud-debugcli help ## 指定されたサービスで利用可能な API の一覧を表示 $ nifcloud-debugcli computing help ## 指定されたアクションで利用可能なパラメーターの一覧を表示 $ nifcloud-debugcli computing create-key-pair help ## 実際にコマンドを実行 (下記は料金が発生しない SSH キー作成の API を実行しています) $ nifcloud-debugcli computing create-key-pair --key-name foobar123 --password foobar123
  • 14.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED API を利用した運用自動化 14 ## lb001 に他部署から依頼のあった IP 許可 (5 つ) を投入 nifcloud-debugcli computing set-filter-for-load-balancer ¥ --load-balancer-name lb001 ¥ --load-balancer-port 443 ¥ --instance-port 8080 ¥ --ip-addresses '[ {"IPAddress": “XXX.YYY.ZZZ.1"}, {"IPAddress": “XXX.YYY.ZZZ.2"}, {"IPAddress": “XXX.YYY.ZZZ.3"}, {"IPAddress": “XXX.YYY.ZZZ.4"}, {"IPAddress": “XXX.YYY.ZZZ.5"}, {"IPAddress": “XXX.YYY.ZZZ.6"}, ]' ◼ 作業手順書にも下記のように書くだけでよい • → 工数削減・オペミス削減
  • 15.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED まとめ ◼ ニフクラ各サービスでは API およびそれに 付随する SDK / CLI を提供しています ◼ API を有効活用することで構築・運用コスト を大幅に削減することが可能 ◼ ぜひニフクラの各種 API をご活用ください 15
  • 16.
    Copyright 2018 FUJITSUCLOUD TECHNOLOGIES LIMITED 16