0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自宅サーバのバックアップとしてAzureを利用する

0
Last updated at Posted at 2026-05-06

はじめに

学生アカウントであるAzure for Studentsを使用している。
この100ドルのクレジットと無料枠を使用して、タダでバックアップサーバを構築する。

ハードウェア

インスタンスは以下のどれか

  • B1s (Intel/AMD)
  • B2pts v2 (ARMベース)
  • B2ats v2 (AMDベース)

ストレージ

64GB(P6 SSD)2ユニットまで12ヶ月間無料なのでこれを利用

アドレス

動的パブリックIP

使用技術

  • Cloudflare Tunnel
  • Application Insights(Azure)
  • Logic App(Azure)

VMの設定

VMを構築する。

VMの作成

仮想マシン>作成>仮想マシン
image.png

image.png

image.png

VMの設定

image.png
サブスクリプション: 「Azure for Students」
リソースグループ: [新規作成]
仮想マシン名: [任意]
リージョン: 「Japan East」
セキュリティの種類: 「Standard」
Standard_B2pts_v2 (ARM64アーキテクチャ)
OSイメージ:Almalinux OS 9 ARM64 Gen2

管理者アカウント

image.png
認証の種類: 「SSH 公開鍵」
ユーザー名: azureuser (デフォルト)
SSH 公開鍵のソース: 「新しいキー ペアの生成」

受信ポートの規則

image.png
受信ポートを選択:SSH (22)

ディスク

image.png
Premium SSD (P6) 64GiBを選ぶ

ネットワーク

image.png
image.png
パブリックIP: 「新規作成」し、SKUを Standard

接続

左メニューの「接続」>「Bastion」を選択
image.png
「Bastion を構成する」で Developer SKU(無料)を選択

ミドルウェアの設定

NginxとCloudflareの設定を行います

Nginx

Nginxのインストール

sudo apt update && sudo apt install nginx -y

Nginxのインストールと起動

sudo dnf install -y nginx
sudo systemctl enable --now nginx

サイト用ディレクトリの作成

sudo mkdir -p /var/www/example.com
echo "<h1>Welcome to example.com (Azure Backup)</h1>" | sudo tee /var/www/example.com/index.html
sudo chown -R nginx:nginx /var/www/
sudo chcon -R -t httpd_sys_content_t /var/www/example.com

ディレクトリに 755、ファイルに 644 の権限を付与

sudo find /var/www -type d -exec chmod 755 {} \;
sudo find /var/www -type f -exec chmod 644 {} \;

Nginxの設定ファイル作成

sudo vi /etc/nginx/conf.d/example.conf
-------------------------------------
server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
-------------------------------------

文法チェック

sudo nginx -t

エラーがなければ再起動

sudo systemctl restart nginx 

cloudflaredのインストール

Cloudflareのリポジトリを追加

sudo dnf config-manager --add-repo https://pkg.cloudflare.com/cloudflared-ascii.repo

パッケージをインストール

sudo dnf install -y cloudflared

ログイン

cloudflared tunnel login

表示されたURLをブラウザで開き、自分のアカウントでログインする。

トンネルを作成(azure-static-backupは任意の名前)

cloudflared tunnel create azure-static-backup

以下の表示が出るのでUUIDをメモする
Created tunnel azure-static-backup with id <36文字のUUID>

以下のコマンドでも確認できる

cloudflared tunnel list

config.yml の作成

sudo mkdir -p /etc/cloudflared
sudo vi /etc/cloudflared/config.yml
--------------------------------------------------------------------------
tunnel: <36文字のUUID>
credentials-file: /etc/cloudflared/<36文字のUUID>.json

ingress:
  - hostname: example.com
    service: http://localhost:80
  - service: http_status:404
--------------------------------------------------------------------------

認証ファイルがあることを確認

ls /home/azureuser/.cloudflared/

<36文字のUUID>.jsonがあればOK

移動

sudo cp /home/azureuser/.cloudflared/<36文字のUUID>.json /etc/cloudflared/

既存のサービス設定をリセット(念のため)

sudo cloudflared service uninstall

再インストールと起動

sudo cloudflared --config /etc/cloudflared/config.yml service install
sudo systemctl start cloudflared

状態確認

sudo systemctl status cloudflared
Active: active (running) と表示されればOK

GUIの設定

image.png

Cloudflareダッシュボード にログイン
対象のドメインの管理画面に入り、左メニューのDNS>レコード
image.png

現在設定されている CNAME レコード(オンプレミス用のトンネルIDを指しているもの)の [編集] をクリック
ターゲット欄を、今回作成したAzure用のUUIDに書き換える
<新規作成したトンネルのUUID>.cfargotunnel.com
[保存] をクリックして、サイトにアクセス後、切り替わっていることを確認する。

Azureで監視する

Azureポータルで「Application Insights」を検索し、任意の名前で作成
image.png

リソースグループ:<さっき作ったやつ>
地域: Japan east
ワークスペース:Defaultの新規のものimage.png

トラップを作成する

左側の調査>有効からクラシックテストの追加
テスト名:<任意>
SKU URL ping
URL:オンプレミスで稼働中のドメイン ★切り替えるドメインを指定すると駄目なので後述
image.png

切り替え時の挙動の設定

切り替えが必要となった場合(オンプレ側がダウンした場合)に実行させる処理を作成する。

APIの準備

トークンの作成

ダッシュボード内右上の人型アイコン>プロフィール>APIトークン>トークンを作成する
image.png
image.png

「ゾーンDNSを編集する」のテンプレートを使用する
image.png

作成したトークンをメモしておく

Record IDの取得

以下を適当なLinuxサーバで実行する。先程作成したVMで実行しても可。
Zone ID: 該当のドメインを選択して「概要」をスクロールすると表示されてる。

curl -X GET "https://api.cloudflare.com/client/v4/zones/{あなたのZoneID}/dns_records" \
     -H "Authorization: Bearer {あなたのAPIトークン}" \
     -H "Content-Type: application/json"

以下のようなjsonが返って来る

>{"result":[{"id":"XXXXXXXXXXXXXXXXXXXXXXXXXXX","name":……

idの「XXXXXXXXX」をメモしておく。これがRecord IDです。

Azure Logic Appsを構築する

Logic Appで検索してCreate
image.png

従量課金のマルチテナントを選択
image.png

リソースグループ:<さっき作ったやつ>
地域:
ログ分析を有効化:はい
Workflow Type:Stateful
image.png

左側の「アクセス制御(IAM)」から追加>ロールの割り当ての追加
image.png

ロール: 仮想マシン共同作成者
image.png

メンバー:マネージドIDを選択して、「メンバーを選択する」からマネージドIDをLogic appにして、さっき作成したLogic appを選択
image.png

左側の開発ツール>ロジック アプリ デザイナーから
image.png

トリガーを「When an HTTP request is received」を設定
image.png

下の+マークから「仮想マシンの開始」を追加
image.png
image.png

プルダウンからサブスクリプションIDと<さっき作ったリソースグループ>、<さっき作ったVM>を選択
image.png

下の+マークから「Delay」を追加
パラメータをCount:1、Unit:Minuteで設定
image.png

下の+マークから「HTTP」を追加
URI:https://api.cloudflare.com/client/v4/zones/{Zone_ID}/dns_records/{Record_ID}
Method: PUT
Headers:Authorization と Bearer APIトークン、Content-Typeとapplication/json
Body:以下を入れる

{
  "type": "CNAME",
  "name": "e-desuyo.com",
  "content": "<Azure用に新規で作ったトンネルのUUID>.cfargotunnel.com",
  "proxied": true
}

image.png

リソースグループのIAMを設定する

さっき作ったVMが所属するリソースグループを開く
左側の「アクセス制御(IAM)」から追加>ロールの割り当ての追加
image.png

ロール:仮想マシン共同作成者
image.png

メンバー:マネージドIDを選択して、「メンバーを選択する」からマネージドIDをLogic appにして、さっき作成したLogic appを選択
image.png

Logic appに戻る

Runを押して、正しくVMが起動することを確認する
image.png

開発ツール>実行履歴から動作を確認できる
image.png

さっき作ったApplication Insightsを開く
左メニューの監視>アラート>アクション グループ>作成
image.png

リソースグループ:<さっき作ったやつ>
リージョン:グローバル
image.png

アクションタブ>アクションタイプ:ロジック アプリ、「共通アラート スキーマを有効にします。」:はい
image.png

オンプレ側が復帰した場合の処理を追加する

ロジックアプリの修正

デザイナーを開き、トリガー(When an HTTP request is received)の直後に 「Condition」 ブロックを追加
左の欄をクリックして紫の「fx」を選択
image.png

パラメータを以下のように設定する
上部のテキスト欄にtriggerBody()?['data']?['essentials']?['monitorCondition']を入力
真ん中演算子は「=」、右はResolved
image.png

「仮想マシンの開始」以降をFalseに移動させる
image.png

True側で+を押して、「HTTP」を追加する。
さらにそのHTTPの下に「仮想マシンの割り当て解除」を追加
内容は「仮想マシンの開始」と同じ
image.png

追加したHTTPの内容

さっき作ったHTTPと同じ内容で最後のBodyだけ以下のように変更

{
  "type": "CNAME",
  "name": "e-desuyo.com",
  "content": "<オンプレ側のトンネルのUUID>.cfargotunnel.com",
  "proxied": true
}

テスト

実際にサービスを停めるなりして動作テストする。
切り替えと復旧が動作すればOK

注意!

Azureでオンプレの死活監視を行っているが、オンプレがダウンした場合に監視先のURLはオンプレに繋がる用になってしまうので、復旧の検知ができない。
なので、Application Insights の監視先を、「オンプレミスサーバーに直結し、かつAzureに切り替わらない専用URL」 に変更する必要がある。

死活監視用トンネルの作成

Cloudflare で監視用サブドメインを作る

image.png

ドメインを選択してルートを追加
image.png
image.png

monitor.example.comのようにサブドメインを追加する
サービスはhttp://localhost:80
image.png

Application Insights>有効からテストの宛先URLを新しいドメインにする
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?