えいのうにっき

a-knowの日記です

AWS CloudFormation への入門に「Amazon Web Services 基礎からのネットワーク&サーバー構築」を使ってみた

AWS CloudFormation とは、EC2 や VPC といった AWSクラウドリソースの構成をコード化し、その内容に従って作成、管理、更新を自動で行うための仕組み。もうタイトルの通りなんだけど、今回その CloudFormation への入門のための教材として「Amazon Web Services 基礎からのネットワーク&サーバー構築」を使ってみて、結果的にめちゃめちゃ良かったのでその感謝の気持ちをこのエントリに書きなぐっておく。

Amazon Web Services 基礎からのネットワーク&サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築

経緯

年始に立てた今年の目標として「AWSへのロックイン宣言」を高らかに叫んだのだけど、これ、ちゃんと年始から着々と進めていて。

自ら AWS にガッツリとロックインされに行くためにも、まずは自分の趣味サーバをAWSに持っていかなきゃ、ってんで、「つかう EC2は t2.nano でも大丈夫かなぁ」「今度は複数構成にしたいよね、無駄に」「ELB使っちゃいますか、無駄に」などとワクテカしながら考えてたんだけど、以下の2点のような課題...というか、胸の内にしこりのようなものを感じていて。

  • ネットワーク構成もコード化したい
    • いわゆる configuration 部分については既に Chef で実施するようにしていたこともあり...
  • そもそも AWS でのネットワーク構築について、今持っている知識に若干の不安があった

前者については以前 Terraform に入門したこともあるので今回も...、、とか思ったのだけど、Terraform を使っても結局プラットフォームに依存した書き方になっちゃうし、それなら中途半端なことはやめて CloudFormation にしちゃえ、これぞロックインだ!(?)ってことで、これについては CloudFormation に決定。

後者については、以前より良書だと聞いてはいつつもなかなか読むタイミングを掴めずにいた「Amazon Web Services 基礎からのネットワーク&サーバー構築」が良いのではと思い書店にGo。出版年月は2014年7月と若干古いながらも、書名からしてドンピシャだし、内容を確認しても想定してた以上の良さを感じた(実戦形式の構成になっているということもあり、僕に合っているという意味で)ので、そのまま購入。

そして、この本の内容を CloudFormation を使って実践することで、上記2つの課題をいっぺんに解消してしまえ!と考えた。もちろんこの本では CloudFormation を使うことは目的とはしておらず Webコンソールや CUI を通じてネットワークの構築や設定をしていくという内容なので、「CloudFormation で同じことを行うときにどうすればいいか?」といったことの手引きについては一切かかれていないのだけど、そこは随時公式ドキュメントなどを参照するなどして補うことにした。

......現在単一サーバで動いてる自分の趣味サーバを単に AWS に移行すればいいだけなんだけど、このヤクの毛刈り感、プライベートならではって感じでたまらん。

取り組み内容

本書の内容のうち、実践形式になっているのは以下の6章。

  • ≪CHAPTER 2≫ ネットワークを構築する
  • ≪CHAPTER 3≫ サーバーを構築する
  • ≪CHAPTER 4≫ Web サーバーソフトをインストールする
  • ≪CHAPTER 6≫ プライベートサブネットを構築する
  • ≪CHAPTER 7≫ NAT サーバーを構築する
  • ≪CHAPTER 8≫ DB を用いたブログシステムの構築

結果的には上記の全てを CloudFormation json 化することができた(さいごの Wordpress のバイナリダウンロードとインストール、その設定だけは手で実施した)。

やった作業内容はすべて以下のリポジトリに集約している。

github.com

章ごとに Pull Request を立てて実施するようにしたし、その各 p-r を目次のように README にまとめてあるので、今回僕がやったことと同じようなことをしたい人には大いに参考にしてもらえると思う!(僕が参照した URL やつまづいたところについても随時コメントで残している)

感想とか

まず、この本について誤解していたというか実際に読んでみてわかったこととしては、この本は「AWSでのネットワーク・サーバ構築に関する基礎を学ぶための本」というよりは「AWS を題材として、ネットワーク・サーバ構築に関する基礎を学ぶ本」である、と言ってしまっても差し支えないほどの丁寧な内容だな、ということ。

DNS の仕組みや HTTP プロトコルについての話など、ネットワーク構築の基礎を学ぶに際して重要な記述やその実践パートもあり、それがとても良いなと思った。telnet を使って HTTP サーバと話をしてみよう、とか、一通り動くモノを構築したそのあとに「TCP/IPによる通信の仕組みを理解する」という章がちゃんとあったりするのが、にくい。w AWS に関する内容に留まらず、必要かつ重要なことにはしっかりとページを割く、という、著者の誠実な姿勢のようなものを感じられた。

昨年僕は新卒研修の受け入れ担当をしたのだけど、もし昨年の時点でこの本の内容について知っていたら、きっと教材として採用していただろうと思う。

肝心の「AWS でのネットワーク・サーバ構築」ということに関しても、ルートテーブルやパブリック/プライベートサブネットなどについて、「知らなかったことの習得」というよりは「自分の知識や経験の再確認」のようなことができたので、とても良かったと思っている。これで自信を持って次に進める。

ただ、そうは言っても約3年前の本なので、情報が古いのではないか?という点については気をつけながら読む必要はあると思う(例えば今では NAT ゲートウェイというのがあったりする)。

また今回「ヤクの毛刈り」的に取り組んでみた CloudFormation だけど、やはり普通に便利だな、という印象を持った。ただ何もない状態でただ CloudFormation について学習する、というのは(主にモチベーション的な意味で)つらいので、この点でも今回の選択に間違いはなかったように思う。

以下、CloudFormation に関しての感想とか印象。

  • 同じ CloudFormation で作成した他のリソースを指し示すには「論理ID」というものを用いる。なるほど
  • Terraform とかでもそうなんだけど、CloudFormation で作成したリソースを手動で削除とかやっちゃだめ(当たり前)
  • CloudFormation を使ってネットワーク構築することで、普段あまり意識することの少ない箇所にも自然と意識が向くので良い
  • 今回がんばって json を書いたけど、今は yaml もサポートしてるっぽい
  • 今回は学習の意味で Apache のインストールやデータベースの作成なども CloudFormation で実施したけど......
    • ソフトウェア類のインストールはまだしも、設定とかはこれでやりたくはないなというかんじ
    • なので個人的には、ネットワークの構築と素の EC2 インスタンスの構築、くらいの用途として留めるつもり

その他、user data のような今まで使ったことのない仕組みとかにも触れたりできた。AWS もどんどん新しい機能を追加してきたり新サービスを投入してきたりしてるから、仕事で触ってるだけじゃ経験できない要素も出てくるよね。そういった要素を、プライベートでも AWS を触ることでカバーしていきたいところ。

Amazon Web Services 基礎からのネットワーク&サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築



follow us in feedly