Azure 基礎１：AzureでLinuxのVMを作成してWEBページを公開する

こんにちは。
ZOZOテクノロジーズ　開発部の杉山です。

弊社では、Azure環境でVMを使用し開発支援ツールなどを運用している箇所があります。
今回は、Azureの基礎として、LinuxのVMを構築して「Hello World」を表示して公開する方法をご紹介します。




#はじめに

####■Azureとは
Microsoft Azureは、ビジネス上の課題への対応を支援するために絶えず拡大を続けるクラウド サービスの集合体です。
世界規模の巨大なネットワークに対し、お気に入りのツールやフレームワークを使ってアプリケーションを自在に構築、管理、デプロイすることができます。

無料アカウントを作成すると、2万円分の期間限定クレジットと、12か月無料のサービスの利用が可能です。（2019年1月4日現在）
今回は、この無料アカウントを使って、VMを構築し、簡単なWEBページを公開したいと思います。
すでにアカウントを持っている場合はご自身のアカウントをご利用ください。


####■Azureの「Virtual Machines」サービス
Azureはクラウドサービスですので、たくさんのサービスが提供されています。
その中で今回は、「Virtual Machines」というサービスを使用します。


####■Virtual Machines（以降VMという）とは
VM=仮想マシンのことです。
皆さんが使用しているPCやMacは「物理マシン」。
「仮想マシン」は、「ソフトウェアを使ってコンピュータ内に擬似的に再現したコンピュータ」のことです。
細かな説明は割愛しますが、コンピューターの中に複数の仮想マシンが作成できるので、
複数台のハードウェアを購入しなくても、複数のコンピューターをVMで作成することができます。

VMについて詳しく知りたい方は、「VMとは」で検索してみてください。





####■本記事で使用するそのほかの技術
VM構築手順で使用する以下の技術について、事前に習得している前提で話を進めますので、
必要に応じて、学習・準備をしたうえでご覧ください。

```
・sshによる公開鍵認証での接続
・WindowsWSL、ないしMacターミナルでの作業
・CLIでのWebサーバーの簡単な設定各種
```





#AzureでLinuxのVMを作成して公開する。

####■リソースグループの作成
Azureでは、サービスを利用して作成したものを「リソース」と呼びます。
また、リソースを「リソースグループ」として管理することで、関連リソースの管理を容易にしております。
例えば、「TechBlog-VM-rg」というリソースグループを作成して複数のリソースを管理すると、
リソースを削除する場合にまとめて削除することができます。また、リソースグループごとの課金状況が確認できたりもします。

今回は、「TechBlog-VM-rg」というリソースグループを作成して作業を進めます。

```
１：無料アカウントでログインしたホーム画面で、左のメニューの「リソースグループ」をクリック。
　（メニューにない場合は、「全てのサービス　＞　リソースグループ」をクリック。）
２：追加
３：サブスクリプションを選択
４：リソースグループ名「TechBlog-VM-rg」を入力
５：作成をクリック
```
作成が完了すると一覧にリソースグループが表示されます。


![resource_group.jpg](https://qiita-image-store.s3.amazonaws.com/0/27112/98556036-39a8-2999-d398-8f73408922d0.jpeg)




####■VM作成
VMを作成します。
リソースグループは先ほど作成した「TechBlog-VM-rg」を選択し、ディスクやCPUなどの「サイズ」設定は、適宜選択することにします。
今回は設定しませんが、サービスを運用する本番環境の構築時には、ネットワークセキュリティグループで各種ポートのIP制限などのセキュリティを設定することをお勧めします。

```
１：無料アカウントでログインしたホーム画面で、左のメニューの「Virtual Machines」をクリック。
　（メニューにない場合は、「全てのサービス　＞　Virtual Machines」をクリック。）
２：「追加」をクリック
３：各種設定を選択して確認、作成をクリック（設定サンプルは後述します）
４：作成が完了すると、「Virtual Machines」の一覧に、作成したVMが表示されます。
```

![vm_list.jpg](https://qiita-image-store.s3.amazonaws.com/0/27112/9c4326a0-cf6b-0b1c-aa2b-513bd9862bf6.jpeg)

＜TIPS＞
ログイン方法はパスワード認証ではなく、公開鍵認証をオススメします。
また本記事では、公開鍵認証で手順を進めていきます。
鍵の生成方法については、検索してみてください。
使用イメージは「CentOS7.5」を使用します。





##設定サンプル
```
＜基本＞
　サブスクリプション：xxxxxx
　リソース グループ：TechBlog-VM-rg
　仮想マシン名：TechBlog-VM
　地域：東日本
　可用性オプション：インフラストラクチャ冗長は必要ありません
　イメージ：CentOS-based 7.5
　サイズ：Standard A0、1 vcpu、0.75 GB のメモリ
　認証の種類：SSH 公開キー
　ユーザー名：techblogvm
　パブリック受信ポート：HTTP, HTTPS, SSH

＜ディスク＞
　OS ディスクの種類：Standard HDD
　マネージド ディスクを使用：はい
　
＜ネットワーク＞
　仮想ネットワーク：(新規) TechBlog-VM-rg-vnet
　サブネット：(新規) default (10.0.0.0/24)
　パブリック IP：(新規) TechBlog-VM-ip
　高速ネットワーク：オフ
　この仮想マシンを既存の負荷分散ソリューションの後ろに配置しますか?：いいえ

＜管理＞
　ブート診断：オン
　OS のゲスト診断：オフ
　診断ストレージ アカウント：(新規) techblogvmrgdiag
　システム割り当てマネージド ID：オフ
　自動シャットダウン：オフ
　バックアップ：無効

＜ゲストの構成＞
　拡張機能：なし
　クラウドの初期化：いいえ

```



####■VMに接続する

VMが作成されると一覧にVMが表示されます。
作成したVMを選択して「概要」を開くとVMの情報が確認できます。
このVMの公開されている「パブリックIP」が確認できますのでメモしておきます。

![vm_detail.jpg](https://qiita-image-store.s3.amazonaws.com/0/27112/e8b34437-4c4c-6642-4a9c-b1b3f6aec42d.jpeg)



VMにログインするためには、作成時に設定した「ssh」での「公開鍵認証」でログインします。
Windowsならば「WSL（Windows Subsystem for Linux）」や「Ubuntuアプリ」など。Macなら「ターミナル」で「SSH」を使用します。
今回はWindowsのWSLで話を進めます。

・シェルでVMのパブリックIP指定で、SSHログインします。

```
$ ssh -i ~/.ssh/id_rsa techblogvm@{IPアドレス}
```


ログインできました。

今回はCentOSなのでバージョンを確認してみます

```
#CentOSバージョン確認
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
```

指定したOSでVMが稼働していることが確認できました。

また、Azure Portalの作成したVMの概要ページから「開始や停止、再起動」もできますし、
各種稼働状況も確認できます。

![vm_metric.jpg](https://qiita-image-store.s3.amazonaws.com/0/27112/84c3c10e-3177-3041-807d-f5d63f0e6d66.jpeg)




####■WEBサーバーについて
VMができたのでブラウザにWEBページを表示させるためには、ミドルウエアが必要になります。
代表的なWEBサーバーとしては

```
・Apache（Apache HTTP Server）
・Nginx
・IIS（Microsoft Internet Information Services）
```

などがあげられます。
ApacheはHTTPサービスに特化しています。
nginxは大量のリクエストを処理するのに向いているので、近年は人気です。
IISはMicrosoft製なので、windowsサーバーに向いています。
それぞれの用途の違いはまた別の機会に。

今回は、HTTPのサービスに特化しているapache（アパッチ）を使用します。
また、apacheとともによく用いられるphpも入れて、LAMP環境と言われている環境をセットアップします。

```
L : Linux
A : Apache
M : MySQL（今回はインストールしません）
P : PHP
```

と理解していただければと思います。




####■作成したVMにブラウザでアクセスして「hello world」を表示する

VMが作成できたので、WEBサーバー構築経験のある方であれば、好きにセットアップしていただくことができます。
データベースをいれたり、Dockerを稼働させたりできますし、オンプレのLinuxサーバーと何ら変わりありません。

今回は、最低限のWEBサーバーを「統合パッケージ管理システム」を使用してセットアップし「hello world」を表示します。

以下のコマンドで、CentOSで「apache」と「php7.2」を使用したWEBサーバーのセットアップを行ってください。


#####＜CentOSでのセットアップ方法＞

```
sudo yum install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install -y --enablerepo=remi,remi-php72 php
sudo systemctl enable httpd.service 
sudo systemctl restart httpd.service
```

これで、WEBサーバーが稼働しました。
`http://{パブリックIPアドレス}`にアクセスすると、Apacheのテストページが表示されます。


PHPファイルを設置してみましょう。

```
sudo vi /var/www/html/index.php
```

```
<?php echo "hello world";
```

phpinfoを表示したい場合は、

```
<?php phpinfo();
```


`http://{IPアドレス}`にアクセスすると「hello world」が表示されました。

本来は、セキュリティ設定や「apach」の「httpd.conf」の各種設定、「php設定」などが必要ですが、
今回は割愛します。




####■DNS名を設定

Azureでは、「azure.com」を使用したDNS名ラベルの設定が行えます。
今回は「techblog-vm」を指定してDNS登録してみます。


・VMの管理画面から「構成＞DNS名ラベル」を選択
・「DNS名ラベル」に「techblog-vm」を入力
・保存
![vm_dns.jpg](https://qiita-image-store.s3.amazonaws.com/0/27112/3685f4d8-0e05-4c61-cc4d-63a1df4fa958.jpeg)



保存が完了したら、
設定された`http://techblog-vm.xxxxxx.xxxxxxx.azure.com/`にアクセスしてみましょう。

「hello world」が表示されました。

独自ドメインをお持ちであれば、そちらを設定する方法もあります。





####■コラム
OSの違い：どのOSを選べばいいの？

今回はCentOSを使用していますが、ubuntuを使用する場合は、コマンドが若干変わってきます。
Linuxにはいろいろディストリビューションがありその違いによって、パッケージ管理ソフトのコマンドが変わります。
今回ご紹介したCentOS以外では、Ubuntuが比較的好まれていると思いますが、両者の違いを簡単にご紹介します。

```
ーRHEL系
・Red Hat Enterprise Linux
・CentOS

ーDebian系
・Debian GNUL/Linux
・Ubuntu

ーパッケージ管理
・Redhat系：「rpm＋yum」
・Debian系：「deb+apt」

ー方向性
　簡単に言うと
・Redhat系：デファクトスタンダードを追従し、Enterpriseな安定性をもとめる。
・Debian系：先進性を重視し、独自のものも採用する方針。
```

それぞれのサイトにある説明を見て解釈していただければ幸いです。


なので、個人使用の場合は、OSの選択は好みで選んでよいと思います。
両方のコマンドを覚えるのも大変ですしね。

会社で使用する場合には、会社のレギュレーションをもとに、どのOSを採用するか検討しましょう。


----


いかがでしょうか？
Azureでは簡単にVMを作成し公開することができます。


ご興味がありましたら、無料アカウントでWEBサーバー構築にチャレンジして、独自のサービスを公開してみてください！