AWS 学びの記録

ついに私にもAWSと向き合う時が来たようだ。
前提
- AWSは「これだけでも実現はできるけど、これを組み合わせるとより高度なことができますよ」というパターンがめちゃくちゃ多いので、選定に悩む。シンプルに保ちたい場合もあるので、組み合わせることが常に善とは限らない。
- サーバー使ってやりたいことはだいたいサービスとして用意されてるので、EC2を立てなくても大抵のことはできる。EC2なしで上手いことやるのが使いこなすコツ
VPC
EC2立てるのにまずVPCが必要とのこと。ネットワークは難しいから避けていたのにいきなり避けて通れなくなった。TCP/IP本の知識が少しは役に立つか。
VPCはリージョンに1つだがサブネットはAZに1つ。ALBからプライベートサブネットにいるEC2につなぐには、パブリックサブネットにいるALBから、同AZのプライベートサブネットのEC2へつなぐようにする。なるほど。
おもむろにVPCウィザードなる目立つボタンがあるのでクリックしてみる。いきなりサブネットの作り方を聞かれて困惑。パブリック+プライベートで合ってるよね? これで作る。
NATゲートウェイにEIPが必要と言われて詰んだ。振り出しに戻る。まずEIPを作らなくては。固定IPってお金かかると聞いたから嫌だったけど必要なら仕方ない。
なんでNATゲートウェイにEIPが必要なの? VPC内のパブリック/プライベートサブネット間の通信に使うんじゃないの?
VPC作成後、見に覚えのないVPCが他に存在しているのに気づく。デフォルトVPCといって最初からEC2インスタンスを立てられたりするためにご親切にも用意してあるらしい。しかしパブリックサブネットしかないし、ACLもガバガバとのことで、消す。消すときにIGWも一緒に消える警告が出たが、改めて確認するとIGWは1個のまま。 これはIGWは消しても0個にはならないってこと?
IPの勉強したけどルートテーブルがわからない。
パブリックサブネットとプライベートサブネットはどうやって見分ける?
参考リンク

NATゲートウェイにEIPが必要な理由
NATゲートウェイはプライベートサブネットからインターネットに出ていく(インターネットから入ることはできない)ために、パブリックサブネットに設置する。だからEIPが必要になる。実体はEC2らしい? NATゲートウェイを通じてインターネットに出ていけるサブネットを、protected サブネットとも呼ぶ。C++のアクセス制御からの連想だろう。一方で完全にインターネットと直接通信する必要のないRDS等はNATゲートウェイのないプライベートサブネットに置くのがよさそう。
通信の流れは参考リンクのスライドが分かりやすかった。
パブリック/プライベートサブネットを見分ける方法
これも参考リンクのスライドが良かった。ルーティングテーブルにIGWのIPが乗っていれば、サブネット外への通信をIGWを介して行うため、つまりパブリックサブネットとなる。ルーティングテーブルにNATゲートウェイがあれば( なにもないってことはあるのかな? )、サブネット外への通信はNATゲートウェイを介して行うため、プライベートサブネットとなる。
参考リンク

ネットワークが出来たのでやっとEC2にとりかかれる。
EC2
終わった段階で思い出してまとめているので諸々忘れていると思う。
まず踏み台となるインスタンスをパブリックサブネットに立ててsshで入ろうと思ったが入れない。これは ssh-add
で登録された鍵が多すぎて規定回認証失敗しているからだった。( ssh -v
でわかった)
ssh-add -D
で一旦すべての鍵を登録から外し、改めて .pem ファイルを使ってログインする。成功。そしたら .ssh/authorized_keys
に普段遣いの公開鍵を登録して、.pem ファイルなしで入れるようにする。しかし .pem ファイルは後でまた使うので絶対になくしてはいけない。
セキュリティグループだが、無論自分のIPだけ許可する。初期設定が(警告があるとはいえ)自由にアクセスできる設定なのは怖いなと思った。あと、デフォルトSGは「何も許可しない」設定なので使わない。これのせいで謎にハマった。
AWSのEC2は立てたそばから不正アクセスが無限に飛んでくるイメージだったので、参考リンク見ながら /var/log/secure
とか確認したがまだ特に何もなかった。まあそりゃあね。
踏み台が出来たので今度はプライベートサブネットにEC2を立てる。ここで寄り道して予算確認したらNATゲートウェイにそこそこなコスト(月5,000円ほど)が掛かっているのに気づく。クラウドの怖さを思い知る。とりあえず使わないときはNATゲートウェイを削除することにした。
EC2を立てたら踏み台から ping を打ってみる。何も反応がない。SGの設定をミスっていた。プライベートなインスタンスのSGのソースに、踏み台SGからの通信をすべて許可するよう変更する。これで通った。
踏み台からその先のインスタンスに入る方法はいくつかあるが、秘密鍵を踏み台にアップするとかいうおぞましい方法がちょいちょい紹介されてて鼻につく。ProxyCommand を使った正攻法でログインする。ログインできたら、先程と同様に普段遣いの公開鍵を登録する。これでいつもどおり ssh-agent を使って踏み台の先に入れるようになった。しかし、この方法だとサーバーが増えるごとに踏み台と同じように鍵を登録する必要が出てきて、嫌な感じがする。
他にも、踏み台の sshd の設定をいじったりとかはかなり自前管理なところが多くてすっきりしない感じがした。
ALBと Web サーバー
あとは web サーバーにALBをつなぐだけ。ALBを作成する。サブネットが2つ以上必要だと言われてしまった。ネットワーク設定に戻る。apne1cにもサブネットを作り、ALBに紐付ける。作成完了。
web サーバーには適当に nginx でも入れるかと思ったら yum で普通に入らないので、extra うんぬんかんぬん経由で入れる。/etc/init.d
は使わないので systemctl
。立ち上げるが nginx からの反応がない。よくわらかないので apache で動作確認することにした、こっちの方が慣れてるし。今度は無事 curl http://localhost
ができることを確認。
さてALBにブラウザからアクセスすれば web サーバーが立ち上がっているのが確認できる、と思ったが通信できない。なぜかALBのSGがデフォルトになっていた。またここで出しゃばってくるのか!! ALB用に TCP 80 を通すSGは作ってあったのに紐付けが間違っていたので、紐付ける。無事ページが表示された。
参考リンク
地味に古い記事が多い。