Microsoft AzureでAP+DB環境を構築する

# はじめに

普段はAWSでクラウド環境を構築していますが、他のクラウド環境も触ってみようということで、何名かでMicrosoft Azure（以下、Azure）を使ってクラウド環境を構築してみました。

# クラウド環境構築のゴール

環境構築のゴールは以下のように設定しました。

* 仮想マシンを1つ用意する
* マネージドなデータベースを1つ用意する
* 仮想マシンにSSH接続できるか試す

# 目次

- [リソースを作成する](#リソースを作成する)
    - [リソースグループを作成する](#リソースグループを作成する)
    - [仮想ネットワークを作成する](#仮想ネットワークを作成する)
    - [仮想マシンを作成する](#仮想マシンを作成する)
    - [Azure Database for PostgreSQLを作成する](#azure-database-for-postgresqlを作成する)
- [構築結果を確認する](#構築結果を確認する)
- [おわりに](#おわりに)


# リソースを作成する

では作成して行きましょう。
Azureでクラウド環境を構築する上で、いくつかリソースを作成する必要があります。
AWSで言うとVPCとかEC2とかです。

## リソースグループを作成する

サブスクリプション内にリソースグループを作成します。
AWSはVPCを作りますが、Azureはもうひとつ上の階層としてリソースグループを作成します。
その中にネットワークや仮想マシンを入れていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/d5b9955c-20ee-749a-d25e-17aa1f181db8.png)


## 仮想ネットワークを作成する

リソースグループを作ったら、次に仮想ネットワークを作ります。
サブネットなど設定をして、この仮想ネットワークに配置するリソースのグルーピングを行います。
仮想ネットワークを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/4e36f9e8-0057-4b62-341d-8f64ae56cf03.png)

「作成」から仮想ネットワークの作成を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/d282ccee-cc27-49bd-421b-5c54e32f4bac.png)

サブスクリプションとリソース グループは作成済みのものを選択します。
サブスクリプションはすでに作成していて、リソース グループは先ほど作成したものを選びます。

続いて、サブネットを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/badef573-534a-64e3-4203-5f19ba2679a3.png)
IPv4を使用して、仮想ネットワークで使用するIPアドレスの範囲をCIDRを使って指定します。
今回は仮想ネットワークのネットワークアドレスが `10.1.0.0`、ホストアドレスの範囲が `10.1.1.1 ～ 10.1.255.255` なので、その範囲でサブネットを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/617806e0-07f8-4611-2dad-6e794db17a01.png)

`サブネットを追加` から、 `10.1.0.0/24` のサブネットを作成します。
このサブネットはネットワークアドレスが `10.1.0.0`、ホストアドレスの範囲が `10.1.0.1 ～ 10.1.0.255` になります。

続いてセキュリティと踏み台サーバーの設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/8ff5f7ea-7fd3-d769-c74f-c54a8536d51c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/3603f318-c348-ffaa-1898-d02bca592e5f.png)

:::note info
踏み台サーバーが必要なければ `BastionHost` を `無効化` とします
:::

:::note alert
踏み台サーバーは停止してもいつの間にか起動していたり、使わないのに起動したままだったり余計な課金が発生するので注意です
:::

続いてAzureが設定内容を検証します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/2cbcea2f-14ec-c93a-7d73-8b8a9b1d917f.png)

内容が間違えていなかったら `作成` ボタンから作成します。


## 仮想マシンを作成する

ネットワークを作成したら、続いてその上で動かす仮想マシンを作成します。
AWSで言うEC2です。

Virtual Machineを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/e3ba88b5-397b-9204-67f3-2a469b08934f.png)

作成から「Azure 仮想マシン」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/7324550f-56fe-1d2f-f883-99ce81db97d1.png)

作成先のサブスクリプション、リソースグループを指定して、各種パラメータを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/5dcae2ee-03d2-d802-a9bb-1f965aa1768f.png)
今回はDebian上に構築したいので、イメージにDebianを指定しています。

:::note info
サイズはお試しなので安いものを選択しました
:::

SSHのキーペアを作成するので、公開鍵と秘密鍵を後程保存します。
仮想マシンに接続するディスクの容量を、必要に応じて変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/a9b2ebaa-7e82-ab46-bf40-1665dbce8c83.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/c4803323-597b-c8ac-b63c-36f72fdb9c93.png)
そんなに容量はいらないので、16GiBにしました。

ネットワークの設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/e3f86390-c3cc-f72a-c040-ba616373ecd7.png)

作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/0ca81a2d-9c86-4499-9a9a-488b3a4eef4c.png)


## Azure Database for PostgreSQLを作成する

Azure Databaseを使ってデータベースを構築します。
AWSで言うところのRDSにあたるものです。

:::note alert
Azure DatabaseもAmazon RDSと同様に、シャットダウンしていても7日後に自動的に起動しますので、余計な課金に注意です
:::

今回はPostgreSQLを構築しようと思うので、Azure Database for PostgreSQLを選択して、データベースを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/9b1b6c10-520d-d7e8-3ab8-23453695b649.png)

デプロイオプションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/c7ce7df7-c7de-d8b0-d394-a95d96ad0839.png)

ディスク等、必要に応じてリソースを調整します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/80105cd5-6a8b-a4a6-ef16-af40379441c0.png)
基本的にはお試しなので最小構成です。

ネットワーク設定では、手っ取り早くパブリックアクセスを許可します。

:::note warn
セキュリティを考えたら、本来はプライベートアクセスを設定しましょう
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/322de37a-bcb8-dd44-8087-a1f6697763c5.png)

確認して、作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/25850b1b-6905-0619-4abf-f9dd2da0ac1a.png)

:::note warn
作成後に気付いたのですが、ファイアーウォールで許可するIPを指定しないとつながりませんでした
以下のように、ネットワーク設定時にファイアーウォールの項目があるのでそこであらかじめ設定しておく
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/05d12679-983f-1332-8792-a93c5e2b6f11.png)


# 構築結果を確認する

- リソースビジュアライザーで結果を参照できます
![環境構築後のリソースビジュアライザー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2387604/00d3e29f-61e4-1c70-3232-34a306911969.png)
- ローカルからSSHを使って仮想マシンに接続できるのを確認しました

# おわりに

普段AWSを使用していて、感覚的にはAWSと大差ないかなとは感じましたが、用語や細かいところが違ってその点は学習が必要だと思いました。