@kyanny's blog

My thoughts, my life. Views/opinions are my own.

AWS PrivateLink

仕事で検証のために必要になったので AWS PrivateLink(AWS でホストされているサービスに安全にアクセス)| AWS を使ってみた。

ネットワーク周りの基礎知識や実務経験が足りないのに加え、AWS の VPC 周りは輪をかけて知識・経験がなく、苦労した。

以下の記事が参考になった。特に DevelopersIO の記事はほぼ全ての操作画面についてスクリーンショットが掲載されていて、とてもわかりやすかった。

最初は↓の構成図を見てもアイコンの意味もわからなかったが、AWS のアイコン集の PowerPoint ファイルをダウンロードしてきて見比べたりして理解を深めた。左の VPC の境界線上にある盾みたいなアイコンがエンドポイントで、右の VPC の境界線上にある三叉になってるアイコンがネットワークロードバランサー。この NLB の隣に、アイコンはないがエンドポイントサービスがある。

service consumer VPC 内の ec2 -> consumer VPC 側の endpoint -> service provider VPC 側の endpoint service -> network load balancer -> target group -> consumer VPC 内の ec2 という風にコンポーネントがつながる。

なお、「Web サービスなどを公開」とかそういう説明があるので ssh みたいな接続が持続するやつはダメとかあるのか?と思って port 22 も nlb のターゲットにぶら下げて consumer ec2 から provider ec2 に ssh してみたところ問題なくログインできた(公開鍵とかはあらかじめ設定した)。TCP なら問題ないようだ(nlb は今は UDP もサポートしてるが PrivateLink で使う際は nlb は UDP をサポートしない、という既知の制限がある)。

ハマったところ

  • nlb の先の target group と service provider の ec2 インスタンスの security group で inbound トラフィックを許可しないといけない。この辺は AWS に慣れている人にとっては当然で簡単なことなのだと思うが、ここの設定(許可)が漏れててリクエストが通らず、デバッグの仕方もわからなくて苦労した。結局、作りかけのリソースを全部削除して、もう一度スクリーンショットと首っぴきでやり直した。
  • 本当はインターネットにつながっていない VPC 同士の間で PrivateLink を試したかったが、両方の VPC にインターネットゲートウェイとインターネットゲートウェイにつながっているサブネットを作らないと ec2 インスタンスに ssh ログインできず、サブネットを追加で作る必要があった。そもそもサブネットとは??インターネットゲートウェイとは??みたいな理解度なのでつらかった。
  • VPC や PrivateLink とは関係ないところで、両方の VPC のサブネットを ap-northeast-1a に作ったら無料枠が適用される ec2 インスタンスが作成できず(プラットフォーム側の制限っぽいエラーで)、ap-northeast-b に別のサブネットを作ってそっちで ec2 インスタンスを作る必要があった。

わからないことを「効率よく学び、習得する」のとは真逆を地でやってきた人生だったが、だんだん「わからないけどできるまでトライアルアンドエラーを続ける我慢強さ」がなくなってきて、それでもちょっとずつ「落とし穴全部落ちる」的なアプローチを繰り返すと鍛えられて少しずつ我慢強さが戻ってくる、そんな感覚があった。ネットワークに限らずコンピューターサイエンスでもなんでも全般的に基礎となる知識や理解が足りないことは二十年前から自覚しているので、とにかくハンズオンで失敗を重ね、経験から学ぶ愚者のやり方を愚直にやっていく。