狠狠撸

狠狠撸Share 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回限りでは無く、
汎用的に使えます。
デモ(サーバ构筑自动化?厂厂贬接続まで)
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

滨诲肠蹿クラウト?て?始める构筑自动化