この記事は 富士通クラウドテクノロジーズ Advent Calendar 2019 の8日目の記事です。
昨日は @tunakyonn さんの 「M3DBの知見をまとめてみた」 でした。
なぜM3DB?と思ったのですが、prometheusの監視データ保存先として考えているんですね。
自分も、若くて勢いのあるプロダクトをサービスへ取り入れる際は、改変頻度やクオリティに苦労しながらも、ワクワクしながら取り組んでいます。
是非上手くいって欲しいです。
はじめに
仕事では、ITインフラストラクチャサービスの企画・設計・開発・運用を担当している @ysaotome です。
最近、サービス利用者より「 ニフクラCLI の使い方を説明して欲しい」とご相談頂く事が何度かありましたので、改めてPhotonやdockerを使った簡単な使い方を纏められればと思います。
「自動化」という言葉が叫ばれて久しいですが、国内の実態として、様々な理由により中々進んでない様に感じています。要因の一つとして、いきなり高度な自動化にチャレンジして挫折してしまう。といった事が挙げられると思います。そんな要因の対策として、先ずはCLIを用いたコマンドベースで手軽に手作業の簡略化から体感してみるのは如何でしょうか。
今回は「ニフクラ上でニフクラCLI実行環境を作る」方法と「ニフクラCLIを使った自動化サンプル」をステップ・バイ・ステップで紹介出来ればと思います。
特に躓かなければ10分程度でニフクラCLIが実行出来る様になります。
- 本記事は 2019/12/07記載時点の情報です。
構築環境
実行環境としてdockerホストとdockerイメージを利用します。
※環境構築してCLI実行するだけならば、特にdocker自体の知識は不要です。
- dockerイメージ
- ニフクラCLI の環境構築は難しくありませんが、今回はより手軽に実行する手法として環境構築済dockerイメージを利用します。
- dockerイメージは @tily さんが作られた
nifcloud-computing-cli-docker
を利用します。 - ニフティクラウド Computing CLI 用の docker イメージを作ってみた
- dockerイメージは @tily さんが作られた
- ニフクラCLI の環境構築は難しくありませんが、今回はより手軽に実行する手法として環境構築済dockerイメージを利用します。
- dockerホスト
- VMware Photon OS 3.0
- ニフクラ上で手軽にdockerイメージを実行出来る様に工夫されている Photon OS イメージを利用します。下記記事で詳細を解説しています。
- Dockerがすぐ動かせる Photon OS【VMware謹製】のパブリックイメージをニフクラにリリース!
- VMware Photon OS 3.0
- dockerホストへ接続するためのSSH接続環境
- ニフクラ上のサーバー
ニフクラ上でニフクラCLI実行環境を作る
ニフクラコントロールパネルへログイン
VMware Photon 3.0イメージでサーバーを作成
「コンピューティング」の左メニューから「サーバー」を選択し「サーバー作成」ボタンを押下
「サーバー作成」を押下 「サーバー作成」ウィザードの「01 イメージ選択」にて、検索ボックスに
photon os 3.0
と入力して表示される「VMware Photon OS 3.0」を選択VMware Photon OS 3.0イメージを選択 「サーバー作成」ウィザードの「02 サーバータイプ選択」にて、配備する「ゾーン」を選択、タイプは「c-small」を選択
- ゾーンは特に拘り等無ければ、現在は east-11 か east-12 へ作成すると良い。
- e-miniでも良いが、c-smallの方がストレス無く実行出来ます。
配備するゾーンとタイプを選択
「サーバー作成」ウィザードの「03 サーバー設定」にて、「サーバー名」に
clitest
、「メモ」にNIFCLOUD CLI TEST
を入力、「料金プラン」は従量
を選択、「SSHキー」と「ファイアウォール」は必要に応じて新規作成(作成時はそれぞれウィザード画面内で「SSHキー作成」「ファイアウォールルール作成」を忘れずに押下する事)、「ネットワーク」は特似変更せず、「確認」ボタンを押下
「サーバー作成」ウィザードの「04 確認」にて、内容に問題無い事を確認したら、「作成する」ボタンを押下
作成するサーバーの最終確認 サーバー作成が開始されます。
- 作成するゾーンによりますが、2~3分程度で作成されます。
VMware Photon 3.0がセットアップされたサーバーを作成中
- 作成するゾーンによりますが、2~3分程度で作成されます。
サーバー作成後の情報を確認
- サーバーに割り当てられたグローバルIPアドレスを確認(キャプチャ上マスクしていますが、
27.133.xxx.xxx
となっている所です)サーバー作成後の画面
- サーバーに割り当てられたグローバルIPアドレスを確認(キャプチャ上マスクしていますが、
SSHクライアント(RLogin)で作成したサーバーへ接続
- SSHクライアント(RLogin)を起動
- 「ファイル」メニューの「サーバーに接続」から「新規」を選択
- 接続設定画面を次の通り設定
- 「Server Select」画面で「clitest」を選択して「OK」を押下
- 最初の接続時のみ「公開鍵の確認」画面が表示されるので、内容に問題なければ「接続する」を押下
- 内容の確認方法は気になる人は別途調べると良いです
公開鍵の確認
- 内容の確認方法は気になる人は別途調べると良いです
- 設定に問題無ければログインしてコマンドプロンプトが表示されます。
ログイン後のコマンドプロンプト
ニフクラCLI環境構築済dockerイメージを利用可能にする
- dockerホストを利用出来る様に設定する
systemctl enable docker
とsystemctl start docker
を実行してdockerを利用出来る様にします
root@photon-machine [ ~ ]# systemctl enable docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. root@photon-machine [ ~ ]# systemctl start docker
- 実行確認の
docker version
コマンドでdockerのバージョン確認。下記の様に表示されれば問題なし。
root@photon-machine [ ~ ]# docker version Client: Version: 18.06.1 API version: 1.38 Go version: go1.10.7 Git commit: e68fc7a Built: Mon Feb 4 16:35:01 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.06.1 API version: 1.38 (minimum version 1.12) Go version: go1.10.7 Git commit: e68fc7a Built: Mon Feb 4 16:36:56 2019 OS/Arch: linux/amd64 Experimental: false
ニフクラコントロールパネルへ戻り、API実行に必要な「アクセスキー」と「シークレットキー」を入手する
- ニフクラコントロールパネル上部メニューの自分のIDを押下し、メニューから「アカウント管理」を押下
アカウント管理を表示する - 自分のアカウントを押下して「アクセスキー」を表示してメモ
アクセスキー表示 - さらに自分のアカウント枠内の「表示」ボタンを押下して「シークレットアクセスキー」を表示してメモ
シークレットアクセスキー表示
- ニフクラコントロールパネル上部メニューの自分のIDを押下し、メニューから「アカウント管理」を押下
SSHクライアント(RLogin)へ戻りメモした「アクセスキー」と「シークレットアクセスキー」を入れた設定ファイルを作成する
- cat コマンドにてファイル名
nifcloud-cli.env
で下記内容のファイルを作成する
NIFTY_CLOUD_URL=https://jp-east-1.computing.api.nifcloud.com/api/ NIFTY_ACCESS_KEY_ID=メモした「アクセスキー」 NIFTY_SECRET_KEY=メモした「シークレットアクセスキー」
- 実行例
root@photon-machine [ ~ ]# cat <<ENV > nifcloud-cli.env > NIFTY_CLOUD_URL=https://jp-east-1.computing.api.nifcloud.com/api/ > NIFTY_ACCESS_KEY_ID=XXXXXXXXXXXX > NIFTY_SECRET_KEY=XXXXXXXXXXXXXXXXXXX > ENV
- NIFCLOUD CLIをテストで実行してみる
nifty-describe-regions
で利用可能なリージョン一覧を取得してみる- 最初の実行時のみ、dockerイメージの取得後に実行される
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-regions Unable to find image 'tily/niftycloud-computing-cli:latest' locally latest: Pulling from tily/niftycloud-computing-cli 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete 5b816da257b4: Pull complete c19b88db8f77: Pull complete 040817bae98e: Pull complete a30bb200c4e6: Pull complete Digest: sha256:1740dd1d9519f2e2a04dbccb3d20c249fefcfe65a365ccc59b0c27809636e88c Status: Downloaded newer image for tily/niftycloud-computing-cli:latest REGION east-1 jp-east-1.computing.api.nifcloud.com true REGION east-2 jp-east-2.computing.api.nifcloud.com false REGION east-3 jp-east-3.computing.api.nifcloud.com false REGION jp-east-4 jp-east-4.computing.api.nifcloud.com false REGION west-1 jp-west-1.computing.api.nifcloud.com false
- 2回目の実行はdockerイメージの取得処理が無いのでシンプル
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-regions REGION east-1 jp-east-1.computing.api.nifcloud.com true REGION east-2 jp-east-2.computing.api.nifcloud.com false REGION east-3 jp-east-3.computing.api.nifcloud.com false REGION jp-east-4 jp-east-4.computing.api.nifcloud.com false REGION west-1 jp-west-1.computing.api.nifcloud.com false
- 以上でニフクラCLIが利用可能になりました
ニフクラCLIを使った簡単なサンプル
リージョン一覧を取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-regions --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-regions --headers IdType Name Endpoint Messages Default REGION east-1 jp-east-1.computing.api.nifcloud.com false REGION east-2 jp-east-2.computing.api.nifcloud.com true REGION east-3 jp-east-3.computing.api.nifcloud.com false REGION jp-east-4 jp-east-4.computing.api.nifcloud.com false REGION west-1 jp-west-1.computing.api.nifcloud.com false
ゾーン一覧を取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-availability-zones --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-availability-zones --headers IdType Name State Region Messages SecurityGroupSupported Default AVAILABILITYZONE east-11 available east-1 true false AVAILABILITYZONE east-12 available east-1 true true AVAILABILITYZONE east-13 available east-1 true false AVAILABILITYZONE east-14 available east-1 true false
ファイアウォールグループの設定情報を取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-security-groups --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-security-groups --headers IdType GroupName GroupStatus GroupDescription GroupRuleLimitUpdate GroupLogLimitUpdate GroupLogFilterNetBios AvailabilityZone GROUP SSHxDB applied メモ 100 1000 false east-13 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxDB TCP 22 22 IN CIDR 0.0.0.0/0 IdType GroupName GroupStatus GroupDescription GroupRuleLimitUpdate GroupLogLimitUpdate GroupLogFilterNetBios AvailabilityZone GROUP SSHxWEB applied 100 1000 false east-13 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxWEB TCP 22 22 IN CIDR 0.0.0.0/0 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxWEB TCP 80 80 IN CIDR 0.0.0.0/0 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxWEB TCP 443 443 IN CIDR 0.0.0.0/0
ファイアウォールグループ名「SSHxWEB」配下のルールを取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-security-groups --filter "group-name=SSHxWEB" --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-security-groups --filter "group-name=SSHxWEB" --headers IdType GroupName GroupStatus GroupDescription GroupRuleLimitUpdate GroupLogLimitUpdate GroupLogFilterNetBios AvailabilityZone GROUP SSHxWEB applied 100 1000 false east-13 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxWEB TCP 22 22 IN CIDR 0.0.0.0/0 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxWEB TCP 80 80 IN CIDR 0.0.0.0/0 IdType GroupName IpProtocol FromPort ToPort InOut SourceType CidrIp PERMISSION SSHxWEB TCP 443 443 IN CIDR 0.0.0.0/0
ファイアウォールグループを新規作成する
- ゾーン「east-13」配下に、ファイアウォールグループ名「SSHxWEB」で新規作成する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-create-security-group "SSHxWEB" --availability-zone "east-13"
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-create-security-group "SSHxWEB" --availability-zone "east-13" GROUP SSHxWEB east-13
ファイアウォールグループへルールを追加する
- ルール追加前にファイアゥオールグループを作成しておく必要があります
- ファイアウォールグループ名「SSHxWEB」へ以下のルールを追加する
インターネット(0.0.0.0/0)からの「80/TCP(http)」「443/TCP(https)」「22/TCP(ssh)」通信許可 ファイアウォールグループ「SSHxDMZ」からの全て(ANY)の通信許可
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 80 --in-out IN --source-subnet "0.0.0.0/0" docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 443 --in-out IN --source-subnet "0.0.0.0/0" docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 22 --in-out IN --source-subnet "0.0.0.0/0" docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol ANY --in-out IN --source-group "SSHxDMZ"
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 80 --in-out IN --source-subnet "0.0.0.0/0" GROUP SSHxWEB PERMISSION SSHxWEB TCP 80 80 IN CIDR 0.0.0.0/0 root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 443 --in-out IN --source-subnet "0.0.0.0/0" GROUP SSHxWEB PERMISSION SSHxWEB TCP 443 443 IN CIDR 0.0.0.0/0 root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 22 --in-out IN --source-subnet "0.0.0.0/0" GROUP SSHxWEB PERMISSION SSHxWEB TCP 22 22 IN CIDR 0.0.0.0/0 root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-authorize-security-group-ingress "SSHxWEB" --protocol ANY --in-out IN --source-group "SSHxDMZ" GROUP SSHxWEB PERMISSION SSHxWEB ANY IN GRPNAME SSHxDMZ
OSイメージ一覧を取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "all" --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "all" --headers IdType ImageID Name Owner OwnerAlias State Accessibility ProductCodes Architecture ImageType KernelId RamdiskId Platform RootDeviceType Description Redistributable AvailabilityZone IMAGE 89 Ubuntu Server 16.04 LTS niftycloud FUJITSU CLOUD TECHNOLOGIES LIMITED available public x86_64 machine ubuntu disk true DetailDescription IdType ImageID Name Owner OwnerAlias State Accessibility ProductCodes Architecture ImageType KernelId RamdiskId Platform RootDeviceType Description Redistributable AvailabilityZone IMAGE 157 Windows Server 2016 Std niftycloud FUJITSU CLOUD TECHNOLOGIES LIMITED available public x86_64 machine windows disk true DetailDescription ・ ・ ・ ・
自分が作成したOSイメージ一覧を取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "self" --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "self" --headers IMAGE 12350 CentOS5LVM self ニフティクラウドユーザーブログライター available private x86_64 machine linux disk true east-1.east-12 IMAGE 16378 Ubuntu1310x8664 self ニフティクラウドユーザーブログライター available private x86_64 machine ubuntu disk true east-1.east-13 ・ ・ ・ ・
OSイメージを指定してサーバーを作成する
- OSイメージを指定するため、事前に対象OSイメージの「ImageID」を取得しておく必要があります
- SSHキーを指定するため、事前に設定するSSHキー名を取得しておく必要があります
- プライベートなOSイメージ「Ubuntu1310x8664」からサーバーを作成する(コピーする)
- 「Ubuntu1310x8664」の 「ImageID」を取得
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "self" --headers | grep Ubuntu1310x8664
- 実行結果例
- 以下の実行結果からイメージ「Ubuntu1310x8664」の「ImageID」は
16378
である事が判る
- 以下の実行結果からイメージ「Ubuntu1310x8664」の「ImageID」は
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "self" --headers docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-images --owner "self" --headers | grep Ubuntu1310x8664 IMAGE 16378 Ubuntu1310x8664 self ニフティクラウドユーザーブログライター available private x86_64 machine ubuntu disk true east-1.east-13
- SSHキーの一覧を取得する
- コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-keypairs --headers
- 実行結果例
- 以下の実行結果からSSHキー名が
niftycloudTest
である事が判る
- 以下の実行結果からSSHキー名が
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-describe-keypairs --headers IdType KeyPair Fingerprint KEYPAIR niftycloudTest 88:7b:e4:19:94:6b:a7:89:91:52:6f:95:c2:00:09:6b:f0:ab:4c:57
- 「ImageID」が
16378
のOSイメージ名 「Ubuntu1310x8664」からサーバーを作成する - コマンド
docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-run-instances "16378" --instance-id "UbuntuTest" --group "SSHxWEB" --key "niftycloudTest" --instance-type "double-large32" --accounting-type "2" --availability-zone "east-13" --disable-api-termination "true" --headers
- 実行結果例
root@photon-machine [ ~ ]# docker run --env-file nifcloud-cli.env --rm tily/niftycloud-computing-cli nifty-run-instances "16378" --instance-id "UbuntuTest" --group "SSHxWEB" --key "niftycloudTest" --instance-type "double-large32" --accounting-type "2" --availability-zone "east-13" --disable-api-termination "true" --headers IdType GroupId GROUP SSHxWEB IdType InstanceId ImageId DnsName PrivateDnsName State KeyName LaunchIndex ProductCodes InstanceType LaunchTime AvailabilityZone KernelId RamdiskId MonitoringState IpAddress PrivateIpAddress IpAddressV6 PrivateIpAddressV6 SubnetId VpcId RootDeviceType Admin AccountingType IpType PrivateIpType Architecture Platform INSTANCE UbuntuTest Ubuntu1310x8664 pending double-large32 2014-09-12T19:34:30+09:00 east-13 monitoring-disabled disk 2 static static x86_64 ubuntu
まとめ
改めて「ニフクラ上でニフクラCLI実行環境を作る」方法と「ニフクラCLIを使った自動化サンプル」をステップ・バイ・ステップで紹介させて頂きました。
最初のステップとしてコマンドラインで手作業を自動化してみるのは如何でしょうか。
また、 GitHubのニフクラプロジェクト では、より複雑な処理を自動化するためのツールを多数公開しています。 例えば nifcloud-sdk-python を利用する事で、よりプログラミングに近い形で実装する事が可能です。
スキルや実現したい事に合わせて選択為ていただければと思います。