AzureでWebアプリケーションを動かす環境を作ってみよう
- 1.初めに
- 2.リソースグループの作成
- 3.ネットワークの作成
- 4.メンテナンスサーバー(踏み台サーバー)の作成
- 5.Webサーバーの作成
- 6.Load Balancer(ロードバランサ)の作成
- 7.データベースの作成
1.初めに
AzureでWebアプリケーションを動かす環境を作ってみます。
AzureはMicrosoftのクラウドサービスですが、Windowsサーバーの環境だけではなくIaaS(Infrastructure as a Service)でLinuxのサーバーも立てることが出来ます。
今回作る構成の概要は以下の通りです。
- Webサーバー2台、OSはLinux、CentOS7
- HTTPリクエストはLoad Balancerが受けてWebサーバーに振り分け
- DBはAzure Database for MySQL ←これはPaaS(Platform as a Service)
- メンテナンスサーバー(踏み台サーバー)をたててWebサーバー、DBへのアクセスはここ経由にする
- グローバルIPアドレスはLoad Balancerとメンテナンスサーバーが持つ
- VNETは1つ、Webサーバー、メンテナンスサーバーでサブネットを分ける
ではstep by stepで作ってみましょう。
構成図
2.リソースグループの作成
まずはリソースグループを作成します。
Azureではサブスクリプション単位で課金額が集計されますが、そのサブスクリプションの下にリソースグループがぶら下がります。
プロジェクト毎にリソースグループを作るイメージですね。
今回は「lemon」というプロジェクト名を想定してリソースグループを作ってみます。
リソースグループ名「rg-lemon」を入力、リージョンは「東日本」を選択します。
リソース命名規則はMSの資料を参考にしてみてください。
次にタグですが、
「project=lemon」、「environment=production」と2個のタグをつけました。
これで作成します。
リソースグループ「rg-lemon」が作成されました。
「NetworkWatcherRG」というリソースグループも作成されています。これは自動で作成されるものでこのままで大丈夫です。
3.ネットワークの作成
Webサーバーやメンテナンスサーバーを配置するネットワークを作成します。
新規作成から「仮想ネットワーク」を選択します。
仮想ネットワーク名に「vnet-lemon」を入力します。地域は「東日本」。
次にサブネットを作成します。
下記2個のサブネットを作成しました。
- subnet-manage -> 10.1.0.0/24
- subnet-public -> 10.1.10.0/24
sunet-publicにWebサーバー、sunet-mangeにメンテナンスサーバー(踏み台サーバー)を置く予定です。
タグには作成済みの「project=lemon」、「environment=production」を選択して、追加で「resource=vnet」を入れました。
これでVNETを作成します。
4.メンテナンスサーバー(踏み台サーバー)の作成
まず、各サーバーへアクセスするためのメンテナンスサーバー(踏み台サーバー)を作成します。
新規作成画面で”centos”を検索します。
「CentOS-based 7.5」を選択して作成します。
仮想マシンを作成していきます。
仮想マシン名は「vm-ope-prod」、 ユーザー名には「lemon」と入力しました。
サブネットは「subnet-manage」、パブリック IPはデフォルトのままです。
受信ポートはSSH(22)を選択しておきます。
Virtual Machineを作成します。
「秘密キーのダウンロードとリソースの作成」をクリックしてサーバーの作成とSSHログインのための秘密鍵のダウンロードを行います。
作成出来たら「vm-ope-prod」の概要にアクセスしてパブリック IP アドレスを確認します。
Tera TermなどのSSHクライアントでログインしてみましょう。
ダウンロードした秘密鍵を使います。
ログイン出来たらSSHのポートを変えておきましょう。
今回は「54321」としました。
変更したらsshdをrestartします。
Azureの管理画面でネットワークの受信ポートの規則でSSHの宛先ポート範囲を「54321」に変更しましょう。
ポート54321でSSHログインして下記コマンドでTimezoneとLocaleを変更します。
sudo localectl set-locale LANG=ja_JP.utf8
sudo timedatectl set-timezone Asia/Tokyo
変更したらrebootします。
5.Webサーバーの作成
Webサーバーを作成します。
メンテナンスサーバーと同様CentOSで作成します。
リソースグループ「rg-lemon」、仮想マシン名「vm-we01-prod」、可用性オプションに「可用性セット」を選択して「avail-lemong-wewb-prod」と入力、あとはデフォルトのままです。
SSHの情報を入力します。
まず、「SSH 公開キーのソース」には ”既存の公開キーを使用” を選択します。
メンテナンスサーバーからSSHログイン出来るようにするため、メンテナンスサーバーのユーザー「lemon」の公開キーが必要です。
公開キー取得のため「PuTTYgen」をインストールして起動します。
起動したらLoadボタンでメンテナンスサーバーの「vm-ope-prod_key.pem」をLoadします。選択画面でpemファイルが表示されるようにファイル名でAll files(*.*)を選択してください。
メンテナンスサーバー作成時にダウンロード済みの「vm-ope-prod_key.pem」を選択します。
Importされました。OKを押して進みます。
Public key for pasting into OpenSSH authorized_keys file: の中の公開鍵をコピーします。
SSH 公開キー欄に貼り付けます。
SSHログインユーザー(OSアカウント)名は「lemon」。
「次: ディスク」に移ります。
Premium SSDのまま「次: ネットワーク」に移ります。
Webサーバーなのでサブネットには「subnet-public」を選択します。
Webサーバーは直接インターネット側からアクセス出来ないようにするため、パブリック IPには「なし」を選択します。構成図のようにインターネットからのリクエストはロードバランサが受けてWebサーバーに振り分けます。WebサーバーにSSHログイン出来るのは踏み台サーバー経由に制限されます。
受信ポートを選択ではHTTP(80)、HTTPS(443)を選択し、SSH(22)は外します。
残りはデフォルトのままです。Virtual Machineを作成しましょう。
vm-web01-prodが出来たら、メンテナンスサーバーからvm-web01-prodにsshログイン出来るようにします。
先ほどのPuTTYgenでConversions → Export OpenSSH key をクリックします。
ファイル名は「id_rsa」として保存します。
次にWinSCPでメンテナンスサーバーにアクセスしてみましょう。
メンテナンスサーバーのIPアドレス、ポート番号を指定します。
「設定」をクリックしてダウンロード済みの「vm-ope-prrod_key.pem」を選択します。pemファイルを選択出来るように「すべてのファイル(*.*)」を選択します。
OKで進みます。
ファイル名「vm-ope-prod_key.ppk」として保存します。
このppkファイルを使ってWinSCPでメンテナンスサーバーにアクセスします。
アクセスしたら/home/lemon/.sshに先ほどのid_rsaファイルを転送します。
「id_rsa」ファイルを転送したらメンテナンスサーバーにsshログインします。
ログインしたら「/home/lemon/.ssh」に移動してid_rsaファイルのパーミッションを変更します。
「chmod 600 id_rsa」でOwnerだけがRead Write出来るパーミッションに変更します。
vm-web01-prodサーバーにvm-ope-prodからsshログインしてみます。
パスワード無しでsshログイン出来ました。
もう1つのWebサーバー「vm-we02-prod」も同じように作ってください。
可用性オプションでは「vm-we01-prod」と同じ可用性セット「avail-lemon-web-prod」を選択してください。
6.Load Balancer(ロードバランサ)の作成
Azureには「Application Gateway」というWAF(Web Application Firewall)機能付きのロードバランサのサービスもありますが、価格が高いので今回は単純にリクエストをバックエンドに振り分けるだけのLoad Balancerを作ります。
Load Balancerを作る前にvm-web0(1|2)-prodにWebサーバーをインストールしましょう。今回はNginxを使います。
まず、yumでインストールされているパッケージを最新にします。
[lemon@vm-web01-prod ~]$ sudo yum -y update
ファイル /etc/yum.repos.d/nginx.repo を新規に作成してnginxの設定を追加します。
[lemon@vm-web01-prod ~]$ sudo vi /etc/yum.repos.d/nginx.repo
この内容を貼り付ける。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
インストールします。
[lemon@vm-web01-prod ~]$ sudo yum -y install nginx
起動します。
[lemon@vm-web01-prod ~]$ sudo systemctl start nginx
wgetで確認します。
[lemon@vm-web01-prod ~]$ wget localhost --2020-09-06 03:36:51-- http://localhost/ localhost (localhost) をDNSに問いあわせています... ::1, 127.0.0.1 localhost (localhost)|::1|:80 に接続しています... 失敗しました: 接続を拒否されました. localhost (localhost)|127.0.0.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 612 [text/html] `index.html' に保存中 100%[==========================================================================================================================================>] 612 --.-K/s 時間 0s 2020-09-06 03:36:51 (102 MB/s) - `index.html' へ保存完了 [612/612]
ではLoad Balancerを作成しましょう。
名前は「rg-lemon-prod」、パブリックIP名は「pip-lemon-prod」、割り当ては「静的」としました。
LBがリクエストを振り分ける先のバックエンドプールを追加します。
仮想ネットワークに「vnet-lemon」を選択して仮想マシンを追加します。
正常性プローブを追加します。
負荷分散規則を追加します。
それではLoad Balancerに割り当てられたパブリックIPアドレスにブラウザでアクセスしてみましょう。
Nginxのデフォルトページが表示されたら成功です。
7.データベースの作成
PaaSのAzure Database for MySQLを作成します。
vCoreとストレージは必要な数を選んでください。
管理者ユーザー名とPWを入れて作成します。
メンテナンスサーバーにMySQLのクライアントを入れてみましょう。
(参考先)
[MySQL][5.7]MySQL クライアントをインストールする
下記サイトからrpmをDownloadしてインストールします。
wgetでリポジトリセットアップパッケージをDownload
[lemon@vm-ope-prod ~]$ wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
リポジトリのインストール
[lemon@vm-ope-prod ~]$ sudo yum localinstall ./mysql80-community-release-el7-3.noarch.rpm
MySQL8.0の無効化とMySQL5.7の有効化
[lemon@vm-ope-prod ~]$ sudo yum-config-manager --disable mysql80-community
[lemon@vm-ope-prod ~]$ sudo yum-config-manager --enable mysql57-community
バージョン5.7が有効になっていることを確認
[lemon@vm-ope-prod ~]$ yum repolist all | grep mysql
mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community 無効
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - S 無効
mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community 無効
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - S 無効
mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community 無効
mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - S 無効
mysql-connectors-community/x86_64 MySQL Connectors Community 有効: 165
mysql-connectors-community-source MySQL Connectors Community - So 無効
mysql-tools-community/x86_64 MySQL Tools Community 有効: 115
mysql-tools-community-source MySQL Tools Community - Source 無効
mysql-tools-preview/x86_64 MySQL Tools Preview 無効
mysql-tools-preview-source MySQL Tools Preview - Source 無効
mysql55-community/x86_64 MySQL 5.5 Community Server 無効
mysql55-community-source MySQL 5.5 Community Server - So 無効
mysql56-community/x86_64 MySQL 5.6 Community Server 無効
mysql56-community-source MySQL 5.6 Community Server - So 無効
mysql57-community/x86_64 MySQL 5.7 Community Server 有効: 444
mysql57-community-source MySQL 5.7 Community Server - So 無効
mysql80-community/x86_64 MySQL 8.0 Community Server 無効
mysql80-community-source MySQL 8.0 Community Server - So 無効
MySQLのクライアントをインストール
[lemon@vm-ope-prod ~]$ sudo yum -y install mysql-community-client
MySQLに接続するために接続のセキュリティでメンテナンスサーバーのグローバルIPアドレスを接続許可に追加します。
SSL接続は無効にします。
サーバー名とサーバー管理者ログイン名を使ってMySQLに接続します。
WebサーバーからWebアプリケーションがMySQLに接続するには、メンテナンスサーバー同様にWebサーバーのグローバルIPアドレス(GIP)を許可許可設定してください。
GIPは下記curlコマンドで分かります。
[lemon@vm-ope-prod ~]$ curl globalip.me
Load Balancerに割り当てられたGIPが表示表示されると思います。
これで完成です。
あとはこの環境の上にWebアプリケーションを構築出来ますね。