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 に必要
Azure PaaS
- VNet は IaaS のための仕組みであり、PaaS の接続は考慮されていない
- Azure PaaS は各リソースがパブリックな世界で孤立している
- VNet に繋ぐには、そのための機能が PaaS に備わっている必要がある
- 例えば、Azure App Service では以下の機能が提供されている
docs.microsoft.com docs.microsoft.com docs.microsoft.com
具体例
- 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アドレスを調べておく。
$ 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
インスタンスを作成する。まずは通常の手順でデプロイする。
- 公開:コード
- ランタイムスタック:PHP 7.3
- オペレーティングシステム:Linux
- 地域:Japan East
- Linuxプラン:(新規)
- SKUとサイズ:S1
ネットワーク⇒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アドレスを指定する。
以上でApp Serivceの構築は完了。
まとめ
AWS・Azure・自宅にてマルチでハイブリッドなクラウドを作ってみた(その1)
大要
- 自学自習のため、マルチでハイブリッドなクラウドを作ってみた
- AWS、Azure、自宅の各拠点をプライベートなネットワークで結ぶ
- ゴールは、各リソースをパブリックな通信なしで利用できるようにすること
- まずは、Softether VPNでサイト間VPNを構築した
次回は PaaS を VPN に繋げる話。 kwatanabe.hatenablog.jp
背景
- 浦島太郎なkWatanabeにとって、クラウドといえばOpenNebula、OpenStack、CloudStackであって、パブリックなクラウドは馴染みがない
- コレはイカんと思い、会社の勉強会*1にかこつけて、何かパブリッククラウドで遊んでみようと思った
- システムを知るにはまずは足回りからがモットーなので、まずは生の計算機とネットワークが見えそうな、マルチでハイブリッドなクラウドに挑戦した
マルチでハイブリッドなクラウド
サイト間VPN
- まず、各拠点をプライベートなネットワークで結ぶためにサイト間VPNを作る
- 各事業者でVPNのPaaSを提供
- 今回は1つの仕組みで完結させる為、Softether VPNを採用
- 注意点としては、AWSもAzureも仮想ネットワークはL3レベルでフィルタされているので、L2ではなくL3でサイト間VPNをはる必要がある
ネットワークの整備
自宅
- 192.168.1.0/24 が整備されている
- VPNサーバ以外の各端末のルーティングテーブルを設定する
- 192.168.20.0/24 via 192.168.1.249 (VPNサーバの仮想L3スイッチの内向きアドレス)
- 192.168.21.0/24 via 192.168.1.249 (同上)
- 192.168.30.0/24 via 192.168.1.249 (同上)
- 192.168.31.0/24 via 192.168.1.249 (同上)
- 192.168.10.0/24 via 192.168.1.249 (同上)
Amazon VPC
- CIDRの範囲:192.168.20.0/24 と 192.168.21.0/24
- サブネット「Hybrid-Subnet」
- サブネット「Hybrid-Subnet-Dammy」
- CIDR:192.168.21.0/24
- アベイラビリティゾーン:Hybrid-Subnetと異なるところ
- ルートテーブルなし
Azure VNet
- IPv4 アドレス空間:192.168.30.0/24 と 192.168.31.0/24
- サブネット「Hybrid_Subnet」
- CIDR:192.168.30.0/24
- ルートテーブル
- 192.168.1.0/24 via 192.168.30.100 (VPNブリッジのVirtualMachine)
- 192.168.20.0/24 via 192.168.30.100 (同上)
- 192.168.21.0/24 via 192.168.30.100 (同上)
- サブネット「Hybrid_Subnet_Dammy」
- CIDR:192.168.31.0/24
- ルートテーブルはHybrid_Subnetと同じ
- BastionHost:無効化
- DDoS Protection Standard:無効化
- ファイアウォール:無効化
- サブネット「Hybrid_Subnet」
Softether VPN のインストール
自宅(VPNサーバ)
- 環境は、LXCで構築した Debian 10 のシステムコンテナ
- ネットワークインタフェースは2つ
SoftEther の サイトから Linux 64bit 用のバイナリを入手してリンクする
$ sudo apt install wget gcc make $ cd /opt $ wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz -O - | sudo tar xzf - $ cd /opt/vpnserver $ sudo make
systemdのユニットファイルを作成して、自動起動を有効化する
$ cat << EOF | sudo tee /etc/systemd/system/softether-vpnserver.service [Unit] Description=Softether VPN Server Service After=network.target [Service] Type=forking User=root ExecStart=/opt/vpnserver/vpnserver start ExecStop=/opt/vpnserver/vpnserver stop Restart=on-abort WorkingDirectory=/opt/vpnserver [Install] WantedBy=multi-user.target EOF $ sudo chmod +x /etc/systemd/system/softether-vpnserver.service $ sudo systemctl daemon-reload $ sudo systemctl start softether-vpnserver $ sudo systemctl enable softether-vpnserver
適当な端末から eth0 に向かって、SoftEther VPN Managerで接続して、以下の設定を施す。
- 仮想HUB「DEFAULT」の設定
- ユーザ名:テキトー
- 認証方法:パスワード認証
- SecureNATは無効
- ローカルブリッジ:eth1
- 仮想HUB「HYBRID」の設定
- ユーザ名:テキトー
- 認証方法:パスワード認証
- SecureNATは無効
- 待受ポート:5555/TCP (SE-VPN) のみ
- 仮想L3スイッチの設定
- インターフェース
- 192.168.1.249 ⇒ 接続先HUB「DEFAULT」に接続
- 192.168.10.1 ⇒ 接続先HUB「HYBRID」に接続
- ルーティングテーブル
- 192.168.20.0 ⇒ 192.168.10.2 (AWS用)
- 192.168.30.0 ⇒ 192.168.10.3 (Azure用その1)
- 192.168.31.0 ⇒ 192.168.10.3 (Azure用その2)
- インターフェース
以上で設定完了。
AWS および Azure(VPNブリッジ)
- Amazon EC2 と Azure VirtualMachine で Debian10 のインスタンスを作成
SoftEther の サイトから Linux 64bit 用のバイナリを入手してリンクする。
$ sudo apt install wget gcc make $ cd /opt $ wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Bridge/64bit_-_Intel_x64_or_AMD64/softether-vpnbridge-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz -O - | sudo tar xzf - $ cd /opt/vpnbridge $ sudo make
ユニットファイルを作成して、自動起動を有効化する
$ cat << EOF | sudo tee /etc/systemd/system/softether-vpnbridge.service [Unit] Description=Softether VPN Bridge Service After=network.target [Service] Type=forking User=root ExecStart=/opt/vpnbridge/vpnbridge start ExecStop=/opt/vpnbridge/vpnbridge stop Restart=on-abort WorkingDirectory=/opt/vpnbridge [Install] WantedBy=multi-user.target EOF $ sudo systemctl daemon-reload $ sudo systemctl start softether-vpnbridge $ sudo systemctl enable softether-vpnbridge
VPNブリッジは自力でアドレス変換しないとダメなのでポートフォワードを有効化
$ sudo vim /etc/sysctl.conf net.ipv4.ip_forward = 1 $ sudo sysctl -p
適当な端末から、SoftEther VPN Managerで接続して、以下の設定を施す。
- 仮想HUB「BRIDGE」
SoftEther VPN の設定後に、tapデバイスに ip addr でIPアドレスを設定
- AWS:192.168.10.2
- Azure:192.168.10.3
SoftEther VPNの設定後に、ip route でローカルのルーティングテーブルを編集
- AWS
- 192.168.1.0/24 via 192.168.10.1 dev tap_vpntap
- 192.168.30.0/24 via 192.168.10.1 dev tap_vpntap
- 192.168.31.0/24 via 192.168.10.1 dev tap_vpntap
- Azure
- 192.168.1.0/24 via 192.168.10.1 dev tap_vpntap
- 192.168.20.0/24 via 192.168.10.1 dev tap_vpntap
改めて、SoftEther VPN Managerで接続して、以下の設定を施す。
- 仮想HUB「BRIDGE」
- カスケード接続:仮想HUB「HYBRID」
- 状態:オンライン
- カスケード接続:仮想HUB「HYBRID」
以上で設定は完了。
まとめ
- 本記事の手順を実施した時点で上記の環境が構築できている
- IaaS レベルのハイブリッドクラウドであれば、これで構築完了
- 各拠点間の端末から ping を送りあうと疎通ができるはず
- 次回は各拠点に PaaS をデプロイして、疎通できるようにする
次回に続く kwatanabe.hatenablog.jp
クラウド課金で死なないための予算管理
大要
- パブリッククラウドは使った分だけ課金される
- リソース解放漏れにより、思わぬ請求が来ることを防止したい
- 予算に基づいたアラートを設定した
- 思わぬ課金に気づけるようになった
パブリッククラウドは使えば使うだけ課金される
浦島太郎なkWatanabeは、計算機リソースに対する課金といえばリース代や電気代、あるいはVPSなどの固定額モデルしか馴染みがない。
これらは無茶な使い方をしても、性能が出ない・機能が足らないなど、クールダウンできるタイミングがあったけど、パブリッククラウドではそうはいかない。 リソースは足りなければ足されるし、請求額も膨れていく。
自制できずに課金されるなら自業自得だが、解放漏れによる課金はいただけない。
予算を管理する
リソースを監視する仕組みを入れてもいいけども、個別に対応して漏れると本末転倒なので、まずは水際対策として課金状況に応じたアラートを設定する。
Microsoft Azure の場合
Azure Portalの「サブスクリプション」>「予算」から、予算額とアラートを出す閾値を設定できる。
スコープはサブスクリプションでもいいし、リソースグループでもいい。 解放漏れなどイレギュラーな課金への対策はサブスクリプションに設定して、実際の予算はリソースグループにしておくと、管理が楽かもしれない。
使ったつもりもないのに課金されている場合に備えて1000円。自己牽制として4000円。 額は、とりあえず適当に入れた。これで閾値をまたいだ際に、約1時間以内にアラートが届くようになるらしい。
AWSの場合
AWS Management Consoleの「マイアカウント」>「Budgets」から、予算額とアラートを出す閾値を設定できる。
AWSの場合、課金単位は全てUSDなので、予算もUSDで指定する。 これは、請求額をJPYにしても同じ。
アラートを出す閾値は「実際に掛かった額」または「予測額」で設定できるので、組み合わせて使えばリソースの解放漏れを事前に察知できるかもしれない。
こちらも、同様に使ったつもりが無い場合と自己牽制のために2つのアラートを設定。額はとりあえず適当に入れた。
まとめ
はじめまして kWatanabeです
意気込み
はじめまして。kWatanaeです。
2010年頃には、iTRONやRT-Linux、Xen、KVM などを活用したリアルタイムシステムの研究。
2015年頃には、OpenStack、CloudStack などのプライベートクラウド や Pacemaker、ZooKeeper、ZeroMQ などを活用したHAクラスタの開発をやってました。
その後、炎上プロジェクトにドナドナされ、2020年頃に戻ってきたのはいいものの、世の中はパブリッククラウド一色。それもPaaS/SaaS/FaaSの全盛期。
浦島太郎からイマドキのエンジニアなるため、頑張ります。
これから
パグリッククラウド一色の世の中とはいえ、誰かはオンプレやネットワークもちゃんと見ないといけません。オンプレとクラウドのコラボレーションをテーマとして、Low-Level も High-Level も何でもキャッチアップしていきます。
今後ともよしなに。