SlideShare a Scribd company logo
IDCFクラウドではじめる
「はじめてのサーバ構築自動化
+Wordpress 環境構築の自動化」
2016年4月23日
IDCFクラウドユーザー会(つくば)
大野 智之
twitter: @tabimoba
自己紹介
• IDCFクラウドユーザー会 つくばの代表をしてい
ます(はじめました!)
• つくば市内のIT関連企業に勤務している会社員
• Webサイト(ホームページ)の構築、
Webシステムの開発、社内外のサーバの構築・
運用保守(オンプレ・クラウド)をメインに
行っています。
• IDCFクラウドも、もちろん利用しています。
大野 智之 (@tabimoba)
発表内容
• 1.サーバ(仮想マシン VM)を自動構築する
• cloudstack-apiを用いて自動構築する
• 2.アプリ環境を自動構築する
• Ansibleを用いて自動構築する
発表内容
• 1.サーバ(仮想マシン VM)を自動構築する
• cloudstack-apiを用いて自動構築する
• 2.アプリ環境を自動構築する
• Ansible(今回はやめました)シェルスクリプトを用いて自動構築する
対象となる方
• サーバやWebアプリ環境構築の自動化に関心のある方
• IDCFクラウドで何が出来るか知りたい方
事前準備 (Macの場合)
• 1.MacPorts または Homebrewのインストール
• jqのインストールに必要となります
• 2.API Key, Secret Key, エンドポイント 各情報の入手
• 3.cloudstack-apiのインストール
• 下記URL(IDCFクラウドAPIドキュメントサイト)を参考に
http://docs.idcf.jp/cloud/introduction/
• 4.Ansibleのインスト−ル
• 5.その他必要なコマンドのインストール(jqなど)
• 5.作業計画を立てる
• どのような作業を自動化させるか、どこまでを自動化させるか。
• 最初から自動化を始めようするのではなく、まずは自動化させたい操作を
手動で確��しながら(コマンドを1つ1つ打ちながら)進めるのが良いです。
• 自動化するにあたって何をすべきか(どのようにすべきか)理解しやすくなります。
サーバ構築自動化の流れ (cloudstack-api)
• 1.SSH秘密鍵の作成
• 2.VM作成
• 3.ファイアウォールポリシーの設定
• 4.ポートフォワーディングの設定
• 5.管理端末(手元のPC)の~/.ssh/config を更新
ここまで完了すれば、IDCFクラウドのコンピューティングの管理画面(ダッシュボード)
でVMが追加されたこと、ファイアウォールおよびポートフォワーディングが指定された
通りに設定されたことが確認できるはずです。
cloudstack-apiについて
• IDCFクラウドは、CloudStackというクラウド基盤ソフトウェアを利用
してサービスが提供されています。
• IDCFクラウドを含め、CloudStackベースのほとんどのサービスでは、
CloudStack APIを用いてVM(仮想マシン)の構築やネットワーク関連
の設定変更(ファイアウォールの設定、ポートフォワーディング設定、
IPアドレス追加等)が行えます。
• cloudstack-apiは、cli(コマンドライン)でCloudStack APIを操作する
ためのコマンドです。
• 実行結果に対する戻り値はjson形式で返ります。
cloudstack-api 実行結果の例
1.SSH秘密鍵の作成
• cloudstack-api createSSHKeyPairを実行します。
• 以下の例では、json形式の戻り値をtmpSSHPrivaeKey_test01という
ファイルに出力してから、秘密鍵をjqコマンドで取り出しています。
$ cloudstack-api createSSHKeyPair --name test01 > tmpSSHPrivateKey_test01
$ cat tmpSSHPrivateKey_test01 |
jq --raw-output '.createsshkeypairresponse.keypair.privatekey' > ~/.ssh/test01.keychmod 600 ~/.ssh/test01.key
2.VMの作成(1)はじめに
• VM(仮想マシン)を作成するには、事前に次の情報を
確認しておく必要があります。
• ゾーンID
• サービスオファリングID
• テンプレートID
2.VMの作成(2)ゾーンIDの確認
• cloudstack-api deployVirtualMachineコマンドを実行します。
• 以下の例では、json形式の戻り値をtmpSSHPrivaeKey_test01という
ファイルに出力してから、秘密鍵をjqコマンドで取り出しています。
$ cloudstack-api deployVirtualMachine 
--serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 
--templateid ee7bc439-0186-49b4-82e4-bf821db89601 
--zoneid a117e75f-d02e-4074-806d-************ 
--group test 
--keypair test01 
--name test01 > tmpCreateVM_test01
$cat tmpCreateVM_test01 |jq -r '.deployvirtualmachineresponse.id' > tmpDeployVM_test01
$cloudstack-api listVirtualMachines --id `cat tmpDeployVM_test01` > tmpListVM_test01
2.VMの作成(3)サービスオファリングIDの確認
• cloudstack-api deployVirtualMachineコマンドを実行します。
• 以下の例では、json形式の戻り値をtmpSSHPrivaeKey_test01という
ファイルに出力してから、秘密鍵をjqコマンドで取り出しています。
$ cloudstack-api deployVirtualMachine 
--serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 
--templateid ee7bc439-0186-49b4-82e4-bf821db89601 
--zoneid a117e75f-d02e-4074-806d-************ 
--group test 
--keypair test01 
--name test01 > tmpCreateVM_test01
$cat tmpCreateVM_test01 |jq -r '.deployvirtualmachineresponse.id' > tmpDeployVM_test01
$cloudstack-api listVirtualMachines --id `cat tmpDeployVM_test01` > tmpListVM_test01
2.VMの作成(4)テンプレートIDの確認
• cloudstack-api deployVirtualMachineコマンドを実行します。
• 以下の例では、json形式の戻り値をtmpSSHPrivaeKey_test01という
ファイルに出力してから、秘密鍵をjqコマンドで取り出しています。
$ cloudstack-api deployVirtualMachine 
--serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 
--templateid ee7bc439-0186-49b4-82e4-bf821db89601 
--zoneid a117e75f-d02e-4074-806d-************ 
--group test 
--keypair test01 
--name test01 > tmpCreateVM_test01
$cat tmpCreateVM_test01 |jq -r '.deployvirtualmachineresponse.id' > tmpDeployVM_test01
$cloudstack-api listVirtualMachines --id `cat tmpDeployVM_test01` > tmpListVM_test01
2.VMの作成(5)deployVirtualMachineの実行
• cloudstack-api deployVirtualMachineを実行します。
• 作成されたVMは、cloudstack-api listVirtualMachines –id <VMのID>
を実行することで確認できます。
• 本コマンドを実行すると、VMが作成された後に起動されます。
(ので、起動のための操作は不要です)
$ cloudstack-api deployVirtualMachine 
--serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 
--templateid ee7bc439-0186-49b4-82e4-bf821db89601 
--zoneid a117e75f-d02e-4074-806d-************ 
--group test 
--keypair test01 
--name test01 > tmpCreateVM_test01
$cat tmpCreateVM_test01 |jq -r '.deployvirtualmachineresponse.id' > tmpDeployVM_test01
$cloudstack-api listVirtualMachines --id `cat tmpDeployVM_test01` > tmpListVM_test01
3.ファイアウォールポリシーの設定(1)はじめに
• VM(仮想マシン)を作成するには、事前に次の情報を
確認しておく必要があります。
• IPアドレスID
• また、次の情報を検討しておく必要があります。
• プロトコル(TCP/UDP)
• アクセスを許可するポート(範囲)
• アクセスを許可するIPアドレス ※IPアドレスを制限しない場合は不要
3.ファイアウォールポリシーの設定(2)
IPアドレスIDの確認
• cloudstack-api createPortForwardingRuleを実行します。
• 以下は、TCP/21022,TCP/21080ポートを外部に開放する設定です。
$ cloudstack-api createFirewallRule --ipaddressid eefdf9dc-f5d7-46cf-85a7-************ --protocol TCP --
startport 21022 --endport 21022
$ cloudstack-api createFirewallRule --ipaddressid eefdf9dc-f5d7-46cf-85a7-************ --protocol TCP --
startport 21080 --endport 21080
3.ファイアウォールポリシーの設定(3)
• cloudstack-api createPortForwardingRuleを実行します。
• 以下は、TCP/21022,TCP/21080ポートを外部に開放する設定です。
$ cloudstack-api createFirewallRule --ipaddressid eefdf9dc-f5d7-46cf-85a7-************ --protocol TCP --
startport 21022 --endport 21022
$ cloudstack-api createFirewallRule --ipaddressid eefdf9dc-f5d7-46cf-85a7-************ --protocol TCP --
startport 21080 --endport 21080
4.ポートフォワーディングの設定(1)はじめに
• VM(仮想マシン)を作成するには、事前に次の情報を
確認しておく必要があります。
• IPアドレスID
• バーチャルマシンID (作成されたVMのID)
• また、次の情報を検討しておく必要があります。
• プロトコル(TCP/UDP)
• 転送元(VMの)ポート
• 転送先(パブリックの)ポート
4.ポートフォワーディングの設定(2)
• cloudstack-api createPortForwardingRuleを実行します。
• 以下の場合は、test01というVMのTCP/22(SSH)とTCP/80(HTTP)を
TCP/21022,TCP/21080として公開する設定となっています。
• virtualmachineidは、VM作成時に取得したIDをファイルへ出力しておくと、
--virtualmachineid `cat tmpDeployVM_test01` のように指定することで
そのIDをセットすることができます。
(自動化する際は、このような形で情報を保持しておく必要があります)
$ cloudstack-api createPortForwardingRule --ipaddressid eefdf9dc-f5d7-46cf-85a7-************ --protocol TCP -
-virtualmachineid `cat tmpDeployVM_test01` --privateport 22 --publicport 21022
$ cloudstack-api createPortForwardingRule --ipaddressid eefdf9dc-f5d7-46cf-85a7-************ --protocol TCP -
-virtualmachineid `cat tmpDeployVM_test01` --privateport 80 --publicport 21080
5.管理端末(手元のPC)の~/.ssh/config を更新
• 管理端末の~/.ssh/config追加したVMへの接続情報を追加します。
• 本設定を行うことで、ssh <IPアドレス>:<ポート番号>ではなく、
ssh <指定された名前>でSSH接続出来るようになります。
$ touch tmpConfig_test01
$ echo "Host test01" >> tmpConfig_test01
$ echo “ Hostname 210.140. ***.***" >> tmpConfig_test01
$ echo " Port 21022" >> tmpConfig_test01
$ echo " User root" >> tmpConfig_test01
$ echo " IdentityFile ~/.ssh/test01.key" >> tmpConfig_test01
$ cat tmpConfig_test01 >> ~/.ssh/config
1〜5をシェルスクリプトにするとこんな感じ
#/bin/sh
# SSH秘密鍵を発行する
cloudstack-api createSSHKeyPair --name test01 > tmpSSHPrivateKey_test01
cat tmpSSHPrivateKey_test01 | jq --raw-output '.createsshkeypairresponse.keypair.privatekey' > ~/.ssh/test01.key
chmod 600 ~/.ssh/test01.key
# VMを作成する
cloudstack-api deployVirtualMachine 
--serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 
--templateid ee7bc439-0186-49b4-82e4-bf821db89601 
--zoneid a117e75f-d02e-4074-806d- ************ 
--group test 
--keypair test01 
--name test01 > tmpCreateVM_test01
cat tmpCreateVM_test01 |jq -r '.deployvirtualmachineresponse.id' > tmpDeployVM_test01
cloudstack-api listVirtualMachines --id `cat tmpDeployVM_test01` > tmpListVM_test01
# ファイアウォールルールを設定する
cloudstack-api createFirewallRule --ipaddressid eefdf9dc-f5d7-46cf-85a7- ************ --protocol TCP --startport 21022 --endport 21022
cloudstack-api createFirewallRule --ipaddressid eefdf9dc-f5d7-46cf-85a7- ************ --protocol TCP --startport 21080 --endport 21080
# ポートフォワーディングルールを設定する
cloudstack-api createPortForwardingRule --ipaddressid eefdf9dc-f5d7-46cf-85a7- ************ --protocol TCP --virtualmachineid `cat tmpDeployVM_test01` --privateport 22 --publicport
21022
cloudstack-api createPortForwardingRule --ipaddressid eefdf9dc-f5d7-46cf-85a7- ************ --protocol TCP --virtualmachineid `cat tmpDeployVM_test01` --privateport 80 --publicport
21080
# SSHConfigを更新する
touch tmpConfig_test01
echo "Host test01" >> tmpConfig_test01
echo " Hostname 210.140. ***.***" >> tmpConfig_test01
echo " Port 21022" >> tmpConfig_test01
echo " User root" >> tmpConfig_test01
echo " IdentityFile ~/.ssh/test01.key" >> tmpConfig_test01
cat tmpConfig_test01 >> ~/.ssh/config
引数で値を変更できるように
すると、1回限りでは無く、
汎用的に使えます。
デモ(サーバ構築自動化〜SSH接続まで)
Webアプリ環境構築自動化の流れ
• 1.Swapの追加
• 2.パッケージのアップデート
• 3.サードパーティーリポジトリの追加(remi, epel,repoforge)
• 4.remi-php70リポジトリでPHP7をインストール
• 5.Apache,MariaDBデーモン自動実行設定
• 6.Apache,MariaDBの起動
• 7.MariaDBの設定
• ユーザー追加、パスワード設定、DB追加
• 8.Wordpressのインストール
• 9.WordpressのためのDB設定情報を返す
ここまで完了すれば、http://<IPアドレス>:<ポート番号>/へ
アクセスすることで、Wordpressのインストール画面が見えるはずです。
デモ
(ansible-playbook実行〜Wordpressインストール画面表示まで)

More Related Content

Idcfクラウドで始める構築自動化