Microsoft Azure CentOS7.2の実態
これまでMicrosoft Azureの利用方法や仮想マシンの作成、ディスク増設、ロードバランサの作成などを中心に記事化してきました。
本記事ではもう少しOSの中身に触れていこうと思います。
Microsoft Azureが提供するCentOSにはどういったバージョンが用意されており、中身がどうなっているかの実態についてメスを入れたいと思います。作成してログインして初めて知った、というクラウドサービスも多いと思いますので、利用する前に少しでも参考になればと思います。
では最初にMicrosoft Azureが提供しているCentOSについて。
CentOSだけで見てもラインナップが多いな、という感触ですが、いわゆる仮想アプライアンスっぽいものを除くとCentOS-based *.*なるものが一般標準的なCentOSに見えます。CentOSはRHELディストリビューション互換のOSですので、RHELをご利用されているLinuxユーザーであれば親しみやすいバージョン表記と言えます。
Linuxユーザーが利用しているCentOSの多くは、centos.orgにあるISOイメージから展開したものだと思いますので、それに適合するものを選択しましょう。
CentOS-based 6.5
CentOS-based 6.6
CentOS-based 6.7
CentOS-based 7.0
CentOS-based 7.1
CentOS-based 7.2
CentOS5.xはないですが、6.xから最新の7.2までカバーされていることがわかります。
実はもう1つ気になる要素があります。公開元がOpenLogicとなっています。centos.orgではない点が長く利用されている人から見ると気持ち悪く見えるかもしれません。
OpenLogic(米)は各種オープンソース技術の商用サービスを提供しています。centos.orgのISOとの違いは中身を見るとわかりますが、waagentと呼ばれる Azureが管理するために必要なエージェントとwaagentがリポジトリに登録されている点だけですので、今まで慣れ親しんだCentOSと基本的なディストリビューションに変わりはありません。
では、早速最新版であるCentOS7.2の中身を覗いてみましょう。
今回作成したのはA2サイズのCentOS7.2です。
まずはCPUから。
[root@startuptest ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
stepping : 2
microcode : 0xffffffff
cpu MHz : 2397.183
cache size : 30720 KB
・・以下省略
XeonのE5-2673 v3 2.4GHzが使われているようですね。いいの使ってますね。
次にメモリ。
[root@startuptest ~]# cat /proc/meminfo
MemTotal: 3523796 kB
MemFree: 2916784 kB
MemAvailable: 3102256 kB・
・以下省略
3.36GBほど搭載されています。
次はディスク。
[root@startuptest ~]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 31440900 1327716 30113184 5% /
devtmpfs 1751956 0 1751956 0% /dev
tmpfs 1761896 0 1761896 0% /dev/shm
tmpfs 1761896 8480 1753416 1% /run
tmpfs 1761896 0 1761896 0% /sys/fs/cgroup
/dev/sdb1 139203080 61468 132047444 1% /mnt/resource
tmpfs 352380 0 352380 0% /run/user/1000
tmpfs 352380 0 352380 0% /run/user/0
[root@startuptest ~]#
これは以前の記事でも触れましたね。ローカルディスクとして利用できる容量は約30GBほどです。/mnt/resourceはテンポラリ用途で使う、でしたね。
もっといろいろ見ていきましょう。
hostsの初期設定。
[root@startuptest ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@startuptest ~]#
localhost localhost.localdomainはループバックアドレスに対するお約束です。
localhost4、localhost6、これはIPv6とIPv4が混在する環境で明示的にIPv4のループバックアドレスを指し示さなければならない場合にreservedされているホスト名ですね。
まぁ、特に意識する必要はなくIPaddress hostnameと今後追記していけばよさそうです。
次はネットワーク設定
[root@startuptest ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.4 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::20d:3aff:fe50:65cc prefixlen 64 scopeid 0x20<link>
ether 00:0d:3a:50:65:cc txqueuelen 1000 (Ethernet)
RX packets 41562 bytes 57325350 (54.6 MiB)
RX errors 0 dropped 51 overruns 0 frame 0
TX packets 8697 bytes 2911582 (2.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 193 bytes 33850 (33.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 193 bytes 33850 (33.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ここで???っと思われた方もいると思います。eth0のNICに割り振られているアドレスは192.18.0.0/24で切ったsubnet内のアドレス(192.168.0.4)です。イメージしていたのはeth0がAzureポータルで設定した静的なグローバルアドレス、eth1が192.168.0.4かと思わたのではないでしょうか。そうなんです、Azureではグローバルアドレスは別に管理されている、ということがわかります。これ結構、しっかりしているなぁと思う個所で、OSのネットワーク操作に慣れている方だと簡単にOS内でIPaddressを変更することだってできてしまいます。
パブリッククラウドで管理されているアドレスの多くはDHCPサーバーから取得する方式(Azureもそう)をとるため、既に誰かに払い出されているグローバルアドレスを任意にOS側で書き換える行為ができないように設計されている、ということがわかります。
次はeth0の設定をもう少し。
[root@startuptest network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DHCP_HOSTNAME=startuptest
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no
NM_CONTROLLED=no
[root@startuptest network-scripts]#
BOOTPROTOにdhcpとありますね。ps -efで見ると/sbin/dhclientのプロセスが起動していることもわかります。
次DNS。
[root@startuptest etc]# cat resolv.conf
; generated by /usr/sbin/dhclient-script
search dkmaz4wqi3oebdscr1r11xwogc.lx.internal.cloudapp.net
nameserver 168.63.129.16
[root@startuptest etc]#
どこだこれ、というnameserverが記載されていますが、whois情報で調べるとMicrosoft Corpと出ますので、マイクロソフトが管理しているネームサーバーが初期設定で登録されていることがわかります。nslookupで外部ドメインを検索するとIPアドレスが表示され正しく正引きできていることがわかります。
念のためnsswitch.confも。
[root@startuptest etc]# grep "^hosts" /etc/nsswitch.conf
hosts: files dns
[root@startuptest etc]#
filesの次にdnsとなってますね。ですので/etc/hostsを最初に名前解決として探しにいき、なければ/etc/resolv.confに記載したネームサーバーを上から順に聞きに行く、という経路になってます。
次は時刻。
[root@startuptest etc]# date
Thu Jun 23 06:57:16 UTC 2016
[root@startuptest etc]#
ただいま6月23日15:57 JST。。。。泣きそうです。
東日本リージョンで作成したのにー、とか野暮なことは言わず、サクッと以下のコマンドでタイムゾーンを変更して現在時刻にしましょう。
timedatectl set-timezone Asia/Tokyo
次はuptimeとsar。
[root@startuptest etc]# uptime
16:01:37 up 1:14, 1 user, load average: 0.02, 0.02, 0.05
[root@startuptest etc]#
[root@startuptest etc]# sar
Linux 3.10.0-327.18.2.el7.x86_64 (localhost.localdomain) 06/23/2016 _x86_64_ (2 CPU)02:48:04 PM LINUX RESTART
02:50:01 PM CPU %user %nice %system %iowait %steal %idle
03:00:01 PM all 2.58 0.00 0.40 2.64 0.00 94.37
03:10:01 PM all 0.34 0.00 0.08 1.54 0.00 98.04
03:20:01 PM all 0.31 0.00 0.06 1.59 0.00 98.04
03:30:01 PM all 0.31 0.40 1.12 3.34 0.00 94.83
03:40:01 PM all 0.32 0.00 0.07 1.02 0.00 98.59
03:50:01 PM all 0.35 0.00 0.10 0.03 0.00 99.52
04:00:01 PM all 0.31 0.00 0.08 0.03 0.00 99.58
Average: all 0.64 0.06 0.27 1.45 0.00 97.58
[root@startuptest etc]#
uptimeはともかくsarが標準で効く(sysstatが入っている)のは少し驚きです。
ちなみにtopコマンドも利用できますね。
top - 16:04:35 up 1:17, 1 user, load average: 0.12, 0.04, 0.05
Tasks: 235 total, 2 running, 233 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.6 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3523796 total, 2806272 free, 214012 used, 503512 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3057176 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29421 root 20 0 157804 2316 1536 R 1.3 0.1 0:00.06 top
1 root 20 0 126472 7284 2632 S 0.0 0.2 0:05.09 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.13 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
次はiptables。
[root@startuptest ~]# systemctl status iptables
● iptables.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
[root@startuptest ~]#
はう!っと雄たけびを上げそうになりましたが、CentOS7からiptablesではなくfirewalldを使うようになります。といってもfirewalldはiptablesをラップしたもののようですので、実態はiptablesですが、今ままで慣れ親しんだ小難しいルール設定をぶち込むことができなくなります。iptablesとfirewalldは併用できないので、どうしてもiptablesを使いたい場合はyum install iptables.serviceから個別でインストールし、firewalldをsystemctlでdisableする必要がありそうです。
さて、だいぶ記事が長くなってきたので本記事はこの辺で一旦終わり、続きは次の記事でアプリケーションよりの情報を見てみましょう。
はじめてのMicrosoft Azure(ロードバランサ#3)
前回までの記事はこちら
はじめてのMicrosoft Azure(ロードバランサ#2) - LinuxユーザーがイジるはじめてのAzure
それでは前回からの続きです。
既にCentOS7.2の仮想マシンが2台、publicip、vNET、subnet、NSGなどがTemplate Deployから作成済だと思います。
まずは2台の仮想マシンへsshログインしHTTPポートを受け付ける設定を入れましょう。
ログインしたらsudo su - でルートアカウントになります。
[root@templatecent2 ~]# yum list httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
httpd.x86_64 2.4.6-40.el7.centos.1 updates
[root@templatecent2 ~]#
httpdは既にリポジトリに入っているようですので、こちらを利用してみましょう。
※apacheの最新verがいいんだ!という方はwgetでもってきてrpmインストールしましょう。wgetはインストールする必要はありません。
[root@templatecent2 ~]# yum install httpd.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-40.el7.centos.1 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.1 for package: httpd-2.4.6-40.el7.centos.1.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.1.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.1.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.1.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.1 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency ResolutionDependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.6-40.el7.centos.1 updates 2.7 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
httpd-tools x86_64 2.4.6-40.el7.centos.1 updates 82 k
mailcap noarch 2.1.41-2.el7 base 31 kTransaction Summary
================================================================================
Install 1 Package (+4 Dependent packages)Total download size: 3.0 M
Installed size: 10 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00
(2/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00
(3/5): httpd-2.4.6-40.el7.centos.1.x86_64.rpm | 2.7 MB 00:00
(4/5): httpd-tools-2.4.6-40.el7.centos.1.x86_64.rpm | 82 kB 00:00
(5/5): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00
--------------------------------------------------------------------------------
Total 5.1 MB/s | 3.0 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : apr-1.4.8-3.el7.x86_64 1/5
Installing : apr-util-1.5.2-6.el7.x86_64 2/5
Installing : httpd-tools-2.4.6-40.el7.centos.1.x86_64 3/5
Installing : mailcap-2.1.41-2.el7.noarch 4/5
Installing : httpd-2.4.6-40.el7.centos.1.x86_64 5/5
Verifying : mailcap-2.1.41-2.el7.noarch 1/5
Verifying : httpd-2.4.6-40.el7.centos.1.x86_64 2/5
Verifying : apr-util-1.5.2-6.el7.x86_64 3/5
Verifying : apr-1.4.8-3.el7.x86_64 4/5
Verifying : httpd-tools-2.4.6-40.el7.centos.1.x86_64 5/5Installed:
httpd.x86_64 0:2.4.6-40.el7.centos.1Dependency Installed:
apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7
httpd-tools.x86_64 0:2.4.6-40.el7.centos.1 mailcap.noarch 0:2.1.41-2.el7Complete!
[root@templatecent2 ~]#
インストールはうまくできましたので、起動させましょう。
[root@templatecent2 ~]# service httpd start
Redirecting to /bin/systemctl start httpd.service
[root@templatecent2 ~]# ps -ef | grep http
root 1331 1 6 03:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1332 1331 0 03:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1333 1331 0 03:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1334 1331 0 03:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1335 1331 0 03:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1336 1331 0 03:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 1338 1238 0 03:17 pts/0 00:00:00 grep --color=auto http
[root@templatecent2 ~]#
うまく起動できました。確認は「service httpd status」や「netstat -an | grep ":80"」などで確認できます。
このままではデフォルトページが表示されるだけです。この後のLBのアクセスが分散されているか確認しづらいため、「/var/www/html」配下にindex.htmlを配置しておきましょう。
[root@templatecent html]# cd /var/www/html
[root@templatecent html]# ls -l
total 4
-rwxr-xr-x. 1 root root 80 May 31 03:15 index.html
[root@templatecent html]# cat index.html
<html>
<head></head>
<body>
<font size=20>Hello Azure !!</font>
</body>
</html>
[root@templatecent html]#
これで1台目の設定は終了です。
2台目の設定も同じでやっておきましょう。2台目はindex.htmlの中身の文字列をHello AzureではなくHello Azure 2 とか、違いがわかるようにしておくとよいです。
さて、お膳立ては整いましたので、ロードバランサーを作成します。
Azureポータルへログインします。
左ペインのメニュー「参照>」から「ロード バランサー」を選択します。
「追加」から、以下の設定を入れて作成ボタンを押します。
「名前」は適当にわかりやすい名前をいれましょう。
「スキーム」の個所はExternalかInternalかの選択です。今回はインターネットから80portでアクセスを受け付け、配下に振り分けた2台の仮想マシンへ分散するためExternal LoadBalancerとして使います。パブリックを選択しましょう。
「パブリックIPアドレス」の部分は今作成しようとしているLBのVIPになります。新規に静的アドレスとして1つ用意しましょう。
リソースグループは2台の仮想マシンがいるリソースグループを選択します。一通り設定が終われば作成ボタンを押して待ちます。
作成されたら左ペインのリソースグループからtemplatetest-rgを覗いてみましょう。
先ほど作成したロードバランサーが新たに加わっていることがわかります。
クリックして設定を入れていきます。
作成時に新規で用意したVIPがちゃんとついていますね。
では「設定」ボタンから右側に表示されている以下の設定を入れていきます。
1、プローブ
名前が???だと思いますが、ここでは「どのプロトコルとポートに対して」「何秒間アクセスできなければ異常とし」「何回リトライ回数とするか」の設定を入れます。
平たく言えば「分散対象に対して異常判定する閾値を設定する」です。
今回はHTTPですので、80と設定し、閾値はデフォルトのままでいきます。
2、バックエンドプール
これまた何のこと?という名前ですが、分散対象の仮想マシンを選ぶ設定です。
2台用意した仮想マシン(templatecent、templatecent2)を選択し分散対象としま
しょう。
3、負荷分散規則
LBが受け付けるポート(80)と分散対象の仮想マシンへ通信するポート(80)を
入れます。また、先ほど設定準備したプローブの設定名とバックエンドプールの
設定名を入れます。セッション永続化やアイドルタイムアウトはお好みで設定し
ましょう。
ここまで準備できれば完了です。
LBのVIPに対してブラウザか表示させてみましょう。何度かブラウザの更新をするとhello azureとhello azure2が表示されると思います。うまく分散されている証拠です。
service httpd stop で落ちます。
同じようにLBのVIPをブラウザから何度か更新すると、片方のhello azure 2しか表示されなくなります。うまく切り離されていることがわかります。
以上でロードバランサーの記事は終わりとします。
以下参考ですが、今回用意したVIP・DNS名に対してHTTPのサービス監視を入れることもできます。現在はまだプレビュー版となっていますが、「参照>」からapplication Insightsというものがあります。
WEBサイトの解析等が細かく設定できるものですが、以下のようにURLに対して監視設定を入れ、エラーとなったら任意のメールアドレスへメール送信する、といったこともできます。興味がある方は是非やってみてください。
ご参考まで。
はじめてのMicrosoft Azure(ロードバランサ#2)
前回までの記事は以下です。
はじめてのMicrosoft Azure(ロードバランサ#1) - LinuxユーザーがイジるはじめてのAzure
Azureのロードバランサーの種類が理解できましたので、次は2つ目のステップにはいります。
2、WEBアクセスできる仮想マシンを2台用意し上位にロードバランサ
を設置する
では早速WEB用途のサーバーを2台立ち上げましょう。
・・・。
はい、Azureポータルでポチポチと2台の仮想マシンを作成するのは既にできると思いますが、同じことを行うのは面倒ですので、簡略化しましょう。
Azureにはテンプレートからシステムリソースを一気にデプロイする手立てがあります。Template DeployやExport templateなどが該当します。
ここでいうテンプレートとは、JSON形式で記載された構造定義となります。つまり1度作成したリソースグループ内の環境をすべて定義化したテンプレートを出すこともできますし、あらかじめ用意されているJSON定義や自作したJSON定義を使って、一気に環境構築を行うことができます。最近ではInfrastructure as a codeなんて呼ばれ方をしていますが、コードからIaaS環境を操作してしまう、というやり方です。
ここでは2台のCentOS7.2を一気に作成するテンプレートを紹介しますが、テンプレートの書き方やお作法など、非常に丁寧に記載されている記事がありますので、まずはこちらの記事を読んで、試して、理解してみてください。
いかがでしたか?内容はUbuntuですが、RHELやCentOSもほぼ一緒です。
とはいえ、白紙の状態からゴリゴリ記載するにはかなり手馴れていないとできませんので、まずはひな型とするテンプレートを用意し、2台の仮想マシンを作成する、といったオリジナルなカスタマイズをしたいですね。
AzureのQuick Start Templateでは、Gitに上がった有志の方々から参考になりそうなテンプレートがたくさんあります。まずはそれを覗いてみましょう。
Azureポータルの左メニューにある「リソースグループ」から、「設定」を選ぶと下の方に「Export template」というメニューがあります。こちらをクリックしてみてください。
作成したばかりのリソースグループであれば、上記のようにJSON定義には何も記載されていない状態になります。上にあるデプロイのアイコンをクリックしましょう。
「テンプレートの編集」 をクリックすると上記の画面が出てくると思います。クイックスタートテンプレートというアイコンが出ていますので、そちらをクリックします。
テンプレートはたくさんありますので、「cent」 と入れてcentOSに関するテンプレートを一覧で出してみてください。他のサービスやOSと比べるとかなり少ないですが、いくつかテンプレートが用意されていることがわかります。
※ちなみに(免責事項)にも記載されている通り、このテンプレートはGitに登録した有志の方々が作成されたものを呼び込んでいるにすぎません。オフィシャルなサポートとして受けれるものではない、ということだけ理解しておきましょう。
ざっと見たところ2台のCentOS7.2を作成するテンプレートはなさそうです。参考になりそうなものはありますが、デプロイが失敗するテンプレートも中にはありますので注意しましょう。
では、クイックスタートテンプレートには目的のものがなさそうですので、これまでに自分が作成したリソースグループの定義をエクスポートし、それをひな型にし修正していきましょう。
今まで触っていたCentOS7.2を入れたリソースグループのExport templateから、ひな型をコピーし、Visual Studio Codeに張り付けてください。
上記のようにカラフルな状態になってなければ、一旦jsonの拡張子として保存してください。
ざっと見てみるとわかりますが、この辺をいじればいいのかな、というものものあれば、これはどういじればよいのかな、というものもあると思います。
以下、私がちょこっと修正したテンプレートがありますので、※印の内容を読んでご利用ください。
※デプロイ前の準備:templatetest-rgというリソースグループを作成しておくこと。
※JSON内でやってること
1、パラメータで新規入力しなければいけないものはadominのパスワードだけ。
2、SSHキーの公開キーは変更できるようパラメータとして設定。defaultで
入れている通り、rsa-から始まる公開キー形式にする必要がありますが
既に作成された仮想マシンのExport templateに記載されているため、それを
コピペしてください。(ここでは「ssh-rsa AAAAZZZZ」と適当に記載してます。
3、前回までに作成したCentOS7.2との違いは以下。
・ディスクはOSディスクのみ。追加したディスクは外しています。
・Network Security Group(FWみたいなもの)では22portだけでなく80portも
許可しています。
・vNETは192.168.0.0/16とし、subnet1に192.168.10.0を用意しています。
・プライベートのアドレスは192.168.10.1と、もう1台は192.168.10.2と
してあります。
----ここから-----
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"virtualMachines_templatecent_adminPassword": {
"defaultValue": null,
"type": "SecureString"
},
"sshKeyData": {
"type": "string",
"defaultValue": "ssh-rsa AAAAZZZZ",
"metadata": {
"description": "SSH rsa public key file as a string."
}
},
"availabilitySets_templateavail_name": {
"defaultValue": "templateavail",
"type": "String"
},
"virtualMachines_templatecent_name": {
"defaultValue": "templatecent",
"type": "String"
},
"virtualMachines_templatecent_name2": {
"defaultValue": "templatecent2",
"type": "String"
},
"networkInterfaces_templatecent_name": {
"defaultValue": "templatenic",
"type": "String"
},
"networkInterfaces_templatecent_name2": {
"defaultValue": "templatenic2",
"type": "String"
},
"networkSecurityGroups_templatecent_name": {
"defaultValue": "templatecent",
"type": "String"
},
"publicIPAddresses_templatecent_name": {
"defaultValue": "templatepubip",
"type": "String"
},
"publicIPAddresses_templatecent_name2": {
"defaultValue": "templatepubip2",
"type": "String"
},
"virtualNetworks_templatetest_rg_name": {
"defaultValue": "templatetest-rg",
"type": "String"
},
"storageAccounts_templatetestrg_name": {
"defaultValue": "templatetestrg",
"type": "String"
}
},
"variables": {},
"resources": [
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Compute/availabilitySets/templateavail01' から一般化されました。",
"type": "Microsoft.Compute/availabilitySets",
"name": "[parameters('availabilitySets_templateavail_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"platformUpdateDomainCount": 5,
"platformFaultDomainCount": 3
},
"dependsOn":
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Compute/virtualMachines/templatecent01' から一般化されました。",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('virtualMachines_templatecent_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"availabilitySet": {
"id": "[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySets_templateavail_name'))]"
},
"hardwareProfile": {
"vmSize": "Standard_A2"
},
"storageProfile": {
"imageReference": {
"publisher": "OpenLogic",
"offer": "CentOS",
"sku": "7.2",
"version": "latest"
},
"osDisk": {
"name": "[parameters('virtualMachines_templatecent_name')]",
"createOption": "FromImage",
"vhd": {
"uri": "[concat('https', '://', parameters('storageAccounts_templatetestrg_name'), '.blob.core.windows.net', concat('/vhds/', parameters('virtualMachines_templatecent_name'),'2016411173644.vhd'))]"
},
"caching": "ReadWrite"
},
"dataDisks":
},
"osProfile": {
"computerName": "[parameters('virtualMachines_templatecent_name')]",
"adminUsername": "koike",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"ssh": {
"publicKeys": [
{
"path": "/home/koike/.ssh/authorized_keys",
"keyData": "[parameters('sshKeyData')]"
}
]
}
},
"secrets": ,
"adminPassword": "[parameters('virtualMachines_templatecent_adminPassword')]"
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaces_templatecent_name'))]"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySets_templateavail_name'))]",
"[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccounts_templatetestrg_name'))]",
"[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaces_templatecent_name'))]"
]
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Compute/virtualMachines/templatecent01' から一般化されました。",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('virtualMachines_templatecent_name2')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"availabilitySet": {
"id": "[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySets_templateavail_name'))]"
},
"hardwareProfile": {
"vmSize": "Standard_A2"
},
"storageProfile": {
"imageReference": {
"publisher": "OpenLogic",
"offer": "CentOS",
"sku": "7.2",
"version": "latest"
},
"osDisk": {
"name": "[parameters('virtualMachines_templatecent_name2')]",
"createOption": "FromImage",
"vhd": {
"uri": "[concat('https', '://', parameters('storageAccounts_templatetestrg_name'), '.blob.core.windows.net', concat('/vhds/', parameters('virtualMachines_templatecent_name2'),'2016411173645.vhd'))]"
},
"caching": "ReadWrite"
},
"dataDisks":
},
"osProfile": {
"computerName": "[parameters('virtualMachines_templatecent_name2')]",
"adminUsername": "koike",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"ssh": {
"publicKeys": [
{
"path": "/home/koike/.ssh/authorized_keys",
"keyData": "[parameters('sshKeyData')]"
}
]
}
},
"secrets": ,
"adminPassword": "[parameters('virtualMachines_templatecent_adminPassword')]"
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaces_templatecent_name2'))]"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySets_templateavail_name'))]",
"[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccounts_templatetestrg_name'))]",
"[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaces_templatecent_name2'))]"
]
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Network/networkInterfaces/templatecent0180' から一般化されました。",
"type": "Microsoft.Network/networkInterfaces",
"name": "[parameters('networkInterfaces_templatecent_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAddress": "192.168.10.1",
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_templatecent_name'))]"
},
"subnet": {
"id": "[concat(resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworks_templatetest_rg_name')), '/subnets/subnet1')]"
}
}
}
],
"dnsSettings": {
"dnsServers":
},
"enableIPForwarding": false,
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroups_templatecent_name'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_templatecent_name'))]",
"[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworks_templatetest_rg_name'))]",
"[resourceId('Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroups_templatecent_name'))]"
]
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Network/networkInterfaces/templatecent0180' から一般化されました。",
"type": "Microsoft.Network/networkInterfaces",
"name": "[parameters('networkInterfaces_templatecent_name2')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig2",
"properties": {
"privateIPAddress": "192.168.10.2",
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_templatecent_name2'))]"
},
"subnet": {
"id": "[concat(resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworks_templatetest_rg_name')), '/subnets/subnet1')]"
}
}
}
],
"dnsSettings": {
"dnsServers":
},
"enableIPForwarding": false,
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroups_templatecent_name'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_templatecent_name2'))]",
"[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworks_templatetest_rg_name'))]",
"[resourceId('Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroups_templatecent_name'))]"
]
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Network/networkSecurityGroups/templatecent01' から一般化されました。",
"type": "Microsoft.Network/networkSecurityGroups",
"name": "[parameters('networkSecurityGroups_templatecent_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"securityRules": [
{
"name": "default-allow-ssh",
"properties": {
"protocol": "Tcp",
"sourcePortRange": "*",
"destinationPortRange": "22",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 1000,
"direction": "Inbound"
}
},
{
"name": "default-allow-http",
"properties": {
"protocol": "Tcp",
"sourcePortRange": "*",
"destinationPortRange": "80",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 1010,
"direction": "Inbound"
}
}
]
},
"dependsOn":
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Network/publicIPAddresses/templatecent01' から一般化されました。",
"type": "Microsoft.Network/publicIPAddresses",
"name": "[parameters('publicIPAddresses_templatecent_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"publicIPAllocationMethod": "Static",
"idleTimeoutInMinutes": 4
},
"dependsOn":
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Network/publicIPAddresses/templatecent01' から一般化されました。",
"type": "Microsoft.Network/publicIPAddresses",
"name": "[parameters('publicIPAddresses_templatecent_name2')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"publicIPAllocationMethod": "Static",
"idleTimeoutInMinutes": 4
},
"dependsOn":
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Network/virtualNetworks/templatetest-rg' から一般化されました。",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('virtualNetworks_templatetest_rg_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"properties": {
"addressSpace": {
"addressPrefixes": [
"192.168.0.0/16"
]
},
"subnets": [
{
"name": "subnet1",
"properties": {
"addressPrefix": "192.168.10.0/24"
}
}
]
},
"dependsOn":
},
{
"comments": "リソース '/subscriptions/00b9a304-ca87-4f5e-b622-f782c041e0ad/resourceGroups/templatetest-rg/providers/Microsoft.Storage/storageAccounts/templatetestrg2912' から一般化されました。",
"type": "Microsoft.Storage/storageAccounts",
"name": "[parameters('storageAccounts_templatetestrg_name')]",
"apiVersion": "2015-06-15",
"location": "japaneast",
"tags": {},
"properties": {
"accountType": "Standard_LRS"
},
"dependsOn":
}
]
}
----ここまで-----
あとはAzureポータルから以下の画面でOKしていきます。
「テンプレートの編集」では上記のJSON形式を上書きすれば終わりです。
「パラメータの編集」ではadminのパスワードを新規で入力し、SSHキーの部分をご自分のrsaから始まる公開キーに上書き変更してOKします。
「リソースグループ」は先ほど事前に準備したtemplatetest-rgを選択してください。必然的にリソースグループの場所は東日本固定になります。
「法律条項」はちょっとドキッとしますが、なんてことはなく内容をざっとよんで購入ボタン(購入って言葉にひっかかりますが、同意と解釈しましょう)をおします。
最後に作成、とするとデプロイがはじまります。
デプロイが正常に終わったかはポータル右上の鈴マークで確認できますので、進捗状況も含めてみてみてください。
長くなったのでここまでとしますが、次回の記事ではいよいよ仮想マシンにhttpdをあげてロードバランサを上位に組み込みましょう。
はじめてのMicrosoft Azure(ロードバランサ#1)
前回までで、CentOS7.2の仮想マシンを作成し1TBのディスク領域を追加しました。
※前回の記事は以下。
はじめてのMicrosoft Azure(ディスクアタッチ) - LinuxユーザーがイジるはじめてのAzure
仮想マシンを作成しディスクを追加して、とくれば次はロードバランサの作成、と必然的な流れがありますので、とりあえず乗っかりましょう。とはいえゴールがないと目移りしてしまいますのでゴール設定をします。
ゴール:2台のWEBサーバーに対してロードバランサから分散させてWEBを表示する
以下がこれからやっていく順序になります。
1、【事前準備】ロードバランサの種類を理解する
2、WEBアクセスできる仮想マシンを2台用意し上位にロードバランサ
を設置する
3、稼働中の1台を強制停止させ正常にロードバランスできていることを確認する
○1、【事前準備】ロードバランサの種類を理解する
まず、一言でロードバランサといってもレイヤと呼ばれる階層毎に異なる種類が存在します。これはMicrosoft Azureに限った話ではなく、どのクラウド事業者が提供するロードバランサも同じです。ではどのような種類があるのか、Microsoft Azureを例に説明します。
グローバルロードバランサを担う「Traffic Manager」
その名の通り、世界中に点在するリソースに対して広域負荷分散するロードバランサです。AzureではTraffic Managerと呼ばれる機能がこれに該当します。こちらを利用するケースは、異なるリージョンに対して負荷分散を行う場合に利用するためDNSレベルで制御し、用途としては事業継続性(BCP)やDisasterRecovery(DR)対策といったクリティカルなサービスで必要になります。ポイントは「異なるリージョン間での負荷分散」ですが、Traffic Managerから直接仮想マシンのグローバルアドレスに対して分散させるケースはほとんどなく。大抵は下で説明するL4ロードバランサのエンドポイントへ分散させます。
L4ロードバランサを担う「Azure Load Barancer」
L4とはレイヤ4を指しており、OSI参照モデルでいうトランスポート層の分散を担うロードバランサになります。トランスポート層といっても難しく感じますので、平たく言えばIPアドレスを使った分散が可能と考えてください。また、Azure Load Barancerはパブリックなアクセスに対する負荷分散以外に内部ネットワーク間の負荷分散機能としても利用できるため、プライベートロードバランサとしての用途として利用することもできます。※その場合はILB(Internal Load Barancer)と略されます。ILBはWEBからDBサーバーへ分散する際に複数台のマルチマスタ構成のDBサーバーや、複数のreadのみ担当するslaveサーバーへ分散する、などの用途で利用できます。
L7ロードバランサを担う「Application Gateway」
L7はレイヤ7ですので、アプリケーション層の分散を担うロードバランサです。L4ではIPアドレスを担う分散が可能でしたが、L7ではURLやHTTPヘッダによる分散ができるようになります。こちらはいわゆる仮想ロードバランサと呼ばれる位置づけになりますが、仮想マシンへログインして操作するものではありません。仮想マシンと同列のレイヤで負荷分散機能が利用できます。
今回はお試しで利用するためAzure Load Balancerを利用しますが、もしSSLオフロード機能が必須であったり、Cookie処理による振る舞いが必要なケースであればApplication Gatewayを利用しましょう。Azure Load BalancerではSSLオフロード機能は現時点で搭載されていません。
Tips
SSLオフロードとは。SSLアクセラレータとも呼ばれる機能ですが、この機能を理解する前にSSL通信を理解する必要があります。
まずクライアント(ブラウザ)がhttpsから始まるWEBサイトへアクセスします。そうするとWEBサーバーから証明書が送られてくるためブラウザはブラウザに搭載されているルート証明書から署名を確認します。※ここで見つからないと警告がでます。確認が取れれば、通信データの暗号化に使用可能な暗号の種類をサーバに通知し共通鍵暗号方式が選択されます。ブラウザは暗号用の共通鍵を生成しサーバの公開鍵で暗号化して送ります。ブラウザから送られた暗号化された公開鍵は、サーバー側の秘密鍵で複合されます。そして双方が共通鍵(セッションキー)を使って暗号化通信が開始されます。これがSSL通信/TLS方式になります。
、、、という具合に、サーバー側で毎回複合化する処理が走るため、結構サーバー側の負担(性能負荷)が大きいのが現状です。この役目を上位にいるロードバランサにやってもらおう、というのがSSLオフロード機能になります。また、数台のサーバーであれば証明書の配置や展開は苦にならないですが、数十台、数百台となってきますと、SSL証明書の更新タイミングや脆弱性発生時の入れ替えなどの手間を考えるとロードバランサの証明書を1つ変更するだけで終わる、という運用の手間軽減にもつながります。
今回の記事はここまでとします。
ロードバランサに関する種類はある程度理解できたと思いますので、次の記事からは
「2、WEBアクセスできる仮想マシンを2台用意し上位にロードバランサを設置する」を始めたいと思います。
はじめてのMicrosoft Azure(ディスクアタッチ)
↓前回までの記事
はじめてのMicrosoft Azure(仮想マシン) - LinuxユーザーがイジるはじめてのAzure
とりあえず最初のゴールだったCentOS7.2の仮想マシンにSSHログインすることができましたか。
既にAzureポータルで見ると「状態」が「実行中」になっていると思います。
ここでは作成した仮想マシンにディスクを追加しマウントする、というところまでやってみましょう。もちろんARM環境でディスクを追加します。
では、、っと進める前に、まずは稼働させたCentOSにSSHログインしOS内のディスク設定状況がどうなっているのかを見てみましょう。
まずはディスクから。
「/dev/sda」と「/dev/sdb」それぞれのデバイスに対して1つずつパーティションが切られていることがわかります。また、とりわけ容量が多いデバイスとして、「/dev/sda1」と「/dev/sdb1」がありますね。どちらもsdから始まっていますのでSCSIタイプのHDDなのかな、というのが少し垣間見れます。また、/dev/sda1はルートパーティション「/」ですので、/usrや/etc等を扱うデフォルトのlocaldiskが約30GB程度割り当てられていることがわかります。一方、ひときわ目立つ/dev/sdb1はどうでしょうか。約70GBの容量が/mnt/resourceというマウントポイント名で割り当てられています。気になりますので中身を少し見てみましょう。
なにやらDATALOSS_WARNING_README.txt、という気になるファイルが存在しますね。中身を見ると「ここは一時的なデータの置き場なのでリカバリーできません、個人情報やアプリケーションデータなどは置かないようにね」っと記載されています。素直になれない方はここにファイルを置いてみて仮想マシンを再起動してみて確認してみてください。置いたはずのファイルがなくなりますので。
もう1つ気になる点としては「/etc/fstab」ですね。見てみましょう。
UUID=90f6a33e-364a-47f5-9d71-3c311dbfdd54 / xfs defaults 0 0
このような1行が記載されています。先頭の部分(デバイス名で記載する部分)がUUID形式で記載されています。デバイスの接続順による影響を受けない書き方ですね。「sudo blkid」と打ってこのUUIDがどのデバイス名を指しているのかを確認できます。あとジャーナリングファイルシステムが「xfs」と記載されています。CentOSのディストリビューションはRedHatに類似していますが、RHEL5はext3、RHEL6はext4、RHEL7からxfsと来ています。今回用意したCentOSは7.2ですので、この流れと類似していますね。ちなみにRHELではxfsになってからサポートされる最大容量も500TBと増えてきています。
まとめると、LocalDiskで30GB程度あり/tmpとして扱えそうな領域に70GB程度ある、fstabにはルートパーティションのみ記載がされている、ということがわかりました。これからディスクを追加する操作は、localdiskの30GBでは足りないケースとして参考にしてください。
では上記のディスクレイアウトについては見えてきましたので、新たにAzureで空のディスクを用意し、このサーバーへアタッチ&マウントするところまでやってみましょう。
ではAzure ポータルから、「Virtual Machines」>該当のCentOS-VMを選択>「設定」と移り、以下の登録をしましょう。該当の仮想マシンは稼働中のままですので、ここではホットアタッチします。
「ディスク」の画面では「新しいディスクの接続」と「既存のディスクの接続」と2つあります。今回は空のディスクを追加するので「新しいディスクの接続」を選択します。
Tips
「既存のディスクの接続」は、Azureで用意したストレージアカウントにVHD形式のディスクを配置しておくことで、仮想マシンへ該当のディスクをアタッチすることができます。 オンプレミスで稼働しているディスクをAzureのストレージにVHDファイルとしてアップロードすればAzure仮想マシンで見れる、と覚えておくとよいでしょう。
「名前」は好きな名前をいれてください。画面はデフォルト名のままにしてあります。
「種類」はStandardです。前の記事でも触れましたが、今回用意したサーバーサイズではPremium Storage(SSD)は利用できません。
「サイズ」は今回用意する空ディスクの総容量です。GBではなくGiB(ギビバイト)の表記になっていますが、気になる方は2進数表記で指定しましょう。ここではデフォルト値のまま1TB分を用意します。また、注釈でもある通り、後からこの容量を増やすこともできます。その場合は仮想マシンを"停止"してから操作することになります。
「予測パフォーマンス」は、特に入力する部分はありません。500iopsを上限とし60MB/secのスループット上限となっていることがわかります。
「場所」は今回用意したストレージアカウントの中に仮想マシンのVHDを入れていますので、同じストレージアカウントのURLを指定します。(デフォルトのまま)
「ホストキャッシュ」はアタッチしたディスクを読み取り専用(read only)で扱うか、読み書き両方(read write)で扱うかを選択します。ここでは読み書き両方で設定しましょう。
一通り設定が終わればOKボタンを押して待ちましょう。5分程度で終わりますので、終わったらもう一度CentOSのターミナルに戻り、「sudo fdisk -l」を実行してみてください。
1番下に「/dev/sdc」というデバイスが追加されていることがわかります。Azure Portalで指定した通り1TB分の領域がアタッチされています。
このままではただディスクがアタッチされているだけですので、OSから認識できるようにマウントをしましょう。
「sudo fdisk /dev/sdc」を打ってパーティション設定をするやり方は以下のサイトの「3.[SSH] ウィンドウで、新しいデバイスを作成する」を参考にしてください。
Attach a disk to a Linux VM | Microsoft Azure
※英語表記の場合は左上にある「BING翻訳」で日本語に指定しましょう。
以下、attachdiskというマウントポイント名でマウントした際の画面です。
いかがでしょうか。ちゃんとディスクが追加されましたか。DBファイルやトランザクションログなど、大切に保管したいデータであり、LocalDiskの30GBでは足らない場合はこの方法でディスクを追加することができます。最後に、/etc/fstabにマウント設定を書き込み、仮想マシンが再起動してもマウントされた状態になる設定を入れておきましょう。
冒頭でも打った「sudo blkid」をもう一度たたいてみると/dev/sdc1のUUIDが見れます。この情報を元に、/etc/fstabに以下の記載をいれて更新しておきます。
UUID=1042961f-e67e-44e9-976c-dc05c8874f2a /attachdisk ext4 defaults 1 2
※2行に分かれて見えますが、1行です。
Tips
4列目~6列目について補足します。 4列目にはマウントする際のオプションを指定することができます。ここではdefaultsにしています。defaultのオプションは「rw, suid, dev, exec, auto, nouser, async」がすべて有効の設定になります。あまりいじることはない部分ですが、例えばこの領域へのアクセスが集中し、IO性能が悪く一時的に性能問題を解決したい時などは、noatimeと指定することでinodeに対するアクセス時間の更新をさせない、というチューニングができたりします。もちろんこれはファイルやディレクトリのアクセスタイムをアプリケーションが利用していない、という前提でできる解決方法の1つです。次に5列目ですが、ここでは「1」と記載しています。ここはdumpの要否を入れます。0は不要、1は必要の意味になります。最後の6列目はfsckオプションです。「0」はfsckチェックしない。「1」はルートファイルシステムでチェックする「2」はチェックする、です。
最後に「chmod 777 /attachdisk」としておけば、誰でも読み書きできる状態になります。
はじめてのMicrosoft Azure(仮想マシン)
↓前回の記事
はじめてのMicrosoft Azure(ポータルログイン) - LinuxユーザーがイジるはじめてのAzure
はい、では前回の続きの記事を書きます。
前回はAzure Portalへのログインを中心に記載しました。ここでは一旦ゴールとして定めた仮想マシンのを作る、という範囲を記載します。
既に先走って仮想マシンを立てようとされた方は、非常に違和感を感じたと思います。
仮想マシン(クラシック)と、Virtual Machinesと2つ、似たようなものが並んでいます。まずここでどちらを操作すればよいかに迷われると思いますが、お薦めを先に言うとVirtual Machinesの方から仮想マシンを作成しましょう。
Tips.
「Microsoft AzureがWindows Azureと呼ばれていた時代に利用されていた仮想マシンの環境が、仮想マシン(クラシック)と呼ばれている環境になります。従来型をASM(Azure Service Manager)と呼んでおり、新しい環境をARM(Azure Resource Manager)と呼んでいます。すぐにASM環境がなくなることはないと思いますが、今後新しい機能やサービスはARM環境下で準備されていくことが予想されますので、これから仮想マシンを立てる方はVirtual MachinesのARM環境で利用されることをお薦めします。」
では早速ARM環境で仮想マシンを作成しましょう。
Virtual Machinesをクリックすると右側に新たなボードが出てきます。最初は何も作っていないため、ボードの左上にある「追加+」のアイコンをクリックします。そうするとたくさんあるOSイメージのどれを作成するかを選ぶ画面に来ますので、検索フォームにCentOS-basedと入れてみましょう。
CentOSにもいくつかのバージョンが用意されているのがわかります。せっかくなので1番新しい7.2を選びましょう。CentOS-based 7.2の行をクリックします。
※勝手にLinuxサーバーにしましたが、私がLinux好きなのでそうしています。といいますか、Azureの記事でCentOSを中心に記載する記事が少ないなと思ったので、あえてそうしています。
1番下にデプロイモデルの選択とありますね。冒頭で説明した通り、デフォルトのままリソースマネージャーで「作成」ボタンをクリックしましょう。
ここからの説明が大変そうですね。順を追って説明しましょう。
まず左側にある1,2,3,4は、すべて終わらせる必要がある項目、っと思ってください。終わらないと仮想マシンは作成できません。
では1から。
○名前
仮想マシンの名前、つまりノード名となります。
○ユーザー名
この仮想マシンへログインする際に作成されるCentOS内のuserとなります。ちなみにrootアカウントは作成できません。後で確認できますが、ここで作成したユーザーがroot権限でコマンドを実行したい時はsudoコマンドで打つことになります。
○認証の種類
Linuxユーザーの多くはSSHログインする際に公開キーでログインするのが普通ですので、あれか、、っと思われる方も多いと思いますが、なにやら入力を求められています・・。ご想像通りSSHのキーを自分で用意しなければいけない&X509形式で、という少しだるい作業がここで入ります。以下のドキュメントを参考に自作で証明書を作成しましょう。
【windowsOSの環境下で「azureのCentOSを作成しログインする」方法】
https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-linux-ssh-from-windows/
うまくSSHキーが作成できれば、公開キー(秘密キーではなく)のファイルをメモ帳で開き、中身の文字列をそのままコピペし、Azureポータルに戻って張り付けましょう。ちゃんと形式があっていれば、入力フィールドの右側側面にグリーンのチェックマークがつきます。
ここは触らなくてOKです。無償試用版のサブスクリプションになっていることを確認しましょう。
○リソースグループ
冒頭でAzure Resource Manager(ARM)に触れましたが、ここではそのリソースグループ名を入れます。このリソースグループという概念は、仮想マシンだけでなくネットワークリソースやストレージリソースなど、コンピューティングリソース以外のリソースも全てこのグループで管理する、というグループ名の概念になります。この概念をわかりやすく記載されている記事がありますので、こちらをご参考ください。
https://www.kzmx.net/azure/311/
※その1からその4までありますが、概念的な把握はその3まで読むとわかります。
○場所
ここではこれから作成する仮想マシンが配置されるリージョンを選択します。日本は東日本と西日本と2つのリージョンが現在提供されています。
一通り入力が終わったらOKをクリックして2のサーバーサイズ選択にうつります。
最初に表示されるサイズ(スペック)はお勧めのスペックですので、右上にある「すべて表示」をクリックしましょう。既にCPUのコア数やメモリサイズなど選定に必要な情報はパネルに記載されています。各シリーズの説明は以下を参考にしてください。
https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/
あわせてSLAについても確認しておきましょう。
https://azure.microsoft.com/ja-jp/support/legal/sla/virtual-machines/v1_0/
今回は実験的に仮想マシンを作成しますので1台立てるだけですが、商用として利用する場合はちゃんと目を通しておきましょう。(同じ可用性セットにデプロイした 2 つ以上のインスタンスがある場合、というのがポイントですが、可用性セットの説明は後程します)
最後にもう1つ、ここで知っておくとよいポイントがあります。AシリーズやDシリーズなど、いくつかサーバースペックのモデルがありますが、各スペック事に追加できるNICの数やアタッチできるディスクの数に制限があります。事前にサーバー設計がされている場合は、以下のサイトにある「Microsoft Azure IaaS リファレンス アーキテクチャ ガイド」を参考にスペックを選びましょう。
とりあえずここではA1 Standardを選びましょう。
2が終わりましたので、3にうつります。
ここではストレージアカウントとネットワークの設定を入れます。既にデフォルト値がいくつか設定されていますが、ちゃんと理解しながら適切な設定を入れていきます。
○ディスクの種類
StandardはHDD、Premium(SSD)はSSDです。これはサーバーのローカルディスクのディスクに何を利用するか、という意味ですね。残念ながら今回作成するA1 StandardのスペックではPremium(SSD)は選択できません。DS1 Standard等に変更すれば利用できます。デフォルト値のままStandardが水色の背景になっていることを確認して次にいきます。
○ストレージアカウント
これから作成される仮想マシンはVHD形式でAzure Storageに自然と格納されます。このAzure Storageはストレージアカウントという単位で用意されるストレージ空間となります。今は特に気にする必要はありませんが、1ストレージアカウントは最大でも500TBまで、とクォータ制限があることだけ覚えておきましょう。ここではそのストレージアカウントの名前を任意な文字列で入れます。合わせて「種類」という項目で冗長化方式を選ぶことができますので、ここでは「L ローカル冗長」としておきます。「L ローカル冗長」とはLRSとも呼ばれ、同じデータセンター内にこのサーバーを3つ複製して持つ(VHDデータのトリプルミラー)、という意味になります。「G Geo冗長」はLRSに加えて異なるデータセンターにもさらに3つ複製する、つまり6つ持つGRSと呼ばれます。「R Read-Access Geo冗長」はデータの置き場としてはGRSと同じ6つですが、有事の際にアクセス経路が遮断されたとしても、異なるデータセンターへReadアクセスできる、といった事業継続性に向けた冗長化方式となります。以下、詳細に説明されていますので興味がある方は目を通してみてください。
https://azure.microsoft.com/ja-jp/documentation/articles/storage-redundancy/
○ネットワーク
Virtual Networkとあります。その名の通り仮想ネットワークとなります。vNETと略されて呼ばれることが多いです。Azureでは仮想マシンを作成する際に、自分の任意なネットワークセグメントを切ることができます。まずはそのVirtual Networkの名前を入れます。次にアドレス空間に以下のセグメントで切ってみましょう。
192.168.0.0/24
※192.168.0.0 - 192.168.0.255なので256個のアドレスを意味する範囲で指定していますが、実際は192.168.0.4からアドレスはふられますので、実際には252個のアドレスが利用できる設定内容となります。
次にサブネット名を入れます。任意な文字列でOKですが、わかりやすいようにここではsubnet1と入れておきましょう。そしてサブネットアドレス範囲には以下を入れます。
192.168.0.0/27
サブネットは1つだけ切るので、192.168.0.0 - 192.168.0.31までの計28個(192.168.0..4からなので)のアドレスを利用できることになります。もちろんVirtual Networkで指定したアドレスの範囲を超えた設定は入れられません。
次にパブリックIPアドレスの設定を入れます。インターネットからのアクセスが不要なサーバーであれば「なし」を選択します。ここではせっかくなので作りましょう。名前を入れ、「静的」を選びましょう。動的の場合は、例えば仮想マシンを再起動した際にパブリックIPアドレスが都度変わりますが、静的であれば変わることはありません。
次に、ネットワークセキュリティグループの設定を入れます。NetworkSecurityGroupですのでNSGと略されることが多いです。概念としてはAzureが提供するファイアウォール機能です。デフォルトでは22port(SSHログインポート)のみ受信許可の設定が入っていますので、そのままでもかまいません。
次は監視の診断です。ストレージアカウントを指定することでこれから用意するサーバーのリソースステータスを定期的に見てくれます。有効にしておきましょう。
最後に可用性セットです。ここはONにしておきましょう。障害ドメインと更新ドメインに対する数を選択できるようになっていますが、とりあえずここではデフォルトのまま設定しておきます。
障害ドメイン(Fault Domain:FD)はデータセンター内のラックをイメージして頂くと想像しやすいですが、これから作成するサーバーが同じラックに集約しないように複数選んでおく、という概念です。単一物理障害によるサービス影響を極力下げるためのもの、とお考えください。更新ドメインはAzureでメンテナンス(OS updateとか)がされた場合でもサービスの影響を低くするためのユニットです。こちらも複数選んでおくことがよいでしょう。
3まで登録が終われば最後の4は確認になります。
特に手戻りがなければこのまま仮想マシンの作成をしましょう。
画面右上にある鈴アイコン(通知)に、デプロイが開始されました、なるメッセージが出てきたと思います。基本的に処理を非同期で操作した場合はこの鈴アイコンのメッセージを見ておくとよいでしょう。(エラーの時もここでわかります)
いかがでしょうか。左側にあるリソースグループをクリックし、先ほど作成した仮想マシン一式が以下のように見えていますか。
概要>リソース の部分にあるアイコンにマウスポインタをあてると、それぞれがどのリソースで用意したものかがわかります。(ぱっと見わからないので、わかりやすい名前で入れておくことをお薦めします)
作成した仮想マシンがありますのでクリックしましょう。(上の図ではaktest001)
ここで割り当てられたパブリックIPアドレスが確認できます。
このIPアドレスをコピーし、ターミナルソフト(Teraterm)などでSSHログインしてみてください。SSHキーに秘密鍵を入れ、ユーザー名・パスワードは先ほど作成したものを入れてください。
以上で仮想マシンの作成ができたと思いますが、既にお気づきのように仮想マシンを作成する際には、ネットワークの設定やストレージの設定など多くの設定を入れる必要があります。ARMモデルでは、これら仮想マシンを取り巻く周りの環境を1つのグループとして管理できる、ということがわかったと思います。
次回は、せっかくLinuxサーバーが立ち上がったので、ディスクをアタッチしマウントする方法やAzure CLIと呼ばれるLinuxOSでAzureを操作するコマンドラインについて記載しますね。
*1:本記事は2016/3に記載したものです。ご覧になられたタイミングによっては見え方や操作方法が異なる場合がございます。
はじめてのMicrosoft Azure(ポータルログイン)
こんにちは。
いや、はじめまして、かな。
Azureな人になりつつあるAKです。
今回のテーマは、LinuxユーザーがMicrosoft Azureを初めて触ってみようか、でもどこから何をすればよいかよくわからないな、という方々向けにスタートアップガイド的に記載します。
では早速、「クラウドを触る = 仮想マシンを立ててみる」という点をまずはゴールにしてやってみましょう。当然条件は、「お金かけずにいじりたい」です。これ大事。
○事前に準備しておくもの
・メールアドレス
・上記アドレスへMicrosoftから受信するメールが見れる媒体(メーラーでOK)
・クレジットカード
メールアドレスはなんでもよいです。いつもお使いのメールアドレスでは困る、という方はそのまま読み進めると新規でメールアドレスを取得する部分がありますので、そちらで対応しましょう。
メーラーは、ちゃんとメールの受信ができる環境があればなんでもOKです。
クレジットカードは誤解しそうなので補足します。今回は無料で利用できるサブスクリプション(申し込みライセンスのようなもの)を利用します。この無料試用版サブスクリプションの手続きには本人確認が必要なため、クレジットカード情報を入れる必要がでてきます。
え?無料じゃないの?と思われた方。もちろん無料です。ですが無料枠として1か月間という期間制限と、最大\20,500という範囲で無料となっています。もし1か月以内にこの金額を超えた場合、ちゃんと明示的に継続利用する操作をWEBから行わない限りクレジットカードから料金が引き落とされることはありません(オプトインが必須)。ご心配なく。
○ステップ1
・Microsoftアカウントを作成
Microsoft Azureを利用するには、Microsoftアカウントか組織アカウントのどちらかが必要になります。ここでは個人としてMicrosoft Azureを利用するステップを記載しますので、Microsoftアカウントの作成について記載します。
以下のURLをクリックしてMicrosoftアカウントのサインアップを行います。
https://signup.live.com/signup?uaid=c010cd0e9192494591cb5538b0467141&lic=1
メールアドレスを入力する部分がありますので、事前準備で用意してあるメールアドレスを入れましょう。いやー、会社のメアドは入れたくないなぁ、広告メールとかいっぱい来ても困るなぁ、という方は、メールアドレス入力項目の下にあるリンクを押して、新規でメールアドレスを取りましょう。(@outlook.jpとか)
すべての入力が終えて以下の画面が出てきたらOKです.
これでマイクロソフトアカウントは準備できましたので、上記画面は閉じてOKです。
○ステップ2
・無料試用版サブスクリプションの利用手続き
・Azureポータルへログイン!サブスクリプションの確認
Microsoftアカウントの準備ができましたので、早速無料試用版サブスクリプションの手続きを進めましょう。以下のURLから、「今すぐ試す>」をクリックしましょう。
https://azure.microsoft.com/ja-jp/pricing/free-trial/
先ほど用意したMicrosoftアカウントを入力します。パスワードの入力項目にマウスポインタをあてると自動的に「サインアップ Microsoft Azure」という画面に遷移します。クルクルとインジゲータが回った後、いくつかの入力項目が出てきますので入れましょう。
ここでのポイントは2点です。
1点目は、「電話で確認」という項目です。本人確認ができるようにランダムな数字をMicrosoftが発行し、その数字を操作しているご本人が入力して初めてOKとなります。このMicrosoftが発行する数字を、「電話で聞く」か、「テキストメッセージで受け取る」か、どちらかを選択できます。
これを読んでくれている方はおそらく日本人だと思いますので、「テキストメッセージで受け取る」をお勧めします。ご想像通り、電話で受け取ると「電話で確認コードを受け取る」のボタンを押下した直後に入力した電話番号にロボット電話がかかってきて、英語でペラペラしゃべりはじめます。ドメスティックな人は大混乱になりますが、もしこれを選んだとしてもナンバーを読み上げる部分はゆっくりとしゃべってくれるので聞きながらメモをちゃんと取りましょう。
また、テキストメッセージというのは、NTT DocomoさんだとSMS(ショートメールサービス)で来ます。電話番号に直接テキストメッセージを送るので、キャリアによって受け取り方は異なると思いますが、電話番号への直接メッセージを拒否されている方はキャリアのサイトから設定を確認する必要があります。
ちなみに発行されたランダムな数字は、割とタイトな時間内に入力して確認する必要があります。といっても1回タイムアップになっても2回目も同じ手順でチャレンジすればOKです。
2つ目のポイントは「カードによる確認」という点です。クレジットカードを準備していますので、クレカ情報を入力します。事前準備の個所でも触れましたが、もう一度書きます。ちゃんと明示的に継続利用する操作をWEBから行わない限りクレジットカードから料金が引き落とされることはありません。
一通り入力が終わったら、下部にある「サインアップ」ボタンを押下します。初回のみ、画面遷移に少し時間がかかりますが、めでたくAzureポータルの画面が出てきましたか?
忘れないうちにこのAzureポータルをお気に入り/ブックマーク登録しておきましょう。取り急ぎちゃんと無料試用版サブスクリプションになっているか確認してみましょう。左側ペインの下部にある「サブスクリプション」をクリックします。
ちゃんと無料試用版サブスクリプションになっていますね。クリックすると右側へニョキっと有効期限や利用状況のグラフなどが確認できます。
とりあえずこれで、Microsoft Azureをいじれるお膳立ては整いました!
ここでの記事は、これでおしまいとし、ゴールである仮想マシンの作成については別の記事で記載したいと思います。
↓次の記事
はじめてのMicrosoft Azure(仮想マシン) - LinuxユーザーがイジるはじめてのAzure
*1:本記事は2016/3に記載したものです。ご覧になられたタイミングによっては見え方や操作方法が異なる場合がございます。