CloudFormationでインドVPN用EC2構築してみた(Youtube Premium格安利用を目指して)
Youtube中毒な日々を送っているのでPremiumに登録済なのだが、巷で話題のインドVPN経由で格安でPremium利用する方法を知りつつずっと手をつけていなかった。
そろそろ重い腰を上げてやってみようと思い、せっかくならインドVPNをAWSで構築することにした。
構築方針
AWSのムンバイリージョンにEC2を構築しSoftEther VPNを導入する。
IaC(Infrastructure as Code)を今後学んでいかねばと考えており、今回
- Pulumi:現場で導入中。未経験なのでキャッチアップしてきたい
- CloudFormation:現場で使われている。若干かじっている。
のどちらにするか迷ったが、早く格安Premiumにしたかったので多少わかるCloudFormationを採用することにした。Pulumiはまた次回触ってみよう。
また、せっかくなのでCloudFormationデザイナーを使ってみることにした(こちらは未経験)。
AWSインドVPN構築
最終的な構成イメージ
EC2接続のSession Manager用にIAMRole、InstanceProfileも作成しているが、
EC2 Instance Connectだけで事足りたので実はいらなかった。。詳細は後述
CloudFormationデザイナーでテンプレート作成
IAMRole/InstanceProfileを除いた基本形の
EC2インスタンス構築(VPC、Subnet、IGW、RouteTable込み)
は下記の記事がわかりやすく、基本踏襲させてもらった。
- CloudFormationデザイナーをはじめよう | DevelopersIO
- 【AWS】CloudFormationのデザイナーを使ってEC2インスタンス環境(VPC+Subnet+IGW+RouteTable含む)を構築する手順 | 100%レンタルサーバーを使いこなすサイト
ここまでで構築したリソースは下記となる
- VPC
- Subnet
- EIP
- InternetGateway
- RouteTable
- SecurityGroup
- EC2
参考記事との差分だけ記述しておく
SecurityGroup
鍵管理が不要なEC2 Instance Connectでの接続を想定し、
- タイプ:SSH
- ソース:13.233.177.0/29
を設定する。
このソースIPはムンバイリージョンでEC2 Instance Connectを使う場合のIPレンジとなる。(2021/05/16現在)
このIPレンジはAWS社が公開しているこちらから確認可能。
SoftEther VPNを利用するにあたってのUDPポートも設定しておく。
SGVPNEC2: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPCVPN GroupDescription: ssh login SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 13.233.177.0/29 - IpProtocol: udp FromPort: 4500 ToPort: 4500 CidrIp: 0.0.0.0/0 - IpProtocol: udp FromPort: 500 ToPort: 500 CidrIp: 0.0.0.0/0
EC2インスタンス
EC2 Instance Connectは下記Linux ディストリビューションがサポートされている。
ということで、
を使うことにした。
EC2YoutubeVPN: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-010aff33ed5991201 InstanceType: t2.micro SubnetId: !Ref SubnetPublic SecurityGroupIds: - !Ref SGVPNEC2
実は当初はArmでやってみようと「64 ビット Arm、t4g.micro」で作ったが、SoftEher導入のmake時にエラーが発生。
下記記事にて類件対処方法もあるが、他にもエラーが出て解決に時間がかかりそうだったので無理せず諦めた。
[softeher] ARM系のCPUのSoC搭載SBCで、ソースからsofteherをビルド – ぷすぅ~ぷすぅ~
スタック作成
ここまでの構築でスタックを流し、無事に「CREATE_COMPLETE」となる
EC2 Instance ConnectでのEC2接続も確認できた。
EC2 Instance Connectではローカル端末からのコピペができないと思っていた(そのような記事があった)ので、SessionManagerでの接続もできるように対応した。
事後でローカル端末のコピーを普通にCtrl+VでEC2 Instance Connectでペーストできることがわかった。。
(オプション)Session Manager接続設定
今回の要件ではEC2 Instance Connectで十分であったが、せっかくなのでSession Managerの設定も記録しておく。
IAM関連だとCloudFormationデザイナーの記事はさくっとは見つからなかったので、通常の下記CloudFormation記事を参考にさせてもらうことにした。
- CloudFormationでEC2にIAMロールを付与する - Qiita
- [小ネタ]Session ManagerでアクセスできるEC2を1発で作成するCloudFormationテンプレート作ってみた | DevelopersIO
Session ManagerはAmazon Linux2ではデフォルトで導入済なので、あとは適切なポリシーを付与してあげるのみ。
IAMポリシーのAmazonSSMManagedInstanceCoreがアタッチされているIAMロールをEC2に付与してあげる必要があるとのことで、下記のように記述
IAMInsProfile: Type: 'AWS::IAM::InstanceProfile' Properties: Roles: - !Ref IAMRole IAMRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - 'sts:AssumeRole' Path: / ManagedPolicyArns: - 'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore'
これでスタック更新を行い、さっそくSession Managerで接続しようとするが、、
あれ、まだ接続できない。
【初心者向け】Session Manager でインスタンスが表示されない時のトラブルシュート | DevelopersIO
Session Manager初心者なので上記を見ると、再起動するとSSM側に認識されやすくなるとの記載あり。
IAMロールをつけ忘れていた場合に、IAMロールをアタッチしてもすぐにSSMコンソールで表示されないことがあります。早く確認したいときは、インスタンスを再起動すると、SSM側に認識されやすくなることがあります。
ということでさっそくEC2再起動したら無事にいけた!
SoftEther VPNインストール&VPN利用確認
下記記事が詳しいのでこれに従い導入を行った。ここでは割愛。
hacknote.jp
(後日談) SoftEather VPNのDocker版が存在。こっちのほうがスムーズに導入可。
blog.odaryo.com
Macから無事にVPN接続できたので、グローバルIPがEIP (ムンバイリージョン)になっているかここから確認したところ、きちんと変わっていることを確認
YoutubeのPremiumプラン変更
まずはこれまで契約していたPremium(Apple経由)サブスクを解除。YoutubeロゴもIN (インド)に変わっていることを確認、Premium料金もルピー表記になっている!早速ファミリープランで申し込み実施。
注:既存Premium解約して数時間してからやっとPremium再契約可能な画面が出るようになった。
CloudFormationデザイナー所感
テンプレートを可視化した上で、リソースの関連付けも直感的にできるのはわかりやすい。一方で、位置情報などのメタデータが入ってしまうのでそれによるテンプレート肥大化はネックかな。
CloudFormationデザイナーをまとめてくれているスライドがあり、そこでもやはりメタデータのことが書かれている。
CloudFormationデザイナーで、コードを編集するのはやめておいた方がいいです。メタデータが付くため、バージョン管理するときに差異がわかりづらくなります。
(中略)
コードの編集は、テキストエディタを使って図を見たいときにCloudFomationデザイナーを使うのがいいです。
【AWS CloudFormation入門】 初心者が気をつけたいこと5つ|スクショはつらいよ
一時的にサクッと環境作って破棄するならCloudFormationデザイナーでの作成・編集も有用だが、本格的に環境構築・改修を行うようなケースでは上記のように図を見るときだけデザイナー使うのがよいのかもしれない。