LoginSignup
0
0

More than 3 years have passed since last update.

プライベートネットワーク環境からAzure BLOBへ読み書きする際にやったことまとめ

Last updated at Posted at 2020-08-13

はまったのでまとめ。
これをやると、「nginx は DNS問合せ結果をキャッシュして、再起動されるまで更新しない」事象にあたるので、別途考慮が必要。

概要

要件

  • プライベートネットワーク環境にあるクライアント (A) から Azure BLOB(パブリックエンドポイント) (B) 上へ、ファイルをダイレクトに転送したい
  • (A)→(B)

環境的制約

  • (A)は直接インターネットへは出ていけない
  • (B)はパブリックエンドポイントを持ち、Express Route 上に構築された Azure VM (C) からのみアクセス可

解決方法

  • (C)上にリバースプロキシを構築して、(A)からのリクエストを転送する
  • (A)→(C)→(B)

やったこと

クライアント(A)

hosts ファイルでクライアントを騙す。これをやることでクライアントは(C)を意識せずに(B)と会話できるようになる。

/etc/hosts
[(C)のプライベートIPアドレス] [(B)のストレージアカウント].blob.core.windows.net

Azure VM(C)

nginx (Windows版)でリバプロ構築。nginxインストール手順・起動手順等は割愛。
ローカルの443番ポートに来たTCPリクエストを(中身を見ないで)upstream側に飛ばす。

nginx.conf

worker_processes  1;

error_log  C:\\nginx\logs\error.log;
error_log  C:\\nginx\logs\error.log  notice;
error_log  C:\\nginx\logs\error.log  info;
error_log  C:\\nginx\logs\error.log  warn;

pid        C:\\nginx\logs\\nginx.pid;

events {
    worker_connections  1024;
}

# リバプロ設定追加
stream {
    upstream azureblob {
        server [(B)のストレージアカウント].blob.core.windows.net:443;
    }

    server {
        listen 443;
        proxy_pass azureblob;
    }
}

はまったポイント

nginx に http を解釈させようとして、「クライアントからのリクエストは http で、バックエンドが https なんだがどうやるんだ?」となっていた

青天の霹靂

nginx は stream という機能により L3 スイッチ 的な挙動をすることができる!( http を解釈しない)

やればよかったと思ったこと

時間的に余裕がなくて後回しにしていたが、先にやっていればこんなにはまらなかったかも、というもの。

  • テスト環境が圧倒的に足りなかった
  • Azure BLOB で提供されている REST API を知らなさすぎ
  • Azcopy 仕様を知らなさすぎ
  • nginx を知らなさすぎ

何をしたか

最終的に暗闇から抜け出せたのは nginx の本を読んだことだった。

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