kWatanabe 記事一覧へ

kWatanabe の 技術帖

某企業でOSや仮想化の研究をやっているインフラ系エンジニア。オンプレとクラウドのコラボレーションなど、興味ある技術を綴る。

AWS・Azure・自宅にてマルチでハイブリッドなクラウドを作ってみた(その2)

大要

  • 自学自習のため、マルチでハイブリッドなクラウドを作ってみた
  • ゴールは、各リソースをパブリックな通信なしで利用できるようにすること
  • 前回はL3レベルでのサイト間VPNで、IaaS層のハイブリッド化行った
  • 今回は AWS と Azure の PaaS を各拠点のネットワークで相互に繋いで PaaS層のハイブリッド化を行う

前回はこちら kwatanabe.hatenablog.jp

背景

  • 前回記事参照

PaaSのハイブリッド化

  • 前回の作業でAmazon VPC、Azure VNet、自宅のLANが相互に接続されている
  • PaaSをこれらVPCやVNetに所属させることができれば、PaaSのハイブリッド化も実現できる
  • Azure PaaS と AWS PaaS では設計思想の違いから必要なアプローチが異なる

AWS PaaS

  • AWS PaaS は VPC に対してプラガブルな設計となっているので、多くのメニューでそのまま VPC のサブネットに繋げることができる
  • 例えば、Amazon RDS だと作成時にVPCとサブネットグループを指定できる
  • RDSのマルチAZ対応するには適切なルーティング設定が VPC に必要

f:id:kWatanabe:20200926121949p:plain
Amazon RDS での 接続先VPC の設定

Azure PaaS

  • VNet は IaaS のための仕組みであり、PaaS の接続は考慮されていない
  • Azure PaaS は各リソースがパブリックな世界で孤立している
  • VNet に繋ぐには、そのための機能が PaaS に備わっている必要がある
  • 例えば、Azure App Service では以下の機能が提供されている
    • VNet Integration
      • Gateway-required VNet Integration
      • Region VNet Integration
    • Hybrid Connections
    • プライベートエンドポイント (Preview)

docs.microsoft.com docs.microsoft.com docs.microsoft.com

具体例

f:id:kWatanabe:20200926124232g:plain
デモ環境のイメージ

  • Azure App Service と Amazon RDS を繋いで簡単なWebシステムを作る
  • RDS のパブリックアクセシビリティを無効にして、マルチクラウドが実現できている事を確認する
  • App Serivce を VNet に接続する手段は Region VNet Integration を用いる

Amazon RDS

インスタンスを作成する。作成に特別な手順は必要ない。以下のパラメータ以外は好きに選んでかまわない。

  • エンジン:MySQL (MySQL Community 8.0.20)
  • マルチAZ配置:なし
  • 接続VPC:Hybrid-VPC (前回記事参照)
  • サブネットグループ:新規
  • パブリックアクセス:なし
  • VPCセキュリティグループ:3306/TCPを許可
  • アベイラビリティゾーン:Hybird-Subnetと同じところ
  • データベースポート:3306
  • 認証:パスワード認証
  • 最初のデータベース名:wordpress

インスタンスがデプロイされたら、コンソールからエンドポイント名を確認したうえで、同じサブネットに属するEC2からプライベートIPアドレスを調べておく。

f:id:kWatanabe:20200926125304p:plain
RDSのエンドポイントの確認

$ nslookup XXXXXXXXXXXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
Server:         192.168.20.2
Address:        192.168.20.2#53

Non-authoritative answer:
Name:   XXXXXXXXXXXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
Address: 192.168.20.225

以上でRDSの構築は完了。

Azure App Service

インスタンスを作成する。まずは通常の手順でデプロイする。

ネットワーク⇒VNet統合から、以下の設定を行う。

  • 仮想ネットワーク:前回作成した Azure VNet
  • サブネット:Hybrid_Subnet_Dammy

構成⇒アプリケーションの設定から、以下の設定を行う。

  • パラメータ:WEBSITE_VNET_ROUTE_ALL
  • 値:1

プロイセンター⇒FTPから接続情報を取得して、FTPクライアントで任意のディレクトリに Wordpressアーカイブを展開する。

  • なお、5.5系はPHP7.4以降を推奨としているため、5.4系を用いる

一旦、App Serivceを「停止」⇒「起動」でコールドブートした後に、WordPress をデプロイした URL にブラウザで繋ぎ、初期設定を行う。

  • データーベースのホスト名は、RDS をデプロイしたときに調べたプライベートIPアドレスを指定する。

f:id:kWatanabe:20200926130633p:plain
Wordpressの初期設定

以上でApp Serivceの構築は完了。

まとめ

f:id:kWatanabe:20200926131504p:plain
最終構成

  • 本記事の手順を実施した時点で上記の環境が完成する。
  • App Serivce にアクセスすればWordpressが稼働しており、その後にRDSを停止させれば「データベース接続エラー」となるはず。
    • Region VNet Integration は IaaS ⇒ PaaS 方向の通信をフォワードしない
    • App Service の前段に自宅やAWSで動くリバースプロキシを挟みたい場合などは他の方法が必要になる
  • Azure PaaS のハイブリッド化はなかなかの鬼門のようだ