歩いたら休め

なんでこんな模様をしているのですか?

【AWS】AWSの構築・ネットワークで学んだこと

いろいろあって、AWSでEC2のインスタンス立てて、APIサーバーはプライベートのサブネットに立てて…という設定作業をしています。

多分知っている人からすると一瞬で終わるような作業ばかりなのですが、私は始めてやる作業なので詰まってばかりで困っています。 しかし、これまでの自分の不勉強を嘆いていてもしょうがありません。

ちょうど、インフラエンジニア出身の先輩にAWSのもろもろを教えていただく機会がありました。 もう困らないように、その内容を簡単にまとめておこうと思います。

何も手がかりのないまま「とりあえずEC2のインスタンス作っとくか」って作業をすると、後でサブネットの設定が変えられず、作り直す羽目になって面倒でした。

1. VPCを作り、サブネットを切る

VPCを作り、ここでパブリックとプライベートなサブネットを切ります。

docs.aws.amazon.com

2. サブネットにネットワークACLを紐付ける

ネットワークACL(Access Control List)は、要するにサブネットに対するファイヤーウォールの役割を果たすもので、「このIPのこのポートからの接続は許可する」みたいな設定ができます。

docs.aws.amazon.com

このとき、ルールを「1, 2, 3...」ではなく「100, 200, 300」と、ある程度飛ばして設定するとよいとお薦めされました。 なぜなら、switch文のように、上から順番に除外/許可ルールが適用されるため、「300番と400番の間に新しい除外ルールを設定したい」というときに、新しく350番を挿入すればよいのに対し、連番で入れていると全部ずらす必要があるためです。

3. インターネットゲートウェイを設定する

VPCの中のインスタンスは、インターネットゲートウェイを通して外のインターネットと繋がります。VPCにアタッチ(紐付け)しましょう。

設定項目はゲートウェイの名前だけです。

docs.aws.amazon.com

4. ルートテーブルを設定する

各サブネットのルーティングを担当するのがルートテーブルです。

docs.aws.amazon.com

5. EC2インスタンスを作る

スペックとコストを加味し、AMI(Amazon Machine Image)とインスタンスタイプを選びましょう。

インスタンスの初期設定時に所属するサブネットを指定するため、上記の手順を先に行っておく必要があります。 気付かずにズンズン設定すると、後で作り直す羽目になります。

docs.aws.amazon.com

設定項目の細かい注意点

ここでアドバイスとして「IAMロールは空でもいいから作っとけ!」というアドバイスを貰いました。 IAMロールによってEC2に、他のAWSのサービス(S3等)をcliやプログラムで操作できる権限が与えられるのですが、これはEC2を作るときしか設定できず、後から権限を付与することができないそうです。

また、誤って削除してしまわないよう、削除保護を付けるとベターだそうです。

ストレージの容量が多いと当然値段は上がるのですが、後からストレージの容量を減らすことはできません。 追加でストレージを設定できるため、「とりあえず低容量で作って、様子を見て追加するという運用もアリ」と聞きました。 また、「EBSは信頼性が高いが、インスタンスストアは再起動するとデータが消えるから注意せよ!」だそうです。

セキュリティグループを設定する

セキュリティーグループを設定しましょう。これはインスタンスに対するファイヤーウォールの役割を果たすものです。 サブネットに対するネットワークACLとよく似ていますが、

  • 設定する順番は関係ない(「ステートレス」と表現するそうです)
  • 「除外」の設定はなく、「許可」のみ

だそうです。

セキュリティーグループは一つのインスタンスに対して複数設定できるため、サーバーごとに設定するのではなく「Webサーバー用の設定と、ssh用の設定を用意して、必要なインスタンスに紐付けていく」とスッキリするそうです。

docs.aws.amazon.com

最後に

こちらの本を勧めてもらいました。実際参考になります。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

しかし、「公式のドキュメントが一番新しくていいよ」とも先輩から教えてもらいました。

「0.0.0.0/0」みたいにIPの範囲が指定されているやつが分からない場合は、「サブネットマスク」でググると分かります。

サブネットマスク - ネットワークエンジニアを目指して